/ Hex Artifact Content
Login

Artifact 6e3d5d4c68076c09724c74bc5c39985a204e55a0:


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 49 6e 76 6f 6b 65 20 74 68  ./*.** Invoke th
0ef0: 65 20 56 44 42 45 20 63 6f 76 65 72 61 67 65 20  e VDBE coverage 
0f00: 63 61 6c 6c 62 61 63 6b 2c 20 69 66 20 64 65 66  callback, if def
0f10: 69 6e 65 64 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ined.*/.#if !def
0f20: 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44 42 45  ined(SQLITE_VDBE
0f30: 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64 65 66  _COVERAGE).# def
0f40: 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54 61  ine VdbeBranchTa
0f50: 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a 23  ken(I,M).#else.#
0f60: 20 64 65 66 69 6e 65 20 56 64 62 65 42 72 61 6e   define VdbeBran
0f70: 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 5c 0a 20  chTaken(I,M) \. 
0f80: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 6c     if( sqlite3Gl
0f90: 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62 65  obalConfig.xVdbe
0fa0: 42 72 61 6e 63 68 21 3d 30 20 29 7b 20 5c 0a 20  Branch!=0 ){ \. 
0fb0: 20 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62       sqlite3Glob
0fc0: 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62 65 42 72  alConfig.xVdbeBr
0fd0: 61 6e 63 68 28 73 71 6c 69 74 65 33 47 6c 6f 62  anch(sqlite3Glob
0fe0: 61 6c 43 6f 6e 66 69 67 2e 70 56 64 62 65 42 72  alConfig.pVdbeBr
0ff0: 61 6e 63 68 41 72 67 2c 20 5c 0a 20 20 20 20 20  anchArg, \.     
1000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1020: 20 70 4f 70 2d 3e 69 53 72 63 4c 69 6e 65 2c 28   pOp->iSrcLine,(
1030: 49 29 2c 28 4d 29 29 3b 20 7d 0a 23 65 6e 64 69  I),(M)); }.#endi
1040: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  f../*.** Convert
1050: 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69 73   the given regis
1060: 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ter into a strin
1070: 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f 6e  g if it isn't on
1080: 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52 65  e.** already. Re
1090: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
10a0: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
10b0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74  s..*/.#define St
10c0: 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29 20  ringify(P, enc) 
10d0: 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66 6c  \.   if(((P)->fl
10e0: 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  ags&(MEM_Str|MEM
10f0: 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73 71  _Blob))==0 && sq
1100: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
1110: 6e 67 69 66 79 28 50 2c 65 6e 63 29 29 20 5c 0a  ngify(P,enc)) \.
1120: 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d       { goto no_m
1130: 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  em; }../*.** An 
1140: 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67  ephemeral string
1150: 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66 69 65   value (signifie
1160: 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45 70 68  d by the MEM_Eph
1170: 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61 69 6e  em flag) contain
1180: 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74  s.** a pointer t
1190: 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20  o a dynamically 
11a0: 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69 6e 67  allocated string
11b0: 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74 68 65   where some othe
11c0: 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73 20 72  r entity.** is r
11d0: 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 64  esponsible for d
11e0: 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 61 74  eallocating that
11f0: 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61 75 73   string.  Becaus
1200: 65 20 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a  e the register.*
1210: 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 72  * does not contr
1220: 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c 20 69  ol the string, i
1230: 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c 65 74  t might be delet
1240: 65 64 20 77 69 74 68 6f 75 74 20 74 68 65 20 72  ed without the r
1250: 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69  egister.** knowi
1260: 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ng it..**.** Thi
1270: 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76 65 72  s routine conver
1280: 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20  ts an ephemeral 
1290: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 64 79  string into a dy
12a0: 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61  namically alloca
12b0: 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20 74 68  ted.** string th
12c0: 61 74 20 74 68 65 20 72 65 67 69 73 74 65 72 20  at the register 
12d0: 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e  itself controls.
12e0: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
12f0: 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72 74 73  , it.** converts
1300: 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20 73 74   an MEM_Ephem st
1310: 72 69 6e 67 20 69 6e 74 6f 20 61 6e 20 4d 45 4d  ring into an MEM
1320: 5f 44 79 6e 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a  _Dyn string..*/.
1330: 23 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65  #define Deepheme
1340: 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69  ralize(P) \.   i
1350: 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  f( ((P)->flags&M
1360: 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20  EM_Ephem)!=0 \. 
1370: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
1380: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
1390: 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20  able(P) ){ goto 
13a0: 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74  no_mem;}../* Ret
13b0: 75 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20  urn true if the 
13c0: 63 75 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65  cursor was opene
13d0: 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f  d using the OP_O
13e0: 70 65 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65  penSorter opcode
13f0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53  . */.#define isS
1400: 6f 72 74 65 72 28 78 29 20 28 28 78 29 2d 3e 70  orter(x) ((x)->p
1410: 53 6f 72 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a  Sorter!=0)../*.*
1420: 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43  * Allocate VdbeC
1430: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75  ursor number iCu
1440: 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69  r.  Return a poi
1450: 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74  nter to it.  Ret
1460: 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77  urn NULL.** if w
1470: 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d  e run out of mem
1480: 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56  ory..*/.static V
1490: 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63  dbeCursor *alloc
14a0: 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62  ateCursor(.  Vdb
14b0: 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20  e *p,           
14c0: 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61     /* The virtua
14d0: 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69  l machine */.  i
14e0: 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20 20 20  nt iCur,        
14f0: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
1500: 20 74 68 65 20 6e 65 77 20 56 64 62 65 43 75 72   the new VdbeCur
1510: 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  sor */.  int nFi
1520: 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f  eld,           /
1530: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  * Number of fiel
1540: 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ds in the table 
1550: 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  or index */.  in
1560: 74 20 69 44 62 2c 20 20 20 20 20 20 20 20 20 20  t iDb,          
1570: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
1580: 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e  the cursor belon
1590: 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a  gs to, or -1 */.
15a0: 20 20 69 6e 74 20 69 73 42 74 72 65 65 43 75 72    int isBtreeCur
15b0: 73 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65 20  sor     /* True 
15c0: 66 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61 6c  for B-Tree.  Fal
15d0: 73 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61  se for pseudo-ta
15e0: 62 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a 29  ble or vtab */.)
15f0: 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20  {.  /* Find the 
1600: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
1610: 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f   will be used to
1620: 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20   store the blob 
1630: 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72  of memory.  ** r
1640: 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
1650: 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75   VdbeCursor stru
1660: 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e  cture. It is con
1670: 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61  venient to use a
1680: 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f   .  ** vdbe memo
1690: 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67  ry cell to manag
16a0: 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  e the memory all
16b0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64  ocation required
16c0: 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65   for a.  ** Vdbe
16d0: 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65  Cursor structure
16e0: 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69   for the followi
16f0: 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a  ng reasons:.  **
1700: 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69  .  **   * Someti
1710: 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  mes cursor numbe
1720: 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20  rs are used for 
1730: 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66  a couple of diff
1740: 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70  erent.  **     p
1750: 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62  urposes in a vdb
1760: 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64  e program. The d
1770: 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69  ifferent uses mi
1780: 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a  ght require.  **
1790: 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20 73       different s
17a0: 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ized allocations
17b0: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70  . Memory cells p
17c0: 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a  rovide growable.
17d0: 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74    **     allocat
17e0: 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ions..  **.  ** 
17f0: 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45    * When using E
1800: 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e  NABLE_MEMORY_MAN
1810: 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20  AGEMENT, memory 
1820: 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e  cell buffers can
1830: 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65  .  **     be fre
1840: 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68  ed lazily via th
1850: 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73  e sqlite3_releas
1860: 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20  e_memory() API. 
1870: 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69  This.  **     mi
1880: 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62  nimizes the numb
1890: 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c  er of malloc cal
18a0: 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20 73  ls made by the s
18b0: 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ystem..  **.  **
18c0: 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f   Memory cells fo
18d0: 72 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c  r cursors are al
18e0: 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65 20 74  located at the t
18f0: 6f 70 20 6f 66 20 74 68 65 20 61 64 64 72 65 73  op of the addres
1900: 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65  s.  ** space. Me
1910: 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d  mory cell (p->nM
1920: 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  em) corresponds 
1930: 74 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61  to cursor 0. Spa
1940: 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73  ce for.  ** curs
1950: 6f 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20  or 1 is managed 
1960: 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28  by memory cell (
1970: 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e  p->nMem-1), etc.
1980: 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  .  */.  Mem *pMe
1990: 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e  m = &p->aMem[p->
19a0: 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69  nMem-iCur];..  i
19b0: 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65  nt nByte;.  Vdbe
19c0: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
19d0: 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20  .  nByte = .    
19e0: 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28    ROUND8(sizeof(
19f0: 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32  VdbeCursor)) + 2
1a00: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
1a10: 65 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 69 73  eld + .      (is
1a20: 42 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69  BtreeCursor?sqli
1a30: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1a40: 7a 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65  ze():0);..  asse
1a50: 72 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72  rt( iCur<p->nCur
1a60: 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  sor );.  if( p->
1a70: 61 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20  apCsr[iCur] ){. 
1a80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72     sqlite3VdbeFr
1a90: 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
1aa0: 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20  pCsr[iCur]);.   
1ab0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1ac0: 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53  = 0;.  }.  if( S
1ad0: 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65  QLITE_OK==sqlite
1ae0: 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4d 65  3VdbeMemGrow(pMe
1af0: 6d 2c 20 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a  m, nByte, 0) ){.
1b00: 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75      p->apCsr[iCu
1b10: 72 5d 20 3d 20 70 43 78 20 3d 20 28 56 64 62 65  r] = pCx = (Vdbe
1b20: 43 75 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b  Cursor*)pMem->z;
1b30: 0a 20 20 20 20 6d 65 6d 73 65 74 28 70 43 78 2c  .    memset(pCx,
1b40: 20 30 2c 20 73 69 7a 65 6f 66 28 56 64 62 65 43   0, sizeof(VdbeC
1b50: 75 72 73 6f 72 29 29 3b 0a 20 20 20 20 70 43 78  ursor));.    pCx
1b60: 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20  ->iDb = iDb;.   
1b70: 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e   pCx->nField = n
1b80: 46 69 65 6c 64 3b 0a 20 20 20 20 69 66 28 20 69  Field;.    if( i
1b90: 73 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a  sBtreeCursor ){.
1ba0: 20 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73        pCx->pCurs
1bb0: 6f 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29  or = (BtCursor*)
1bc0: 0a 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d  .          &pMem
1bd0: 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f  ->z[ROUND8(sizeo
1be0: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32  f(VdbeCursor))+2
1bf0: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
1c00: 65 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69  eld];.      sqli
1c10: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65  te3BtreeCursorZe
1c20: 72 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29  ro(pCx->pCursor)
1c30: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
1c40: 74 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a  turn pCx;.}../*.
1c50: 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72  ** Try to conver
1c60: 74 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61  t a value into a
1c70: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
1c80: 6e 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61  ntation if we ca
1c90: 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f  n.** do so witho
1ca0: 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ut loss of infor
1cb0: 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  mation.  In othe
1cc0: 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20  r words, if the 
1cd0: 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20  string.** looks 
1ce0: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63  like a number, c
1cf0: 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61  onvert it into a
1d00: 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20   number.  If it 
1d10: 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b  does not.** look
1d20: 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20   like a number, 
1d30: 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a  leave it alone..
1d40: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
1d50: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
1d60: 69 74 79 28 4d 65 6d 20 2a 70 52 65 63 29 7b 0a  ity(Mem *pRec){.
1d70: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
1d80: 67 73 20 26 20 28 4d 45 4d 5f 52 65 61 6c 7c 4d  gs & (MEM_Real|M
1d90: 45 4d 5f 49 6e 74 29 29 3d 3d 30 20 29 7b 0a 20  EM_Int))==0 ){. 
1da0: 20 20 20 64 6f 75 62 6c 65 20 72 56 61 6c 75 65     double rValue
1db0: 3b 0a 20 20 20 20 69 36 34 20 69 56 61 6c 75 65  ;.    i64 iValue
1dc0: 3b 0a 20 20 20 20 75 38 20 65 6e 63 20 3d 20 70  ;.    u8 enc = p
1dd0: 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 20 20 69 66  Rec->enc;.    if
1de0: 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d  ( (pRec->flags&M
1df0: 45 4d 5f 53 74 72 29 3d 3d 30 20 29 20 72 65 74  EM_Str)==0 ) ret
1e00: 75 72 6e 3b 0a 20 20 20 20 69 66 28 20 73 71 6c  urn;.    if( sql
1e10: 69 74 65 33 41 74 6f 46 28 70 52 65 63 2d 3e 7a  ite3AtoF(pRec->z
1e20: 2c 20 26 72 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &rValue, pRec-
1e30: 3e 6e 2c 20 65 6e 63 29 3d 3d 30 20 29 20 72 65  >n, enc)==0 ) re
1e40: 74 75 72 6e 3b 0a 20 20 20 20 69 66 28 20 30 3d  turn;.    if( 0=
1e50: 3d 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70  =sqlite3Atoi64(p
1e60: 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c 75 65 2c  Rec->z, &iValue,
1e70: 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 20 29   pRec->n, enc) )
1e80: 7b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 75 2e  {.      pRec->u.
1e90: 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20 20  i = iValue;.    
1ea0: 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d    pRec->flags |=
1eb0: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 65   MEM_Int;.    }e
1ec0: 6c 73 65 7b 0a 20 20 20 20 20 20 70 52 65 63 2d  lse{.      pRec-
1ed0: 3e 72 20 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20  >r = rValue;.   
1ee0: 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c     pRec->flags |
1ef0: 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20  = MEM_Real;.    
1f00: 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50  }.  }.}../*.** P
1f10: 72 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74  rocessing is det
1f20: 65 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66  ermine by the af
1f30: 66 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72  finity parameter
1f40: 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  :.**.** SQLITE_A
1f50: 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53  FF_INTEGER:.** S
1f60: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a  QLITE_AFF_REAL:.
1f70: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ** SQLITE_AFF_NU
1f80: 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79  MERIC:.**    Try
1f90: 20 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63   to convert pRec
1fa0: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72   to an integer r
1fb0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72  epresentation or
1fc0: 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69   a .**    floati
1fd0: 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65  ng-point represe
1fe0: 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e  ntation if an in
1ff0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2000: 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f  tion.**    is no
2010: 74 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74  t possible.  Not
2020: 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67  e that the integ
2030: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
2040: 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79  n is.**    alway
2050: 73 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65  s preferred, eve
2060: 6e 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74  n if the affinit
2070: 79 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75  y is REAL, becau
2080: 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65  se.**    an inte
2090: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
20a0: 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65  on is more space
20b0: 20 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69   efficient on di
20c0: 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  sk..**.** SQLITE
20d0: 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20  _AFF_TEXT:.**   
20e0: 20 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f   Convert pRec to
20f0: 20 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e   a text represen
2100: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51  tation..**.** SQ
2110: 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 3a 0a 2a  LITE_AFF_NONE:.*
2120: 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65  *    No-op.  pRe
2130: 63 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a  c is unchanged..
2140: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
2150: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20  pplyAffinity(.  
2160: 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20  Mem *pRec,      
2170: 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65      /* The value
2180: 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69   to apply affini
2190: 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20  ty to */.  char 
21a0: 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f  affinity,      /
21b0: 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74  * The affinity t
21c0: 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a  o be applied */.
21d0: 20 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20    u8 enc        
21e0: 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69        /* Use thi
21f0: 73 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  s text encoding 
2200: 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69  */.){.  if( affi
2210: 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46  nity==SQLITE_AFF
2220: 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20  _TEXT ){.    /* 
2230: 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65  Only attempt the
2240: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54   conversion to T
2250: 45 58 54 20 69 66 20 74 68 65 72 65 20 69 73 20  EXT if there is 
2260: 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65  an integer or re
2270: 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73  al.    ** repres
2280: 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61  entation (blob a
2290: 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67  nd NULL do not g
22a0: 65 74 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75  et converted) bu
22b0: 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20  t no string.    
22c0: 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ** representatio
22d0: 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  n..    */.    if
22e0: 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67  ( 0==(pRec->flag
22f0: 73 26 4d 45 4d 5f 53 74 72 29 20 26 26 20 28 70  s&MEM_Str) && (p
2300: 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f  Rec->flags&(MEM_
2310: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29  Real|MEM_Int)) )
2320: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
2330: 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
2340: 70 52 65 63 2c 20 65 6e 63 29 3b 0a 20 20 20 20  pRec, enc);.    
2350: 7d 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67  }.    pRec->flag
2360: 73 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c  s &= ~(MEM_Real|
2370: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73  MEM_Int);.  }els
2380: 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 21 3d  e if( affinity!=
2390: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20  SQLITE_AFF_NONE 
23a0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61  ){.    assert( a
23b0: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
23c0: 41 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61  AFF_INTEGER || a
23d0: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
23e0: 41 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20  AFF_REAL.       
23f0: 20 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74        || affinit
2400: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  y==SQLITE_AFF_NU
2410: 4d 45 52 49 43 20 29 3b 0a 20 20 20 20 61 70 70  MERIC );.    app
2420: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
2430: 79 28 70 52 65 63 29 3b 0a 20 20 20 20 69 66 28  y(pRec);.    if(
2440: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d   pRec->flags & M
2450: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 20  EM_Real ){.     
2460: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65   sqlite3VdbeInte
2470: 67 65 72 41 66 66 69 6e 69 74 79 28 70 52 65 63  gerAffinity(pRec
2480: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a  );.    }.  }.}..
2490: 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e  /*.** Try to con
24a0: 76 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66  vert the type of
24b0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75   a function argu
24c0: 6d 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74  ment or a result
24d0: 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20   column.** into 
24e0: 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73  a numeric repres
24f0: 65 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65  entation.  Use e
2500: 69 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72  ither INTEGER or
2510: 20 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a   REAL whichever.
2520: 2a 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74  ** is appropriat
2530: 65 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20  e.  But only do 
2540: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  the conversion i
2550: 66 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  f it is possible
2560: 20 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73   without.** loss
2570: 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
2580: 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72  and return the r
2590: 65 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74  evised type of t
25a0: 68 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  he argument..*/.
25b0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  int sqlite3_valu
25c0: 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73  e_numeric_type(s
25d0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
25e0: 61 6c 29 7b 0a 20 20 69 6e 74 20 65 54 79 70 65  al){.  int eType
25f0: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
2600: 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 69  _type(pVal);.  i
2610: 66 28 20 65 54 79 70 65 3d 3d 53 51 4c 49 54 45  f( eType==SQLITE
2620: 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d  _TEXT ){.    Mem
2630: 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70   *pMem = (Mem*)p
2640: 56 61 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75  Val;.    applyNu
2650: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d  mericAffinity(pM
2660: 65 6d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  em);.    sqlite3
2670: 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
2680: 28 70 4d 65 6d 29 3b 0a 20 20 20 20 65 54 79 70  (pMem);.    eTyp
2690: 65 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  e = sqlite3_valu
26a0: 65 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20  e_type(pVal);.  
26b0: 7d 0a 20 20 72 65 74 75 72 6e 20 65 54 79 70 65  }.  return eType
26c0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72  ;.}../*.** Expor
26d0: 74 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61  ted version of a
26e0: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20  pplyAffinity(). 
26f0: 54 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f  This one works o
2700: 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  n sqlite3_value*
2710: 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e  , .** not the in
2720: 74 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65  ternal Mem* type
2730: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
2740: 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
2750: 69 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76  ity(.  sqlite3_v
2760: 61 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75  alue *pVal, .  u
2770: 38 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75  8 affinity, .  u
2780: 38 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79  8 enc.){.  apply
2790: 41 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29  Affinity((Mem *)
27a0: 70 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20  pVal, affinity, 
27b0: 65 6e 63 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20  enc);.}..#ifdef 
27c0: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
27d0: 2a 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20  ** Write a nice 
27e0: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
27f0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e  ation of the con
2800: 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d  tents of cell pM
2810: 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65  em.** into buffe
2820: 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e  r zBuf, length n
2830: 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  Buf..*/.void sql
2840: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
2850: 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d  yPrint(Mem *pMem
2860: 2c 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20  , char *zBuf){. 
2870: 20 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42   char *zCsr = zB
2880: 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d  uf;.  int f = pM
2890: 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74  em->flags;..  st
28a0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
28b0: 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b  *const encnames[
28c0: 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29  ] = {"(X)", "(8)
28d0: 22 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31  ", "(16LE)", "(1
28e0: 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66  6BE)"};..  if( f
28f0: 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20  &MEM_Blob ){.   
2900: 20 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72   int i;.    char
2910: 20 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20   c;.    if( f & 
2920: 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20  MEM_Dyn ){.     
2930: 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20   c = 'z';.      
2940: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
2950: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
2960: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
2970: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
2980: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
2990: 20 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20   c = 't';.      
29a0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
29b0: 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29  M_Dyn|MEM_Ephem)
29c0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
29d0: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70  e if( f & MEM_Ep
29e0: 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d  hem ){.      c =
29f0: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
2a00: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
2a10: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
2a20: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
2a30: 20 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20        c = 's';. 
2a40: 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65     }..    sqlite
2a50: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
2a60: 7a 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a  zCsr, "%c", c);.
2a70: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
2a80: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
2a90: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  );.    sqlite3_s
2aa0: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
2ab0: 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e  r, "%d[", pMem->
2ac0: 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20  n);.    zCsr += 
2ad0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
2ae0: 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69  zCsr);.    for(i
2af0: 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d  =0; i<16 && i<pM
2b00: 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  em->n; i++){.   
2b10: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
2b20: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22  ntf(100, zCsr, "
2b30: 25 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65  %02X", ((int)pMe
2b40: 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29  m->z[i] & 0xFF))
2b50: 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20  ;.      zCsr += 
2b60: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
2b70: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
2b80: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26   for(i=0; i<16 &
2b90: 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b  & i<pMem->n; i++
2ba0: 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20  ){.      char z 
2bb0: 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20  = pMem->z[i];.  
2bc0: 20 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20      if( z<32 || 
2bd0: 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20  z>126 ) *zCsr++ 
2be0: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73  = '.';.      els
2bf0: 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20  e *zCsr++ = z;. 
2c00: 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65     }..    sqlite
2c10: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
2c20: 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63  zCsr, "]%s", enc
2c30: 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d  names[pMem->enc]
2c40: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
2c50: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
2c60: 43 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20  Csr);.    if( f 
2c70: 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
2c80: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
2c90: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22  intf(100, zCsr,"
2ca0: 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a  +%dz",pMem->u.nZ
2cb0: 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72  ero);.      zCsr
2cc0: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
2cd0: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d  n30(zCsr);.    }
2ce0: 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30  .    *zCsr = '\0
2cf0: 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66  ';.  }else if( f
2d00: 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20   & MEM_Str ){.  
2d10: 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20    int j, k;.    
2d20: 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20  zBuf[0] = ' ';. 
2d30: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44     if( f & MEM_D
2d40: 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66  yn ){.      zBuf
2d50: 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20  [1] = 'z';.     
2d60: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
2d70: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70  EM_Static|MEM_Ep
2d80: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
2d90: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
2da0: 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20  M_Static ){.    
2db0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b    zBuf[1] = 't';
2dc0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
2dd0: 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d  f & (MEM_Dyn|MEM
2de0: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
2df0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
2e00: 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20   MEM_Ephem ){.  
2e10: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65      zBuf[1] = 'e
2e20: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
2e30: 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69   (f & (MEM_Stati
2e40: 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29  c|MEM_Dyn))==0 )
2e50: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
2e60: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27     zBuf[1] = 's'
2e70: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20  ;.    }.    k = 
2e80: 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  2;.    sqlite3_s
2e90: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42  nprintf(100, &zB
2ea0: 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65  uf[k], "%d", pMe
2eb0: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20  m->n);.    k += 
2ec0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
2ed0: 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a  &zBuf[k]);.    z
2ee0: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a  Buf[k++] = '[';.
2ef0: 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31      for(j=0; j<1
2f00: 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20  5 && j<pMem->n; 
2f10: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63  j++){.      u8 c
2f20: 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20   = pMem->z[j];. 
2f30: 20 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30       if( c>=0x20
2f40: 20 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20   && c<0x7f ){.  
2f50: 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20        zBuf[k++] 
2f60: 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = c;.      }else
2f70: 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b  {.        zBuf[k
2f80: 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20  ++] = '.';.     
2f90: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75   }.    }.    zBu
2fa0: 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20  f[k++] = ']';.  
2fb0: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
2fc0: 74 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c  tf(100,&zBuf[k],
2fd0: 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e   encnames[pMem->
2fe0: 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20  enc]);.    k += 
2ff0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3000: 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a  &zBuf[k]);.    z
3010: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20  Buf[k++] = 0;.  
3020: 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  }.}.#endif..#ifd
3030: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
3040: 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20  /*.** Print the 
3050: 76 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73  value of a regis
3060: 74 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20  ter for tracing 
3070: 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61  purposes:.*/.sta
3080: 74 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63  tic void memTrac
3090: 65 50 72 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a  ePrint(Mem *p){.
30a0: 20 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26    if( p->flags &
30b0: 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29   MEM_Undefined )
30c0: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 75  {.    printf(" u
30d0: 6e 64 65 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65  ndefined");.  }e
30e0: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
30f0: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
3100: 20 20 20 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c     printf(" NULL
3110: 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ");.  }else if( 
3120: 28 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  (p->flags & (MEM
3130: 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d  _Int|MEM_Str))==
3140: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72  (MEM_Int|MEM_Str
3150: 29 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  ) ){.    printf(
3160: 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75  " si:%lld", p->u
3170: 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  .i);.  }else if(
3180: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
3190: 49 6e 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74  Int ){.    print
31a0: 66 28 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e  f(" i:%lld", p->
31b0: 75 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  u.i);.#ifndef SQ
31c0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
31d0: 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65  NG_POINT.  }else
31e0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
31f0: 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20  MEM_Real ){.    
3200: 70 72 69 6e 74 66 28 22 20 72 3a 25 67 22 2c 20  printf(" r:%g", 
3210: 70 2d 3e 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20  p->r);.#endif.  
3220: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61  }else if( p->fla
3230: 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20  gs & MEM_RowSet 
3240: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
3250: 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65  (rowset)");.  }e
3260: 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42  lse{.    char zB
3270: 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c  uf[200];.    sql
3280: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
3290: 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b  yPrint(p, zBuf);
32a0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 25 73  .    printf(" %s
32b0: 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a  ", zBuf);.  }.}.
32c0: 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 67 69  static void regi
32d0: 73 74 65 72 54 72 61 63 65 28 69 6e 74 20 69 52  sterTrace(int iR
32e0: 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 70  eg, Mem *p){.  p
32f0: 72 69 6e 74 66 28 22 52 45 47 5b 25 64 5d 20 3d  rintf("REG[%d] =
3300: 20 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d   ", iReg);.  mem
3310: 54 72 61 63 65 50 72 69 6e 74 28 70 29 3b 0a 20  TracePrint(p);. 
3320: 20 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 7d   printf("\n");.}
3330: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
3340: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 20  SQLITE_DEBUG.#  
3350: 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f  define REGISTER_
3360: 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 64 62  TRACE(R,M) if(db
3370: 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 56  ->flags&SQLITE_V
3380: 64 62 65 54 72 61 63 65 29 72 65 67 69 73 74 65  dbeTrace)registe
3390: 72 54 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c 73  rTrace(R,M).#els
33a0: 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47 49  e.#  define REGI
33b0: 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 0a  STER_TRACE(R,M).
33c0: 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66 20  #endif...#ifdef 
33d0: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a  VDBE_PROFILE../*
33e0: 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63 6f   .** hwtime.h co
33f0: 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61 73  ntains inline as
3400: 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f 72  sembler code for
3410: 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a   implementing .*
3420: 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e  * high-performan
3430: 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69 6e  ce timing routin
3440: 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  es..*/.#include 
3450: 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e 64  "hwtime.h"..#end
3460: 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42  if..#ifndef NDEB
3470: 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75  UG./*.** This fu
3480: 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 63  nction is only c
3490: 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69  alled from withi
34a0: 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20 65 78  n an assert() ex
34b0: 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20  pression. It.** 
34c0: 63 68 65 63 6b 73 20 74 68 61 74 20 74 68 65 20  checks that the 
34d0: 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61 63  sqlite3.nTransac
34e0: 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69 73  tion variable is
34f0: 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20 74   correctly set t
3500: 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20  o.** the number 
3510: 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69  of non-transacti
3520: 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63 75  on savepoints cu
3530: 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20 0a  rrently in the .
3540: 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73  ** linked list s
3550: 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69 74  tarting at sqlit
3560: 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a 2a  e3.pSavepoint..*
3570: 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a  * .** Usage:.**.
3580: 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 63  **     assert( c
3590: 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75  heckSavepointCou
35a0: 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74 61  nt(db) );.*/.sta
35b0: 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61 76  tic int checkSav
35c0: 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c 69  epointCount(sqli
35d0: 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20  te3 *db){.  int 
35e0: 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f 69  n = 0;.  Savepoi
35f0: 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d 64  nt *p;.  for(p=d
3600: 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 70  b->pSavepoint; p
3610: 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e 2b  ; p=p->pNext) n+
3620: 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d  +;.  assert( n==
3630: 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20  (db->nSavepoint 
3640: 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  + db->isTransact
3650: 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29 3b  ionSavepoint) );
3660: 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23  .  return 1;.}.#
3670: 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78  endif.../*.** Ex
3680: 65 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66  ecute as much of
3690: 20 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20   a VDBE program 
36a0: 61 73 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68  as we can..** Th
36b0: 69 73 20 69 73 20 74 68 65 20 63 6f 72 65 20 6f  is is the core o
36c0: 66 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  f sqlite3_step()
36d0: 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  .  .*/.int sqlit
36e0: 65 33 56 64 62 65 45 78 65 63 28 0a 20 20 56 64  e3VdbeExec(.  Vd
36f0: 62 65 20 2a 70 20 20 20 20 20 20 20 20 20 20 20  be *p           
3700: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
3710: 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  VDBE */.){.  int
3720: 20 70 63 3d 30 3b 20 20 20 20 20 20 20 20 20 20   pc=0;          
3730: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70          /* The p
3740: 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a  rogram counter *
3750: 2f 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d  /.  Op *aOp = p-
3760: 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 2f  >aOp;          /
3770: 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70  * Copy of p->aOp
3780: 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20   */.  Op *pOp;  
3790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a0: 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72   /* Current oper
37b0: 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72  ation */.  int r
37c0: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20  c = SQLITE_OK;  
37d0: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
37e0: 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71  o return */.  sq
37f0: 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64  lite3 *db = p->d
3800: 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  b;       /* The 
3810: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38  database */.  u8
3820: 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
3830: 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65  ult = 0; /* Rese
3840: 74 20 73 63 68 65 6d 61 20 61 66 74 65 72 20 61  t schema after a
3850: 6e 20 65 72 72 6f 72 20 69 66 20 70 6f 73 69 74  n error if posit
3860: 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f  ive */.  u8 enco
3870: 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20  ding = ENC(db); 
3880: 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
3890: 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a  ase encoding */.
38a0: 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d    int iCompare =
38b0: 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20   0;          /* 
38c0: 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20 4f  Result of last O
38d0: 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74  P_Compare operat
38e0: 69 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ion */.  unsigne
38f0: 64 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20 20  d nVmStep = 0;  
3900: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
3910: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
3920: 20 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65   steps */.#ifnde
3930: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
3940: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
3950: 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67    unsigned nProg
3960: 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 3b 2f 2a  ressLimit = 0;/*
3970: 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65 73   Invoke xProgres
3980: 73 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65 70  s() when nVmStep
3990: 20 72 65 61 63 68 65 73 20 74 68 69 73 20 2a 2f   reaches this */
39a0: 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61  .#endif.  Mem *a
39b0: 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20  Mem = p->aMem;  
39c0: 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
39d0: 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d  p->aMem */.  Mem
39e0: 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20   *pIn1 = 0;     
39f0: 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69          /* 1st i
3a00: 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  nput operand */.
3a10: 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b    Mem *pIn2 = 0;
3a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3a30: 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e  2nd input operan
3a40: 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33  d */.  Mem *pIn3
3a50: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
3a60: 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f    /* 3rd input o
3a70: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20  perand */.  Mem 
3a80: 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20  *pOut = 0;      
3a90: 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74         /* Output
3aa0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 6e   operand */.  in
3ab0: 74 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30 3b  t *aPermute = 0;
3ac0: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72 6d           /* Perm
3ad0: 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d  utation of colum
3ae0: 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72  ns for OP_Compar
3af0: 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52  e */.  i64 lastR
3b00: 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52  owid = db->lastR
3b10: 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76 65 64 20  owid;  /* Saved 
3b20: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 61 73  value of the las
3b30: 74 20 69 6e 73 65 72 74 20 52 4f 57 49 44 20 2a  t insert ROWID *
3b40: 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  /.#ifdef VDBE_PR
3b50: 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61 72  OFILE.  u64 star
3b60: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
3b70: 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20     /* CPU clock 
3b80: 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20 6f  count at start o
3b90: 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e  f opcode */.  in
3ba0: 74 20 6f 72 69 67 50 63 3b 20 20 20 20 20 20 20  t origPc;       
3bb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72 6f 67           /* Prog
3bc0: 72 61 6d 20 63 6f 75 6e 74 65 72 20 61 74 20 73  ram counter at s
3bd0: 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a  tart of opcode *
3be0: 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20  /.#endif.  /*** 
3bf0: 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55 4e 49  INSERT STACK UNI
3c00: 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20  ON HERE ***/..  
3c10: 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67 69 63  assert( p->magic
3c20: 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e  ==VDBE_MAGIC_RUN
3c30: 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f   );  /* sqlite3_
3c40: 73 74 65 70 28 29 20 76 65 72 69 66 69 65 73 20  step() verifies 
3c50: 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65  this */.  sqlite
3c60: 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b 0a 20  3VdbeEnter(p);. 
3c70: 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49   if( p->rc==SQLI
3c80: 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  TE_NOMEM ){.    
3c90: 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20  /* This happens 
3ca0: 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e  if a malloc() in
3cb0: 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f 20 73  side a call to s
3cc0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
3cd0: 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73  xt() or.    ** s
3ce0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
3cf0: 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e 20 20  xt16() failed.  
3d00: 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  */.    goto no_m
3d10: 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  em;.  }.  assert
3d20: 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
3d30: 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51 4c  OK || p->rc==SQL
3d40: 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20 61 73  ITE_BUSY );.  as
3d50: 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
3d60: 65 72 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c  er || p->readOnl
3d70: 79 21 3d 30 20 29 3b 0a 20 20 70 2d 3e 72 63 20  y!=0 );.  p->rc 
3d80: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70  = SQLITE_OK;.  p
3d90: 2d 3e 69 43 75 72 72 65 6e 74 54 69 6d 65 20 3d  ->iCurrentTime =
3da0: 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   0;.  assert( p-
3db0: 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20  >explain==0 );. 
3dc0: 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d   p->pResultSet =
3dd0: 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61   0;.  db->busyHa
3de0: 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b  ndler.nBusy = 0;
3df0: 0a 20 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73  .  if( db->u1.is
3e00: 49 6e 74 65 72 72 75 70 74 65 64 20 29 20 67 6f  Interrupted ) go
3e10: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
3e20: 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 73 71 6c  interrupt;.  sql
3e30: 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53  ite3VdbeIOTraceS
3e40: 71 6c 28 70 29 3b 0a 23 69 66 6e 64 65 66 20 53  ql(p);.#ifndef S
3e50: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
3e60: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69  ESS_CALLBACK.  i
3e70: 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  f( db->xProgress
3e80: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
3e90: 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73  0 < db->nProgres
3ea0: 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e 50 72 6f  sOps );.    nPro
3eb0: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 28 75 6e  gressLimit = (un
3ec0: 73 69 67 6e 65 64 29 70 2d 3e 61 43 6f 75 6e 74  signed)p->aCount
3ed0: 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  er[SQLITE_STMTST
3ee0: 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 3b 0a 20  ATUS_VM_STEP];. 
3ef0: 20 20 20 69 66 28 20 6e 50 72 6f 67 72 65 73 73     if( nProgress
3f00: 4c 69 6d 69 74 3d 3d 30 20 29 7b 0a 20 20 20 20  Limit==0 ){.    
3f10: 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74    nProgressLimit
3f20: 20 3d 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73   = db->nProgress
3f30: 4f 70 73 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  Ops;.    }else{.
3f40: 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c        nProgressL
3f50: 69 6d 69 74 20 25 3d 20 28 75 6e 73 69 67 6e 65  imit %= (unsigne
3f60: 64 29 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  d)db->nProgressO
3f70: 70 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  ps;.    }.  }.#e
3f80: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
3f90: 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74  TE_DEBUG.  sqlit
3fa0: 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
3fb0: 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e  loc();.  if( p->
3fc0: 70 63 3d 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e  pc==0.   && (p->
3fd0: 64 62 2d 3e 66 6c 61 67 73 20 26 20 28 53 51 4c  db->flags & (SQL
3fe0: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c  ITE_VdbeListing|
3ff0: 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 7c 53  SQLITE_VdbeEQP|S
4000: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 29  QLITE_VdbeTrace)
4010: 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e  )!=0.  ){.    in
4020: 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63  t i;.    int onc
4030: 65 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74  e = 1;.    sqlit
4040: 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70  e3VdbePrintSql(p
4050: 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62  );.    if( p->db
4060: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
4070: 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a  _VdbeListing ){.
4080: 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 56 44        printf("VD
4090: 42 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69  BE Program Listi
40a0: 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66  ng:\n");.      f
40b0: 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70  or(i=0; i<p->nOp
40c0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
40d0: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
40e0: 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 61  Op(stdout, i, &a
40f0: 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  Op[i]);.      }.
4100: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d      }.    if( p-
4110: 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  >db->flags & SQL
4120: 49 54 45 5f 56 64 62 65 45 51 50 20 29 7b 0a 20  ITE_VdbeEQP ){. 
4130: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
4140: 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20  p->nOp; i++){.  
4150: 20 20 20 20 20 20 69 66 28 20 61 4f 70 5b 69 5d        if( aOp[i]
4160: 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c  .opcode==OP_Expl
4170: 61 69 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ain ){.         
4180: 20 69 66 28 20 6f 6e 63 65 20 29 20 70 72 69 6e   if( once ) prin
4190: 74 66 28 22 56 44 42 45 20 51 75 65 72 79 20 50  tf("VDBE Query P
41a0: 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20  lan:\n");.      
41b0: 20 20 20 20 70 72 69 6e 74 66 28 22 25 73 5c 6e      printf("%s\n
41c0: 22 2c 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b  ", aOp[i].p4.z);
41d0: 0a 20 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20  .          once 
41e0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  = 0;.        }. 
41f0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
4200: 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67   if( p->db->flag
4210: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54  s & SQLITE_VdbeT
4220: 72 61 63 65 20 29 20 20 70 72 69 6e 74 66 28 22  race )  printf("
4230: 56 44 42 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b  VDBE Trace:\n");
4240: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e  .  }.  sqlite3En
4250: 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  dBenignMalloc();
4260: 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 63  .#endif.  for(pc
4270: 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d 53 51 4c 49  =p->pc; rc==SQLI
4280: 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20 20  TE_OK; pc++){.  
4290: 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d 30 20    assert( pc>=0 
42a0: 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  && pc<p->nOp );.
42b0: 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c      if( db->mall
42c0: 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20  ocFailed ) goto 
42d0: 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66 20 56  no_mem;.#ifdef V
42e0: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20  DBE_PROFILE.    
42f0: 6f 72 69 67 50 63 20 3d 20 70 63 3b 0a 20 20 20  origPc = pc;.   
4300: 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33   start = sqlite3
4310: 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66  Hwtime();.#endif
4320: 0a 20 20 20 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a  .    nVmStep++;.
4330: 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70      pOp = &aOp[p
4340: 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79  c];..    /* Only
4350: 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20 69   allow tracing i
4360: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69  f SQLITE_DEBUG i
4370: 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a  s defined..    *
4380: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4390: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 64 62  DEBUG.    if( db
43a0: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
43b0: 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a 20 20  _VdbeTrace ){.  
43c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
43d0: 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 70  rintOp(stdout, p
43e0: 63 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23  c, pOp);.    }.#
43f0: 65 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a 20 20  endif.      ..  
4400: 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73 65    /* Check to se
4410: 65 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f 20  e if we need to 
4420: 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74 65  simulate an inte
4430: 72 72 75 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c  rrupt.  This onl
4440: 79 20 68 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a  y happens.    **
4450: 20 69 66 20 77 65 20 68 61 76 65 20 61 20 73 70   if we have a sp
4460: 65 63 69 61 6c 20 74 65 73 74 20 62 75 69 6c 64  ecial test build
4470: 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20  ..    */.#ifdef 
4480: 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
4490: 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  if( sqlite3_inte
44a0: 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b  rrupt_count>0 ){
44b0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69  .      sqlite3_i
44c0: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d  nterrupt_count--
44d0: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ;.      if( sqli
44e0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
44f0: 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  unt==0 ){.      
4500: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
4510: 75 70 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  upt(db);.      }
4520: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  .    }.#endif.. 
4530: 20 20 20 2f 2a 20 4f 6e 20 61 6e 79 20 6f 70 63     /* On any opc
4540: 6f 64 65 20 77 69 74 68 20 74 68 65 20 22 6f 75  ode with the "ou
4550: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 22 20 74  t2-prerelease" t
4560: 61 67 2c 20 66 72 65 65 20 61 6e 79 0a 20 20 20  ag, free any.   
4570: 20 2a 2a 20 65 78 74 65 72 6e 61 6c 20 61 6c 6c   ** external all
4580: 6f 63 61 74 69 6f 6e 73 20 6f 75 74 20 6f 66 20  ocations out of 
4590: 6d 65 6d 5b 70 32 5d 20 61 6e 64 20 73 65 74 20  mem[p2] and set 
45a0: 6d 65 6d 5b 70 32 5d 20 74 6f 20 62 65 0a 20 20  mem[p2] to be.  
45b0: 20 20 2a 2a 20 61 6e 20 75 6e 64 65 66 69 6e 65    ** an undefine
45c0: 64 20 69 6e 74 65 67 65 72 2e 20 20 4f 70 63 6f  d integer.  Opco
45d0: 64 65 73 20 77 69 6c 6c 20 65 69 74 68 65 72 20  des will either 
45e0: 66 69 6c 6c 20 69 6e 20 74 68 65 20 69 6e 74 65  fill in the inte
45f0: 67 65 72 0a 20 20 20 20 2a 2a 20 76 61 6c 75 65  ger.    ** value
4600: 20 6f 72 20 63 6f 6e 76 65 72 74 20 6d 65 6d 5b   or convert mem[
4610: 70 32 5d 20 74 6f 20 61 20 64 69 66 66 65 72 65  p2] to a differe
4620: 6e 74 20 74 79 70 65 2e 0a 20 20 20 20 2a 2f 0a  nt type..    */.
4630: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
4640: 3e 6f 70 66 6c 61 67 73 3d 3d 73 71 6c 69 74 65  >opflags==sqlite
4650: 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b  3OpcodeProperty[
4660: 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 20 29 3b 0a  pOp->opcode] );.
4670: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66      if( pOp->opf
4680: 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54  lags & OPFLG_OUT
4690: 32 5f 50 52 45 52 45 4c 45 41 53 45 20 29 7b 0a  2_PRERELEASE ){.
46a0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
46b0: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20  p->p2>0 );.     
46c0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
46d0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
46e0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
46f0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
4700: 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 6d 65 6d  ->p2];.      mem
4710: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
4720: 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 56 64   pOut);.      Vd
4730: 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 4f 75  beMemRelease(pOu
4740: 74 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e  t);.      pOut->
4750: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
4760: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 53  .    }..    /* S
4770: 61 6e 69 74 79 20 63 68 65 63 6b 69 6e 67 20 6f  anity checking o
4780: 6e 20 6f 74 68 65 72 20 6f 70 65 72 61 6e 64 73  n other operands
4790: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
47a0: 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
47b0: 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  (pOp->opflags & 
47c0: 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b  OPFLG_IN1)!=0 ){
47d0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
47e0: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20  Op->p1>0 );.    
47f0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
4800: 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  1<=(p->nMem-p->n
4810: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
4820: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
4830: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
4840: 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47  1]) );.      REG
4850: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
4860: 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p1, &aMem[pOp->
4870: 70 31 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p1]);.    }.    
4880: 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67  if( (pOp->opflag
4890: 73 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d  s & OPFLG_IN2)!=
48a0: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
48b0: 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
48c0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
48d0: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p2<=(p->nMem-
48e0: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
48f0: 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
4900: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
4910: 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20  p->p2]) );.     
4920: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
4930: 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70  pOp->p2, &aMem[p
4940: 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a  Op->p2]);.    }.
4950: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
4960: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e  flags & OPFLG_IN
4970: 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  3)!=0 ){.      a
4980: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
4990: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
49a0: 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
49b0: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
49c0: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
49d0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
49e0: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20  m[pOp->p3]) );. 
49f0: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
4a00: 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d  ACE(pOp->p3, &aM
4a10: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20  em[pOp->p3]);.  
4a20: 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70    }.    if( (pOp
4a30: 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ->opflags & OPFL
4a40: 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20 20  G_OUT2)!=0 ){.  
4a50: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
4a60: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p2>0 );.      a
4a70: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
4a80: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
4a90: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d 65  sor) );.      me
4aa0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
4ab0: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  , &aMem[pOp->p2]
4ac0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
4ad0: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
4ae0: 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20   OPFLG_OUT3)!=0 
4af0: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
4b00: 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
4b10: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
4b20: 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
4b30: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
4b40: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
4b50: 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
4b60: 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 23 65  ->p3]);.    }.#e
4b70: 6e 64 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74  ndif.  .    swit
4b80: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
4b90: 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ){../***********
4ba0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4bb0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4bc0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4bd0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4be0: 2a 2a 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f  **.** What follo
4bf0: 77 73 20 69 73 20 61 20 6d 61 73 73 69 76 65 20  ws is a massive 
4c00: 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
4c10: 20 77 68 65 72 65 20 65 61 63 68 20 63 61 73 65   where each case
4c20: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a   implements a.**
4c30: 20 73 65 70 61 72 61 74 65 20 69 6e 73 74 72 75   separate instru
4c40: 63 74 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72  ction in the vir
4c50: 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49  tual machine.  I
4c60: 66 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20  f we follow the 
4c70: 75 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61  usual.** indenta
4c80: 74 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73  tion conventions
4c90: 2c 20 65 61 63 68 20 63 61 73 65 20 73 68 6f 75  , each case shou
4ca0: 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62  ld be indented b
4cb0: 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74  y 6 spaces.  But
4cc0: 0a 2a 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f  .** that is a lo
4cd0: 74 20 6f 66 20 77 61 73 74 65 64 20 73 70 61 63  t of wasted spac
4ce0: 65 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61  e on the left ma
4cf0: 72 67 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f  rgin.  So the co
4d00: 64 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65  de within.** the
4d10: 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
4d20: 74 20 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74  t will break wit
4d30: 68 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64  h convention and
4d40: 20 62 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20   be flush-left. 
4d50: 41 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63  Another.** big c
4d60: 6f 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20  omment (similar 
4d70: 74 6f 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c  to this one) wil
4d80: 6c 20 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74  l mark the point
4d90: 20 69 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65   in the code whe
4da0: 72 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74  re.** we transit
4db0: 69 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d  ion back to norm
4dc0: 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a  al indentation..
4dd0: 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74  **.** The format
4de0: 74 69 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73  ting of each cas
4df0: 65 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20  e is important. 
4e00: 20 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f   The makefile fo
4e10: 72 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65  r SQLite.** gene
4e20: 72 61 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65  rates two C file
4e30: 73 20 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e  s "opcodes.h" an
4e40: 64 20 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79  d "opcodes.c" by
4e50: 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a   scanning this.*
4e60: 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66  * file looking f
4e70: 6f 72 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65  or lines that be
4e80: 67 69 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f  gin with "case O
4e90: 50 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65  P_".  The opcode
4ea0: 73 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c  s.h files.** wil
4eb0: 6c 20 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68  l be filled with
4ec0: 20 23 64 65 66 69 6e 65 73 20 74 68 61 74 20 67   #defines that g
4ed0: 69 76 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67  ive unique integ
4ee0: 65 72 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63  er values to eac
4ef0: 68 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20  h.** opcode and 
4f00: 74 68 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69  the opcodes.c fi
4f10: 6c 65 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74  le is filled wit
4f20: 68 20 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74  h an array of st
4f30: 72 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65  rings where.** e
4f40: 61 63 68 20 73 74 72 69 6e 67 20 69 73 20 74 68  ach string is th
4f50: 65 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20  e symbolic name 
4f60: 66 6f 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f  for the correspo
4f70: 6e 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49  nding opcode.  I
4f80: 66 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74  f the.** case st
4f90: 61 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f  atement is follo
4fa0: 77 65 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74  wed by a comment
4fb0: 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23   of the form "/#
4fc0: 20 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22   same as ... #/"
4fd0: 0a 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74  .** that comment
4fe0: 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
4ff0: 72 6d 69 6e 65 20 74 68 65 20 70 61 72 74 69 63  rmine the partic
5000: 75 6c 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68  ular value of th
5010: 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  e opcode..**.** 
5020: 4f 74 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69  Other keywords i
5030: 6e 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68  n the comment th
5040: 61 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20  at follows each 
5050: 63 61 73 65 20 61 72 65 20 75 73 65 64 20 74 6f  case are used to
5060: 0a 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68  .** construct th
5070: 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49  e OPFLG_INITIALI
5080: 5a 45 52 20 76 61 6c 75 65 20 74 68 61 74 20 69  ZER value that i
5090: 6e 69 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64  nitializes opcod
50a0: 65 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20  eProperty[]..** 
50b0: 4b 65 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65  Keywords include
50c0: 3a 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c  : in1, in2, in3,
50d0: 20 6f 75 74 32 5f 70 72 65 72 65 6c 65 61 73 65   out2_prerelease
50e0: 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53  , out2, out3.  S
50f0: 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f  ee.** the mkopco
5100: 64 65 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66  deh.awk script f
5110: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
5120: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  formation..**.**
5130: 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61   Documentation a
5140: 62 6f 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65  bout VDBE opcode
5150: 73 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 62  s is generated b
5160: 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20  y scanning this 
5170: 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65  file.** for line
5180: 73 20 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69  s of that contai
5190: 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68  n "Opcode:".  Th
51a0: 61 74 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20  at line and all 
51b0: 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f  subsequent.** co
51c0: 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20  mment lines are 
51d0: 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65  used in the gene
51e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70  ration of the op
51f0: 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65  code.html docume
5200: 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e  ntation.** file.
5210: 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a  .**.** SUMMARY:.
5220: 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74  **.**     Format
5230: 74 69 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e  ting is importan
5240: 74 20 74 6f 20 73 63 72 69 70 74 73 20 74 68 61  t to scripts tha
5250: 74 20 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65  t scan this file
5260: 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20  ..**     Do not 
5270: 64 65 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65  deviate from the
5280: 20 66 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c   formatting styl
5290: 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75  e currently in u
52a0: 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a  se..**.*********
52b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
52c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
52d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
52e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
52f0: 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ****/../* Opcode
5300: 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a  :  Goto * P2 * *
5310: 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f   *.**.** An unco
5320: 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74  nditional jump t
5330: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a  o address P2..**
5340: 20 54 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   The next instru
5350: 63 74 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77  ction executed w
5360: 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f  ill be .** the o
5370: 6e 65 20 61 74 20 69 6e 64 65 78 20 50 32 20 66  ne at index P2 f
5380: 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
5390: 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67  g of.** the prog
53a0: 72 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ram..*/.case OP_
53b0: 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20  Goto: {         
53c0: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
53d0: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
53e0: 31 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73  1;..  /* Opcodes
53f0: 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
5400: 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20  s the bottom of 
5410: 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c  a loop (OP_Next,
5420: 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f   OP_Prev,.  ** O
5430: 50 5f 56 4e 65 78 74 2c 20 4f 50 5f 52 6f 77 53  P_VNext, OP_RowS
5440: 65 74 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f  etNext, or OP_So
5450: 72 74 65 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75  rterNext) all ju
5460: 6d 70 20 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a  mp here upon.  *
5470: 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43  * completion.  C
5480: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 73  heck to see if s
5490: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
54a0: 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  () has been call
54b0: 65 64 0a 20 20 2a 2a 20 6f 72 20 69 66 20 74 68  ed.  ** or if th
54c0: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
54d0: 61 63 6b 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ack needs to be 
54e0: 69 6e 76 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20  invoked. .  **. 
54f0: 20 2a 2a 20 54 68 69 73 20 63 6f 64 65 20 75 73   ** This code us
5500: 65 73 20 75 6e 73 74 72 75 63 74 75 72 65 64 20  es unstructured 
5510: 22 67 6f 74 6f 22 20 73 74 61 74 65 6d 65 6e 74  "goto" statement
5520: 73 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c  s and does not l
5530: 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20  ook clean..  ** 
5540: 42 75 74 20 74 68 61 74 20 69 73 20 6e 6f 74 20  But that is not 
5550: 64 75 65 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f  due to sloppy co
5560: 64 69 6e 67 20 68 61 62 69 74 73 2e 20 54 68 65  ding habits. The
5570: 20 63 6f 64 65 20 69 73 20 77 72 69 74 74 65 6e   code is written
5580: 20 74 68 69 73 0a 20 20 2a 2a 20 77 61 79 20 66   this.  ** way f
5590: 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20  or performance, 
55a0: 74 6f 20 61 76 6f 69 64 20 68 61 76 69 6e 67 20  to avoid having 
55b0: 74 6f 20 72 75 6e 20 74 68 65 20 69 6e 74 65 72  to run the inter
55c0: 72 75 70 74 20 61 6e 64 20 70 72 6f 67 72 65 73  rupt and progres
55d0: 73 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e  s.  ** checks on
55e0: 20 65 76 65 72 79 20 6f 70 63 6f 64 65 2e 20 20   every opcode.  
55f0: 54 68 69 73 20 68 65 6c 70 73 20 73 71 6c 69 74  This helps sqlit
5600: 65 33 5f 73 74 65 70 28 29 20 74 6f 20 72 75 6e  e3_step() to run
5610: 20 61 62 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a   about 1.5%.  **
5620: 20 66 61 73 74 65 72 20 61 63 63 6f 72 64 69 6e   faster accordin
5630: 67 20 74 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d  g to "valgrind -
5640: 2d 74 6f 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64  -tool=cachegrind
5650: 22 20 2a 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69  " */.check_for_i
5660: 6e 74 65 72 72 75 70 74 3a 0a 20 20 69 66 28 20  nterrupt:.  if( 
5670: 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
5680: 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72  pted ) goto abor
5690: 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75  t_due_to_interru
56a0: 70 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  pt;.#ifndef SQLI
56b0: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
56c0: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 43  _CALLBACK.  /* C
56d0: 61 6c 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73  all the progress
56e0: 20 63 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20   callback if it 
56f0: 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e  is configured an
5700: 64 20 74 68 65 20 72 65 71 75 69 72 65 64 20 6e  d the required n
5710: 75 6d 62 65 72 0a 20 20 2a 2a 20 6f 66 20 56 44  umber.  ** of VD
5720: 42 45 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e  BE ops have been
5730: 20 65 78 65 63 75 74 65 64 20 28 65 69 74 68 65   executed (eithe
5740: 72 20 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76  r since this inv
5750: 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20  ocation of.  ** 
5760: 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63 28  sqlite3VdbeExec(
5770: 29 20 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20  ) or since last 
5780: 74 69 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73  time the progres
5790: 73 20 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63  s callback was c
57a0: 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a 20 49 66 20  alled)..  ** If 
57b0: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
57c0: 6c 62 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f  lback returns no
57d0: 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65  n-zero, exit the
57e0: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
57f0: 20 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 74   with.  ** a ret
5800: 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f  urn code SQLITE_
5810: 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20 69 66  ABORT..  */.  if
5820: 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21  ( db->xProgress!
5830: 3d 30 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e  =0 && nVmStep>=n
5840: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 29 7b  ProgressLimit ){
5850: 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
5860: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 21 3d 30  >nProgressOps!=0
5870: 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73   );.    nProgres
5880: 73 4c 69 6d 69 74 20 3d 20 6e 56 6d 53 74 65 70  sLimit = nVmStep
5890: 20 2b 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73   + db->nProgress
58a0: 4f 70 73 20 2d 20 28 6e 56 6d 53 74 65 70 25 64  Ops - (nVmStep%d
58b0: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29  b->nProgressOps)
58c0: 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50  ;.    if( db->xP
58d0: 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f  rogress(db->pPro
58e0: 67 72 65 73 73 41 72 67 29 20 29 7b 0a 20 20 20  gressArg) ){.   
58f0: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49     rc = SQLITE_I
5900: 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20  NTERRUPT;.      
5910: 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
5920: 68 61 6c 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  halt;.    }.  }.
5930: 23 65 6e 64 69 66 0a 20 20 0a 20 20 62 72 65 61  #endif.  .  brea
5940: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
5950: 20 20 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20    Gosub P1 P2 * 
5960: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
5970: 74 68 65 20 63 75 72 72 65 6e 74 20 61 64 64 72  the current addr
5980: 65 73 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65  ess onto registe
5990: 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e  r P1.** and then
59a0: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
59b0: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
59c0: 47 6f 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20  Gosub: {        
59d0: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
59e0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
59f0: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28  >0 && pOp->p1<=(
5a00: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
5a10: 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  or) );.  pIn1 = 
5a20: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
5a30: 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d    assert( (pIn1-
5a40: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e  >flags & MEM_Dyn
5a50: 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f  )==0 );.  memAbo
5a60: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
5a70: 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  n1);.  pIn1->fla
5a80: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
5a90: 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a  pIn1->u.i = pc;.
5aa0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
5ab0: 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b  (pOp->p1, pIn1);
5ac0: 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20  .  pc = pOp->p2 
5ad0: 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  - 1;.  break;.}.
5ae0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65 74  ./* Opcode:  Ret
5af0: 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  urn P1 * * * *.*
5b00: 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65  *.** Jump to the
5b10: 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
5b20: 6e 20 61 66 74 65 72 20 74 68 65 20 61 64 64 72  n after the addr
5b30: 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ess in register 
5b40: 50 31 2e 20 20 41 66 74 65 72 0a 2a 2a 20 74 68  P1.  After.** th
5b50: 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72  e jump, register
5b60: 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65   P1 becomes unde
5b70: 66 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  fined..*/.case O
5b80: 50 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20 20 20  P_Return: {     
5b90: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
5ba0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
5bb0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
5bc0: 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d  t( pIn1->flags==
5bd0: 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 63 20  MEM_Int );.  pc 
5be0: 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69  = (int)pIn1->u.i
5bf0: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
5c00: 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b  = MEM_Undefined;
5c10: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
5c20: 4f 70 63 6f 64 65 3a 20 49 6e 69 74 43 6f 72 6f  Opcode: InitCoro
5c30: 75 74 69 6e 65 20 50 31 20 50 32 20 50 33 20 2a  utine P1 P2 P3 *
5c40: 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75 70 20   *.**.** Set up 
5c50: 72 65 67 69 73 74 65 72 20 50 31 20 73 6f 20 74  register P1 so t
5c60: 68 61 74 20 69 74 20 77 69 6c 6c 20 4f 50 5f 59  hat it will OP_Y
5c70: 69 65 6c 64 20 74 6f 20 74 68 65 20 63 6f 2d 72  ield to the co-r
5c80: 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65  outine.** locate
5c90: 64 20 61 74 20 61 64 64 72 65 73 73 20 50 33 2e  d at address P3.
5ca0: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 21 3d 30 20  .**.** If P2!=0 
5cb0: 74 68 65 6e 20 74 68 65 20 63 6f 2d 72 6f 75 74  then the co-rout
5cc0: 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ine implementati
5cd0: 6f 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66  on immediately f
5ce0: 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69 73 20 6f  ollows.** this o
5cf0: 70 63 6f 64 65 2e 20 20 53 6f 20 6a 75 6d 70 20  pcode.  So jump 
5d00: 6f 76 65 72 20 74 68 65 20 63 6f 2d 72 6f 75 74  over the co-rout
5d10: 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ine implementati
5d20: 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72 65 73 73  on to.** address
5d30: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
5d40: 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b  InitCoroutine: {
5d50: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
5d60: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5d70: 31 3e 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c  1>0 &&  pOp->p1<
5d80: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
5d90: 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72  rsor) );.  asser
5da0: 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 26 26  t( pOp->p2>=0 &&
5db0: 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20   pOp->p2<p->nOp 
5dc0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
5dd0: 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p3>=0 && pOp->
5de0: 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70  p3<p->nOp );.  p
5df0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
5e00: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
5e10: 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28  !VdbeMemDynamic(
5e20: 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75 74 2d  pOut) );.  pOut-
5e30: 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33 20 2d  >u.i = pOp->p3 -
5e40: 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   1;.  pOut->flag
5e50: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69  s = MEM_Int;.  i
5e60: 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 70 63 20  f( pOp->p2 ) pc 
5e70: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
5e80: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
5e90: 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75 74  code:  EndCorout
5ea0: 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ine P1 * * * *.*
5eb0: 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72 75 63  *.** The instruc
5ec0: 74 69 6f 6e 20 61 74 20 74 68 65 20 61 64 64 72  tion at the addr
5ed0: 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ess in register 
5ee0: 50 31 20 69 73 20 61 6e 20 4f 50 5f 59 69 65 6c  P1 is an OP_Yiel
5ef0: 64 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68  d..** Jump to th
5f00: 65 20 50 32 20 70 61 72 61 6d 65 74 65 72 20 6f  e P2 parameter o
5f10: 66 20 74 68 61 74 20 4f 50 5f 59 69 65 6c 64 2e  f that OP_Yield.
5f20: 0a 2a 2a 20 41 66 74 65 72 20 74 68 65 20 6a 75  .** After the ju
5f30: 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20  mp, register P1 
5f40: 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65  becomes undefine
5f50: 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e  d..*/.case OP_En
5f60: 64 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20  dCoroutine: {   
5f70: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
5f80: 2f 0a 20 20 56 64 62 65 4f 70 20 2a 70 43 61 6c  /.  VdbeOp *pCal
5f90: 6c 65 72 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  ler;.  pIn1 = &a
5fa0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
5fb0: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
5fc0: 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
5fd0: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
5fe0: 75 2e 69 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e  u.i>=0 && pIn1->
5ff0: 75 2e 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  u.i<p->nOp );.  
6000: 70 43 61 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70  pCaller = &aOp[p
6010: 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73  In1->u.i];.  ass
6020: 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70  ert( pCaller->op
6030: 63 6f 64 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29  code==OP_Yield )
6040: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61 6c  ;.  assert( pCal
6050: 6c 65 72 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43  ler->p2>=0 && pC
6060: 61 6c 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  aller->p2<p->nOp
6070: 20 29 3b 0a 20 20 70 63 20 3d 20 70 43 61 6c 6c   );.  pc = pCall
6080: 65 72 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 70 49  er->p2 - 1;.  pI
6090: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
60a0: 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65  Undefined;.  bre
60b0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
60c0: 3a 20 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a  :  Yield P1 P2 *
60d0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20   * *.**.** Swap 
60e0: 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e  the program coun
60f0: 74 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c  ter with the val
6100: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
6110: 31 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  1..**.** If the 
6120: 63 6f 2d 72 6f 75 74 69 6e 65 20 65 6e 64 73 20  co-routine ends 
6130: 77 69 74 68 20 4f 50 5f 59 69 65 6c 64 20 6f 72  with OP_Yield or
6140: 20 4f 50 5f 52 65 74 75 72 6e 20 74 68 65 6e 20   OP_Return then 
6150: 63 6f 6e 74 69 6e 75 65 0a 2a 2a 20 74 6f 20 74  continue.** to t
6160: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
6170: 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65  ion.  But if the
6180: 20 63 6f 2d 72 6f 75 74 69 6e 65 20 65 6e 64 73   co-routine ends
6190: 20 77 69 74 68 0a 2a 2a 20 4f 50 5f 45 6e 64 43   with.** OP_EndC
61a0: 6f 72 6f 75 74 69 6e 65 2c 20 6a 75 6d 70 20 69  oroutine, jump i
61b0: 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
61c0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65  ..*/.case OP_Yie
61d0: 6c 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ld: {           
61e0: 20 2f 2a 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f   /* in1, jump */
61f0: 0a 20 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20  .  int pcDest;. 
6200: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
6210: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
6220: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
6230: 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a   MEM_Dyn)==0 );.
6240: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
6250: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73  MEM_Int;.  pcDes
6260: 74 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75  t = (int)pIn1->u
6270: 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  .i;.  pIn1->u.i 
6280: 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54 45 52  = pc;.  REGISTER
6290: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
62a0: 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70 63  pIn1);.  pc = pc
62b0: 44 65 73 74 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Dest;.  break;.}
62c0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61  ../* Opcode:  Ha
62d0: 6c 74 49 66 4e 75 6c 6c 20 20 50 31 20 50 32 20  ltIfNull  P1 P2 
62e0: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
62f0: 70 73 69 73 3a 20 20 69 66 20 72 5b 50 33 5d 3d  psis:  if r[P3]=
6300: 6e 75 6c 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20  null halt.**.** 
6310: 43 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20  Check the value 
6320: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  in register P3. 
6330: 20 49 66 20 69 74 20 69 73 20 4e 55 4c 4c 20 74   If it is NULL t
6340: 68 65 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a  hen Halt using.*
6350: 2a 20 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20  * parameter P1, 
6360: 50 32 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66  P2, and P4 as if
6370: 20 74 68 69 73 20 77 65 72 65 20 61 20 48 61 6c   this were a Hal
6380: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  t instruction.  
6390: 49 66 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  If the.** value 
63a0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  in register P3 i
63b0: 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e  s not NULL, then
63c0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73   this routine is
63d0: 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65   a no-op..** The
63e0: 20 50 35 20 70 61 72 61 6d 65 74 65 72 20 73 68   P5 parameter sh
63f0: 6f 75 6c 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61  ould be 1..*/.ca
6400: 73 65 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c  se OP_HaltIfNull
6410: 3a 20 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20  : {      /* in3 
6420: 2a 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  */.  pIn3 = &aMe
6430: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
6440: 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
6450: 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20   MEM_Null)==0 ) 
6460: 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c  break;.  /* Fall
6470: 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
6480: 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f  _Halt */.}../* O
6490: 70 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20  pcode:  Halt P1 
64a0: 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  P2 * P4 P5.**.**
64b0: 20 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c   Exit immediatel
64c0: 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72  y.  All open cur
64d0: 73 6f 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c  sors, etc are cl
64e0: 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69  osed.** automati
64f0: 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  cally..**.** P1 
6500: 69 73 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  is the result co
6510: 64 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  de returned by s
6520: 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73  qlite3_exec(), s
6530: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a  qlite3_reset(),.
6540: 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69  ** or sqlite3_fi
6550: 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61  nalize().  For a
6560: 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68   normal halt, th
6570: 69 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c  is should be SQL
6580: 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46  ITE_OK (0)..** F
6590: 6f 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61  or errors, it ca
65a0: 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20  n be some other 
65b0: 76 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30  value.  If P1!=0
65c0: 20 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65   then P2 will de
65d0: 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68  termine.** wheth
65e0: 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c  er or not to rol
65f0: 6c 62 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e  lback the curren
6600: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  t transaction.  
6610: 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a  Do not rollback.
6620: 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69  ** if P2==OE_Fai
6630: 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61  l. Do the rollba
6640: 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c  ck if P2==OE_Rol
6650: 6c 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f  lback.  If P2==O
6660: 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e  E_Abort,.** then
6670: 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68   back out all ch
6680: 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65 20  anges that have 
6690: 6f 63 63 75 72 72 65 64 20 64 75 72 69 6e 67 20  occurred during 
66a0: 74 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f  this execution o
66b0: 66 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62  f the.** VDBE, b
66c0: 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61  ut do not rollba
66d0: 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ck the transacti
66e0: 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  on. .**.** If P4
66f0: 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65   is not null the
6700: 6e 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72  n it is an error
6710: 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e   message string.
6720: 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20 76  .**.** P5 is a v
6730: 61 6c 75 65 20 62 65 74 77 65 65 6e 20 30 20 61  alue between 0 a
6740: 6e 64 20 34 2c 20 69 6e 63 6c 75 73 69 76 65 2c  nd 4, inclusive,
6750: 20 74 68 61 74 20 6d 6f 64 69 66 69 65 73 20 74   that modifies t
6760: 68 65 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2a  he P4 string..**
6770: 0a 2a 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20 63  .**    0:  (no c
6780: 68 61 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a 20  hange).**    1: 
6790: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72 61   NOT NULL contra
67a0: 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a  int failed: P4.*
67b0: 2a 20 20 20 20 32 3a 20 20 55 4e 49 51 55 45 20  *    2:  UNIQUE 
67c0: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
67d0: 64 3a 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20 20  d: P4.**    3:  
67e0: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
67f0: 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20   failed: P4.**  
6800: 20 20 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b 45    4:  FOREIGN KE
6810: 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  Y constraint fai
6820: 6c 65 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66  led: P4.**.** If
6830: 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20   P5 is not zero 
6840: 61 6e 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c 20  and P4 is NULL, 
6850: 74 68 65 6e 20 65 76 65 72 79 74 68 69 6e 67 20  then everything 
6860: 61 66 74 65 72 20 74 68 65 20 22 3a 22 20 69 73  after the ":" is
6870: 0a 2a 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a  .** omitted..**.
6880: 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20 69  ** There is an i
6890: 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30  mplied "Halt 0 0
68a0: 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   0" instruction 
68b0: 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65 20  inserted at the 
68c0: 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65  very end of.** e
68d0: 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53  very program.  S
68e0: 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68  o a jump past th
68f0: 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69  e last instructi
6900: 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61  on of the progra
6910: 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65  m.** is the same
6920: 20 61 73 20 65 78 65 63 75 74 69 6e 67 20 48 61   as executing Ha
6930: 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48  lt..*/.case OP_H
6940: 61 6c 74 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63  alt: {.  const c
6950: 68 61 72 20 2a 7a 54 79 70 65 3b 0a 20 20 63 6f  har *zType;.  co
6960: 6e 73 74 20 63 68 61 72 20 2a 7a 4c 6f 67 46 6d  nst char *zLogFm
6970: 74 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  t;..  if( pOp->p
6980: 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  1==SQLITE_OK && 
6990: 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  p->pFrame ){.   
69a0: 20 2f 2a 20 48 61 6c 74 20 74 68 65 20 73 75 62   /* Halt the sub
69b0: 2d 70 72 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e  -program. Return
69c0: 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20   control to the 
69d0: 70 61 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f  parent frame. */
69e0: 0a 20 20 20 20 56 64 62 65 46 72 61 6d 65 20 2a  .    VdbeFrame *
69f0: 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61  pFrame = p->pFra
6a00: 6d 65 3b 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d  me;.    p->pFram
6a10: 65 20 3d 20 70 46 72 61 6d 65 2d 3e 70 50 61 72  e = pFrame->pPar
6a20: 65 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61  ent;.    p->nFra
6a30: 6d 65 2d 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65  me--;.    sqlite
6a40: 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28  3VdbeSetChanges(
6a50: 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b  db, p->nChange);
6a60: 0a 20 20 20 20 70 63 20 3d 20 73 71 6c 69 74 65  .    pc = sqlite
6a70: 33 56 64 62 65 46 72 61 6d 65 52 65 73 74 6f 72  3VdbeFrameRestor
6a80: 65 28 70 46 72 61 6d 65 29 3b 0a 20 20 20 20 6c  e(pFrame);.    l
6a90: 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c  astRowid = db->l
6aa0: 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 69 66  astRowid;.    if
6ab0: 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67  ( pOp->p2==OE_Ig
6ac0: 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a  nore ){.      /*
6ad0: 20 49 6e 73 74 72 75 63 74 69 6f 6e 20 70 63 20   Instruction pc 
6ae0: 69 73 20 74 68 65 20 4f 50 5f 50 72 6f 67 72 61  is the OP_Progra
6af0: 6d 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  m that invoked t
6b00: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a  he sub-program .
6b10: 20 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74        ** current
6b20: 6c 79 20 62 65 69 6e 67 20 68 61 6c 74 65 64 2e  ly being halted.
6b30: 20 49 66 20 74 68 65 20 70 32 20 69 6e 73 74 72   If the p2 instr
6b40: 75 63 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f  uction of this O
6b50: 50 5f 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20  P_Halt.      ** 
6b60: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 73  instruction is s
6b70: 65 74 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c  et to OE_Ignore,
6b80: 20 74 68 65 6e 20 74 68 65 20 73 75 62 2d 70 72   then the sub-pr
6b90: 6f 67 72 61 6d 20 69 73 20 74 68 72 6f 77 69 6e  ogram is throwin
6ba0: 67 0a 20 20 20 20 20 20 2a 2a 20 61 6e 20 49 47  g.      ** an IG
6bb0: 4e 4f 52 45 20 65 78 63 65 70 74 69 6f 6e 2e 20  NORE exception. 
6bc0: 49 6e 20 74 68 69 73 20 63 61 73 65 20 6a 75 6d  In this case jum
6bd0: 70 20 74 6f 20 74 68 65 20 61 64 64 72 65 73 73  p to the address
6be0: 20 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20   specified.     
6bf0: 20 2a 2a 20 61 73 20 74 68 65 20 70 32 20 6f 66   ** as the p2 of
6c00: 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f   the calling OP_
6c10: 50 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20  Program.  */.   
6c20: 20 20 20 70 63 20 3d 20 70 2d 3e 61 4f 70 5b 70     pc = p->aOp[p
6c30: 63 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20  c].p2-1;.    }. 
6c40: 20 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b     aOp = p->aOp;
6c50: 0a 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61  .    aMem = p->a
6c60: 4d 65 6d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  Mem;.    break;.
6c70: 20 20 7d 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f    }.  p->rc = pO
6c80: 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f  p->p1;.  p->erro
6c90: 72 41 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f  rAction = (u8)pO
6ca0: 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d  p->p2;.  p->pc =
6cb0: 20 70 63 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63   pc;.  if( p->rc
6cc0: 20 29 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   ){.    if( pOp-
6cd0: 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 73 74 61  >p5 ){.      sta
6ce0: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
6cf0: 20 63 6f 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20   const azType[] 
6d00: 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20  = { "NOT NULL", 
6d10: 22 55 4e 49 51 55 45 22 2c 20 22 43 48 45 43 4b  "UNIQUE", "CHECK
6d20: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
6d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d50: 22 46 4f 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b  "FOREIGN KEY" };
6d60: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
6d70: 4f 70 2d 3e 70 35 3e 3d 31 20 26 26 20 70 4f 70  Op->p5>=1 && pOp
6d80: 2d 3e 70 35 3c 3d 34 20 29 3b 0a 20 20 20 20 20  ->p5<=4 );.     
6d90: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
6da0: 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 74  p5==1 );.      t
6db0: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35  estcase( pOp->p5
6dc0: 3d 3d 32 20 29 3b 0a 20 20 20 20 20 20 74 65 73  ==2 );.      tes
6dd0: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d  tcase( pOp->p5==
6de0: 33 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63  3 );.      testc
6df0: 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 34 20  ase( pOp->p5==4 
6e00: 29 3b 0a 20 20 20 20 20 20 7a 54 79 70 65 20 3d  );.      zType =
6e10: 20 61 7a 54 79 70 65 5b 70 4f 70 2d 3e 70 35 2d   azType[pOp->p5-
6e20: 31 5d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  1];.    }else{. 
6e30: 20 20 20 20 20 7a 54 79 70 65 20 3d 20 30 3b 0a       zType = 0;.
6e40: 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
6e50: 28 20 7a 54 79 70 65 21 3d 30 20 7c 7c 20 70 4f  ( zType!=0 || pO
6e60: 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20  p->p4.z!=0 );.  
6e70: 20 20 7a 4c 6f 67 46 6d 74 20 3d 20 22 61 62 6f    zLogFmt = "abo
6e80: 72 74 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d  rt at %d in [%s]
6e90: 3a 20 25 73 22 3b 0a 20 20 20 20 69 66 28 20 7a  : %s";.    if( z
6ea0: 54 79 70 65 20 26 26 20 70 4f 70 2d 3e 70 34 2e  Type && pOp->p4.
6eb0: 7a 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  z ){.      sqlit
6ec0: 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
6ed0: 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
6ee0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
6ef0: 65 64 3a 20 25 73 22 2c 20 0a 20 20 20 20 20 20  ed: %s", .      
6f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f10: 20 7a 54 79 70 65 2c 20 70 4f 70 2d 3e 70 34 2e   zType, pOp->p4.
6f20: 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  z);.    }else if
6f30: 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  ( pOp->p4.z ){. 
6f40: 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
6f50: 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
6f60: 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 70 4f 70  g, db, "%s", pOp
6f70: 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 65 6c  ->p4.z);.    }el
6f80: 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  se{.      sqlite
6f90: 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
6fa0: 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 20  ErrMsg, db, "%s 
6fb0: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
6fc0: 64 22 2c 20 7a 54 79 70 65 29 3b 0a 20 20 20 20  d", zType);.    
6fd0: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f  }.    sqlite3_lo
6fe0: 67 28 70 4f 70 2d 3e 70 31 2c 20 7a 4c 6f 67 46  g(pOp->p1, zLogF
6ff0: 6d 74 2c 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c  mt, pc, p->zSql,
7000: 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
7010: 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
7020: 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61  VdbeHalt(p);.  a
7030: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
7040: 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51  E_BUSY || rc==SQ
7050: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53  LITE_OK || rc==S
7060: 51 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20  QLITE_ERROR );. 
7070: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
7080: 42 55 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72  BUSY ){.    p->r
7090: 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
70a0: 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  BUSY;.  }else{. 
70b0: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
70c0: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e  QLITE_OK || (p->
70d0: 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45  rc&0xff)==SQLITE
70e0: 5f 43 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20  _CONSTRAINT );. 
70f0: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
7100: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e  QLITE_OK || db->
7110: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20  nDeferredCons>0 
7120: 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  || db->nDeferred
7130: 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20  ImmCons>0 );.   
7140: 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51   rc = p->rc ? SQ
7150: 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c  LITE_ERROR : SQL
7160: 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20  ITE_DONE;.  }.  
7170: 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
7180: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
7190: 49 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a 20  Integer P1 P2 * 
71a0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
71b0: 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20   r[P2]=P1.**.** 
71c0: 54 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67  The 32-bit integ
71d0: 65 72 20 76 61 6c 75 65 20 50 31 20 69 73 20 77  er value P1 is w
71e0: 72 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69  ritten into regi
71f0: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
7200: 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20   OP_Integer: {  
7210: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
7220: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70  rerelease */.  p
7230: 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e  Out->u.i = pOp->
7240: 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p1;.  break;.}..
7250: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34  /* Opcode: Int64
7260: 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20   * P2 * P4 *.** 
7270: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
7280: 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  P4.**.** P4 is a
7290: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34   pointer to a 64
72a0: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
72b0: 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61  ue..** Write tha
72c0: 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67  t value into reg
72d0: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
72e0: 65 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20  e OP_Int64: {   
72f0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
7300: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7310: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
7320: 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75  pI64!=0 );.  pOu
7330: 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70  t->u.i = *pOp->p
7340: 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b  4.pI64;.  break;
7350: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
7360: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
7370: 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65  _POINT./* Opcode
7380: 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34  : Real * P2 * P4
7390: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
73a0: 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50  r[P2]=P4.**.** P
73b0: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
73c0: 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74  o a 64-bit float
73d0: 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
73e0: 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76  .** Write that v
73f0: 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
7400: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
7410: 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20  P_Real: {       
7420: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
7430: 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 2d 70  TK_FLOAT, out2-p
7440: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70  rerelease */.  p
7450: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
7460: 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28  _Real;.  assert(
7470: 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a   !sqlite3IsNaN(*
7480: 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29  pOp->p4.pReal) )
7490: 3b 0a 20 20 70 4f 75 74 2d 3e 72 20 3d 20 2a 70  ;.  pOut->r = *p
74a0: 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20  Op->p4.pReal;.  
74b0: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
74c0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69  ./* Opcode: Stri
74d0: 6e 67 38 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  ng8 * P2 * P4 *.
74e0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
74f0: 32 5d 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 34  2]='P4'.**.** P4
7500: 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c   points to a nul
7510: 20 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d   terminated UTF-
7520: 38 20 73 74 72 69 6e 67 2e 20 54 68 69 73 20 6f  8 string. This o
7530: 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f  pcode is transfo
7540: 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 6e  rmed .** into an
7550: 20 4f 50 5f 53 74 72 69 6e 67 20 62 65 66 6f 72   OP_String befor
7560: 65 20 69 74 20 69 73 20 65 78 65 63 75 74 65 64  e it is executed
7570: 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 74   for the first t
7580: 69 6d 65 2e 20 20 44 75 72 69 6e 67 0a 2a 2a 20  ime.  During.** 
7590: 74 68 69 73 20 74 72 61 6e 73 66 6f 72 6d 61 74  this transformat
75a0: 69 6f 6e 2c 20 74 68 65 20 6c 65 6e 67 74 68 20  ion, the length 
75b0: 6f 66 20 73 74 72 69 6e 67 20 50 34 20 69 73 20  of string P4 is 
75c0: 63 6f 6d 70 75 74 65 64 20 61 6e 64 20 73 74 6f  computed and sto
75d0: 72 65 64 0a 2a 2a 20 61 73 20 74 68 65 20 50 31  red.** as the P1
75e0: 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63   parameter..*/.c
75f0: 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20  ase OP_String8: 
7600: 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d  {         /* sam
7610: 65 20 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20  e as TK_STRING, 
7620: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
7630: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
7640: 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70  ->p4.z!=0 );.  p
7650: 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f  Op->opcode = OP_
7660: 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70  String;.  pOp->p
7670: 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  1 = sqlite3Strle
7680: 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  n30(pOp->p4.z);.
7690: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
76a0: 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28  OMIT_UTF16.  if(
76b0: 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54   encoding!=SQLIT
76c0: 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 72 63  E_UTF8 ){.    rc
76d0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
76e0: 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f  mSetStr(pOut, pO
76f0: 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c  p->p4.z, -1, SQL
7700: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
7710: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 69 66  _STATIC);.    if
7720: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f  ( rc==SQLITE_TOO
7730: 42 49 47 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62  BIG ) goto too_b
7740: 69 67 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49  ig;.    if( SQLI
7750: 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64  TE_OK!=sqlite3Vd
7760: 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
7770: 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29  (pOut, encoding)
7780: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
7790: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74      assert( pOut
77a0: 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d  ->zMalloc==pOut-
77b0: 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  >z );.    assert
77c0: 28 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20  ( pOut->flags & 
77d0: 4d 45 4d 5f 44 79 6e 20 29 3b 0a 20 20 20 20 70  MEM_Dyn );.    p
77e0: 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30  Out->zMalloc = 0
77f0: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
7800: 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b  s |= MEM_Static;
7810: 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
7820: 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20   &= ~MEM_Dyn;.  
7830: 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
7840: 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b  e==P4_DYNAMIC ){
7850: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
7860: 46 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34  Free(db, pOp->p4
7870: 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  .z);.    }.    p
7880: 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f  Op->p4type = P4_
7890: 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70  DYNAMIC;.    pOp
78a0: 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a  ->p4.z = pOut->z
78b0: 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20  ;.    pOp->p1 = 
78c0: 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e  pOut->n;.  }.#en
78d0: 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  dif.  if( pOp->p
78e0: 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  1>db->aLimit[SQL
78f0: 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
7900: 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
7910: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20  o_big;.  }.  /* 
7920: 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  Fall through to 
7930: 74 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f  the next case, O
7940: 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20  P_String */.}.  
7950: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69  ./* Opcode: Stri
7960: 6e 67 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  ng P1 P2 * P4 *.
7970: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
7980: 32 5d 3d 27 50 34 27 20 28 6c 65 6e 3d 50 31 29  2]='P4' (len=P1)
7990: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e  .**.** The strin
79a0: 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65  g value P4 of le
79b0: 6e 67 74 68 20 50 31 20 28 62 79 74 65 73 29 20  ngth P1 (bytes) 
79c0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
79d0: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
79e0: 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20  e OP_String: {  
79f0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
7a00: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7a10: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
7a20: 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  z!=0 );.  pOut->
7a30: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c  flags = MEM_Str|
7a40: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54  MEM_Static|MEM_T
7a50: 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d  erm;.  pOut->z =
7a60: 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f   pOp->p4.z;.  pO
7a70: 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b  ut->n = pOp->p1;
7a80: 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65  .  pOut->enc = e
7a90: 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54  ncoding;.  UPDAT
7aa0: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
7ab0: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
7ac0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c  ../* Opcode: Nul
7ad0: 6c 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  l P1 P2 P3 * *.*
7ae0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
7af0: 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a  2..P3]=NULL.**.*
7b00: 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69  * Write a NULL i
7b10: 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32  nto registers P2
7b20: 2e 20 20 49 66 20 50 33 20 67 72 65 61 74 65 72  .  If P3 greater
7b30: 20 74 68 61 6e 20 50 32 2c 20 74 68 65 6e 20 61   than P2, then a
7b40: 6c 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c  lso write.** NUL
7b50: 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  L into register 
7b60: 50 33 20 61 6e 64 20 65 76 65 72 79 20 72 65 67  P3 and every reg
7b70: 69 73 74 65 72 20 69 6e 20 62 65 74 77 65 65 6e  ister in between
7b80: 20 50 32 20 61 6e 64 20 50 33 2e 20 20 49 66 20   P2 and P3.  If 
7b90: 50 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  P3.** is less th
7ba0: 61 6e 20 50 32 20 28 74 79 70 69 63 61 6c 6c 79  an P2 (typically
7bb0: 20 50 33 20 69 73 20 7a 65 72 6f 29 20 74 68 65   P3 is zero) the
7bc0: 6e 20 6f 6e 6c 79 20 72 65 67 69 73 74 65 72 20  n only register 
7bd0: 50 32 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20  P2 is.** set to 
7be0: 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  NULL..**.** If t
7bf0: 68 65 20 50 31 20 76 61 6c 75 65 20 69 73 20 6e  he P1 value is n
7c00: 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c  on-zero, then al
7c10: 73 6f 20 73 65 74 20 74 68 65 20 4d 45 4d 5f 43  so set the MEM_C
7c20: 6c 65 61 72 65 64 20 66 6c 61 67 20 73 6f 20 74  leared flag so t
7c30: 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75  hat.** NULL valu
7c40: 65 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70  es will not comp
7c50: 61 72 65 20 65 71 75 61 6c 20 65 76 65 6e 20 69  are equal even i
7c60: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
7c70: 69 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f  is set on.** OP_
7c80: 4e 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a  Ne or OP_Eq..*/.
7c90: 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20  case OP_Null: { 
7ca0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
7cb0: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7cc0: 20 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36    int cnt;.  u16
7cd0: 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 63 6e 74   nullFlag;.  cnt
7ce0: 20 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e   = pOp->p3-pOp->
7cf0: 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p2;.  assert( pO
7d00: 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
7d10: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
7d20: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e   pOut->flags = n
7d30: 75 6c 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70  ullFlag = pOp->p
7d40: 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45  1 ? (MEM_Null|ME
7d50: 4d 5f 43 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d  M_Cleared) : MEM
7d60: 5f 4e 75 6c 6c 3b 0a 20 20 77 68 69 6c 65 28 20  _Null;.  while( 
7d70: 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75  cnt>0 ){.    pOu
7d80: 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  t++;.    memAbou
7d90: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
7da0: 74 29 3b 0a 20 20 20 20 56 64 62 65 4d 65 6d 52  t);.    VdbeMemR
7db0: 65 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a 20 20  elease(pOut);.  
7dc0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
7dd0: 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 63 6e  nullFlag;.    cn
7de0: 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  t--;.  }.  break
7df0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
7e00: 53 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20  SoftNull P1 * * 
7e10: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
7e20: 20 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a    r[P1]=NULL.**.
7e30: 2a 2a 20 53 65 74 20 72 65 67 69 73 74 65 72 20  ** Set register 
7e40: 50 31 20 74 6f 20 68 61 76 65 20 74 68 65 20 76  P1 to have the v
7e50: 61 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73 65 65  alue NULL as see
7e60: 6e 20 62 79 20 74 68 65 20 4f 50 5f 4d 61 6b 65  n by the OP_Make
7e70: 52 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74 72 75  Record.** instru
7e80: 63 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20 6e 6f  ction, but do no
7e90: 74 20 66 72 65 65 20 61 6e 79 20 73 74 72 69 6e  t free any strin
7ea0: 67 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f 72 79  g or blob memory
7eb0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
7ec0: 0a 2a 2a 20 74 68 65 20 72 65 67 69 73 74 65 72  .** the register
7ed0: 2c 20 73 6f 20 74 68 61 74 20 69 66 20 74 68 65  , so that if the
7ee0: 20 76 61 6c 75 65 20 77 61 73 20 61 20 73 74 72   value was a str
7ef0: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68 61 74  ing or blob that
7f00: 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73   was.** previous
7f10: 6c 79 20 63 6f 70 69 65 64 20 75 73 69 6e 67 20  ly copied using 
7f20: 4f 50 5f 53 43 6f 70 79 2c 20 74 68 65 20 63 6f  OP_SCopy, the co
7f30: 70 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74 69 6e  pies will contin
7f40: 75 65 20 74 6f 20 62 65 20 76 61 6c 69 64 2e 0a  ue to be valid..
7f50: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66 74 4e  */.case OP_SoftN
7f60: 75 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  ull: {.  assert(
7f70: 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f   pOp->p1>0 && pO
7f80: 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p1<=(p->nMem-
7f90: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
7fa0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
7fb0: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e  p->p1];.  pOut->
7fc0: 66 6c 61 67 73 20 3d 20 28 70 4f 75 74 2d 3e 66  flags = (pOut->f
7fd0: 6c 61 67 73 7c 4d 45 4d 5f 4e 75 6c 6c 29 26 7e  lags|MEM_Null)&~
7fe0: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20  MEM_Undefined;. 
7ff0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
8000: 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32  code: Blob P1 P2
8010: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
8020: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c  sis: r[P2]=P4 (l
8030: 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20  en=P1).**.** P4 
8040: 70 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62  points to a blob
8050: 20 6f 66 20 64 61 74 61 20 50 31 20 62 79 74 65   of data P1 byte
8060: 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74  s long.  Store t
8070: 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72  his.** blob in r
8080: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
8090: 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20  ase OP_Blob: {  
80a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
80b0: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
80c0: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
80d0: 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f  p->p1 <= SQLITE_
80e0: 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20  MAX_LENGTH );.  
80f0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
8100: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
8110: 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30  p4.z, pOp->p1, 0
8120: 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  , 0);.  pOut->en
8130: 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
8140: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
8150: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
8160: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
8170: 3a 20 56 61 72 69 61 62 6c 65 20 50 31 20 50 32  : Variable P1 P2
8180: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
8190: 73 69 73 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d  sis: r[P2]=param
81a0: 65 74 65 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a  eter(P1,P4).**.*
81b0: 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 76  * Transfer the v
81c0: 61 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20 70  alues of bound p
81d0: 61 72 61 6d 65 74 65 72 20 50 31 20 69 6e 74 6f  arameter P1 into
81e0: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a   register P2.**.
81f0: 2a 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d 65  ** If the parame
8200: 74 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74 68  ter is named, th
8210: 65 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70 65  en its name appe
8220: 61 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68  ars in P4..** Th
8230: 65 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73  e P4 value is us
8240: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69  ed by sqlite3_bi
8250: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
8260: 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  e()..*/.case OP_
8270: 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20  Variable: {     
8280: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
8290: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 4d  rerelease */.  M
82a0: 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20  em *pVar;       
82b0: 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74  /* Value being t
82c0: 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20  ransferred */.. 
82d0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
82e0: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70  >0 && pOp->p1<=p
82f0: 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65  ->nVar );.  asse
8300: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30  rt( pOp->p4.z==0
8310: 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70   || pOp->p4.z==p
8320: 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d  ->azVar[pOp->p1-
8330: 31 5d 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26  1] );.  pVar = &
8340: 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20  p->aVar[pOp->p1 
8350: 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69  - 1];.  if( sqli
8360: 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
8370: 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f  (pVar) ){.    go
8380: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
8390: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
83a0: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
83b0: 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74  , pVar, MEM_Stat
83c0: 69 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ic);.  UPDATE_MA
83d0: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
83e0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
83f0: 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31   Opcode: Move P1
8400: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
8410: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32 40 50 33  nopsis:  r[P2@P3
8420: 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a  ]=r[P1@P3].**.**
8430: 20 4d 6f 76 65 20 74 68 65 20 76 61 6c 75 65 73   Move the values
8440: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
8450: 2e 50 31 2b 50 33 20 6f 76 65 72 20 69 6e 74 6f  .P1+P3 over into
8460: 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50 32  .** registers P2
8470: 2e 2e 50 32 2b 50 33 2e 20 20 52 65 67 69 73 74  ..P2+P3.  Regist
8480: 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20 61 72  ers P1..P1+P3 ar
8490: 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e  e.** left holdin
84a0: 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73  g a NULL.  It is
84b0: 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65   an error for re
84c0: 67 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a  gister ranges.**
84d0: 20 50 31 2e 2e 50 31 2b 50 33 20 61 6e 64 20 50   P1..P1+P3 and P
84e0: 32 2e 2e 50 32 2b 50 33 20 74 6f 20 6f 76 65 72  2..P2+P3 to over
84f0: 6c 61 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lap..*/.case OP_
8500: 4d 6f 76 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a  Move: {.  char *
8510: 7a 4d 61 6c 6c 6f 63 3b 20 20 20 2f 2a 20 48 6f  zMalloc;   /* Ho
8520: 6c 64 69 6e 67 20 76 61 72 69 61 62 6c 65 20 66  lding variable f
8530: 6f 72 20 61 6c 6c 6f 63 61 74 65 64 20 6d 65 6d  or allocated mem
8540: 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20  ory */.  int n; 
8550: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
8560: 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
8570: 20 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f   left to copy */
8580: 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20  .  int p1;      
8590: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
85a0: 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a  to copy from */.
85b0: 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20    int p2;       
85c0: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
85d0: 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20  o copy to */..  
85e0: 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70  n = pOp->p3;.  p
85f0: 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  1 = pOp->p1;.  p
8600: 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  2 = pOp->p2;.  a
8610: 73 73 65 72 74 28 20 6e 3e 3d 30 20 26 26 20 70  ssert( n>=0 && p
8620: 31 3e 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20  1>0 && p2>0 );. 
8630: 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70   assert( p1+n<=p
8640: 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b  2 || p2+n<=p1 );
8650: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
8660: 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  [p1];.  pOut = &
8670: 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a  aMem[p2];.  do{.
8680: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74      assert( pOut
8690: 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d  <=&aMem[(p->nMem
86a0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b  -p->nCursor)] );
86b0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
86c0: 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65  1<=&aMem[(p->nMe
86d0: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29  m-p->nCursor)] )
86e0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
86f0: 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29  mIsValid(pIn1) )
8700: 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
8710: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
8720: 0a 20 20 20 20 7a 4d 61 6c 6c 6f 63 20 3d 20 70  .    zMalloc = p
8730: 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20  Out->zMalloc;.  
8740: 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20    pOut->zMalloc 
8750: 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 0;.    sqlite3
8760: 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74  VdbeMemMove(pOut
8770: 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64 65 66 20  , pIn1);.#ifdef 
8780: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
8790: 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70   if( pOut->pScop
87a0: 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d  yFrom>=&aMem[p1]
87b0: 20 26 26 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79   && pOut->pScopy
87c0: 46 72 6f 6d 3c 26 61 4d 65 6d 5b 70 31 2b 70 4f  From<&aMem[p1+pO
87d0: 70 2d 3e 70 33 5d 20 29 7b 0a 20 20 20 20 20 20  p->p3] ){.      
87e0: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
87f0: 20 2b 3d 20 70 31 20 2d 20 70 4f 70 2d 3e 70 32   += p1 - pOp->p2
8800: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
8810: 20 20 20 70 49 6e 31 2d 3e 7a 4d 61 6c 6c 6f 63     pIn1->zMalloc
8820: 20 3d 20 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20   = zMalloc;.    
8830: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
8840: 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  2++, pOut);.    
8850: 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74  pIn1++;.    pOut
8860: 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65 28 20 6e 2d  ++;.  }while( n-
8870: 2d 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  - );.  break;.}.
8880: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79  ./* Opcode: Copy
8890: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
88a0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 40   Synopsis: r[P2@
88b0: 50 33 2b 31 5d 3d 72 5b 50 31 40 50 33 2b 31 5d  P3+1]=r[P1@P3+1]
88c0: 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f  .**.** Make a co
88d0: 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  py of registers 
88e0: 50 31 2e 2e 50 31 2b 50 33 20 69 6e 74 6f 20 72  P1..P1+P3 into r
88f0: 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b  egisters P2..P2+
8900: 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P3..**.** This i
8910: 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73  nstruction makes
8920: 20 61 20 64 65 65 70 20 63 6f 70 79 20 6f 66 20   a deep copy of 
8930: 74 68 65 20 76 61 6c 75 65 2e 20 20 41 20 64 75  the value.  A du
8940: 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61  plicate.** is ma
8950: 64 65 20 6f 66 20 61 6e 79 20 73 74 72 69 6e 67  de of any string
8960: 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e   or blob constan
8970: 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f  t.  See also OP_
8980: 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  SCopy..*/.case O
8990: 50 5f 43 6f 70 79 3a 20 7b 0a 20 20 69 6e 74 20  P_Copy: {.  int 
89a0: 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  n;..  n = pOp->p
89b0: 33 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  3;.  pIn1 = &aMe
89c0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
89d0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
89e0: 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
89f0: 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 77  Out!=pIn1 );.  w
8a00: 68 69 6c 65 28 20 31 20 29 7b 0a 20 20 20 20 73  hile( 1 ){.    s
8a10: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
8a20: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
8a30: 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  In1, MEM_Ephem);
8a40: 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c  .    Deephemeral
8a50: 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69 66 64 65  ize(pOut);.#ifde
8a60: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
8a70: 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46     pOut->pScopyF
8a80: 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  rom = 0;.#endif.
8a90: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
8aa0: 43 45 28 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e  CE(pOp->p2+pOp->
8ab0: 70 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 20  p3-n, pOut);.   
8ac0: 20 69 66 28 20 28 6e 2d 2d 29 3d 3d 30 20 29 20   if( (n--)==0 ) 
8ad0: 62 72 65 61 6b 3b 0a 20 20 20 20 70 4f 75 74 2b  break;.    pOut+
8ae0: 2b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20  +;.    pIn1++;. 
8af0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
8b00: 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79 20  * Opcode: SCopy 
8b10: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
8b20: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
8b30: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20  [P1].**.** Make 
8b40: 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f  a shallow copy o
8b50: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e  f register P1 in
8b60: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
8b70: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
8b80: 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73  uction makes a s
8b90: 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74  hallow copy of t
8ba0: 68 65 20 76 61 6c 75 65 2e 20 20 49 66 20 74 68  he value.  If th
8bb0: 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20  e value.** is a 
8bc0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20  string or blob, 
8bd0: 74 68 65 6e 20 74 68 65 20 63 6f 70 79 20 69 73  then the copy is
8be0: 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72 20   only a pointer 
8bf0: 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e  to the.** origin
8c00: 61 6c 20 61 6e 64 20 68 65 6e 63 65 20 69 66 20  al and hence if 
8c10: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 61  the original cha
8c20: 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20 74 68 65  nges so will the
8c30: 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c   copy..** Worse,
8c40: 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   if the original
8c50: 20 69 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c   is deallocated,
8c60: 20 74 68 65 20 63 6f 70 79 20 62 65 63 6f 6d 65   the copy become
8c70: 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68  s invalid..** Th
8c80: 75 73 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6d  us the program m
8c90: 75 73 74 20 67 75 61 72 61 6e 74 65 65 20 74 68  ust guarantee th
8ca0: 61 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  at the original 
8cb0: 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a  will not change.
8cc0: 2a 2a 20 64 75 72 69 6e 67 20 74 68 65 20 6c 69  ** during the li
8cd0: 66 65 74 69 6d 65 20 6f 66 20 74 68 65 20 63 6f  fetime of the co
8ce0: 70 79 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70 79  py.  Use OP_Copy
8cf0: 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c   to make a compl
8d00: 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a  ete.** copy..*/.
8d10: 63 61 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b  case OP_SCopy: {
8d20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
8d30: 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
8d40: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
8d50: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
8d60: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
8d70: 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b  t( pOut!=pIn1 );
8d80: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
8d90: 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
8da0: 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68  t, pIn1, MEM_Eph
8db0: 65 6d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  em);.#ifdef SQLI
8dc0: 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70  TE_DEBUG.  if( p
8dd0: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3d  Out->pScopyFrom=
8de0: 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f 70  =0 ) pOut->pScop
8df0: 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23 65  yFrom = pIn1;.#e
8e00: 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ndif.  break;.}.
8e10: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75  ./* Opcode: Resu
8e20: 6c 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20  ltRow P1 P2 * * 
8e30: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
8e40: 6f 75 74 70 75 74 3d 72 5b 50 31 40 50 32 5d 0a  output=r[P1@P2].
8e50: 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
8e60: 65 72 73 20 50 31 20 74 68 72 6f 75 67 68 20 50  ers P1 through P
8e70: 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61  1+P2-1 contain a
8e80: 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a   single row of.*
8e90: 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20  * results. This 
8ea0: 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 74 68  opcode causes th
8eb0: 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  e sqlite3_step()
8ec0: 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61   call to termina
8ed0: 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51  te.** with an SQ
8ee0: 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20  LITE_ROW return 
8ef0: 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74 73  code and it sets
8f00: 20 75 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f   up the sqlite3_
8f10: 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72  stmt.** structur
8f20: 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63  e to provide acc
8f30: 65 73 73 20 74 6f 20 74 68 65 20 72 5b 50 31 5d  ess to the r[P1]
8f40: 2e 2e 72 5b 50 31 2b 50 32 2d 31 5d 20 76 61 6c  ..r[P1+P2-1] val
8f50: 75 65 73 20 61 73 0a 2a 2a 20 74 68 65 20 72 65  ues as.** the re
8f60: 73 75 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73  sult row..*/.cas
8f70: 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20  e OP_ResultRow: 
8f80: 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20  {.  Mem *pMem;. 
8f90: 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74   int i;.  assert
8fa0: 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d  ( p->nResColumn=
8fb0: 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73  =pOp->p2 );.  as
8fc0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
8fd0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
8fe0: 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70  ->p1+pOp->p2<=(p
8ff0: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
9000: 72 29 2b 31 20 29 3b 0a 0a 23 69 66 6e 64 65 66  r)+1 );..#ifndef
9010: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
9020: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
9030: 20 2f 2a 20 52 75 6e 20 74 68 65 20 70 72 6f 67   /* Run the prog
9040: 72 65 73 73 20 63 6f 75 6e 74 65 72 20 6a 75 73  ress counter jus
9050: 74 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  t before returni
9060: 6e 67 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64  ng..  */.  if( d
9070: 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 0a  b->xProgress!=0.
9080: 20 20 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e     && nVmStep>=n
9090: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 0a 20 20  ProgressLimit.  
90a0: 20 26 26 20 64 62 2d 3e 78 50 72 6f 67 72 65 73   && db->xProgres
90b0: 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41  s(db->pProgressA
90c0: 72 67 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20  rg)!=0.  ){.    
90d0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  rc = SQLITE_INTE
90e0: 52 52 55 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20  RRUPT;.    goto 
90f0: 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
9100: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  .  }.#endif..  /
9110: 2a 20 49 66 20 74 68 69 73 20 73 74 61 74 65 6d  * If this statem
9120: 65 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65 64  ent has violated
9130: 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69   immediate forei
9140: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
9150: 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20  ts, do.  ** not 
9160: 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  return the numbe
9170: 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66 69  r of rows modifi
9180: 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52  ed. And do not R
9190: 45 4c 45 41 53 45 20 74 68 65 20 73 74 61 74 65  ELEASE the state
91a0: 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61  ment.  ** transa
91b0: 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20  ction. It needs 
91c0: 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
91d0: 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c  k.  */.  if( SQL
91e0: 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71  ITE_OK!=(rc = sq
91f0: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b  lite3VdbeCheckFk
9200: 28 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 61  (p, 0)) ){.    a
9210: 73 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67 73  ssert( db->flags
9220: 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77  &SQLITE_CountRow
9230: 73 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  s );.    assert(
9240: 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72   p->usesStmtJour
9250: 6e 61 6c 20 29 3b 0a 20 20 20 20 62 72 65 61 6b  nal );.    break
9260: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74  ;.  }..  /* If t
9270: 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  he SQLITE_CountR
9280: 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65 74 20  ows flag is set 
9290: 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73  in sqlite3.flags
92a0: 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a   mask, then .  *
92b0: 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73  * DML statements
92c0: 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63   invoke this opc
92d0: 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74 68  ode to return th
92e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
92f0: 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20   .  ** modified 
9300: 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69  to the user. Thi
9310: 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61  s is the only wa
9320: 79 20 74 68 61 74 20 61 20 56 4d 20 74 68 61 74  y that a VM that
9330: 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74  .  ** opens a st
9340: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
9350: 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74  ion may invoke t
9360: 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a  his opcode..  **
9370: 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20 74 68  .  ** In case th
9380: 69 73 20 69 73 20 73 75 63 68 20 61 20 73 74 61  is is such a sta
9390: 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e  tement, close an
93a0: 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  y statement tran
93b0: 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65  saction.  ** ope
93c0: 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d 20 62  ned by this VM b
93d0: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20  efore returning 
93e0: 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 75  control to the u
93f0: 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 6f 0a  ser. This is to.
9400: 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61 74    ** ensure that
9410: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
9420: 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 77 61  actions are alwa
9430: 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f  ys nested, not o
9440: 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a  verlapping..  **
9450: 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73 74 61   If the open sta
9460: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
9470: 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64  on is not closed
9480: 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68 65 20   here, then the 
9490: 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74  user.  ** may st
94a0: 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20 74 68  ep another VM th
94b0: 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e  at opens its own
94c0: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
94d0: 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a  action. This.  *
94e0: 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f 76  * may lead to ov
94f0: 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74 65 6d  erlapping statem
9500: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ent transactions
9510: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  ..  **.  ** The 
9520: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
9530: 63 74 69 6f 6e 20 69 73 20 6e 65 76 65 72 20 61  ction is never a
9540: 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73   top-level trans
9550: 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20  action.  Hence. 
9560: 20 2a 2a 20 74 68 65 20 52 45 4c 45 41 53 45 20   ** the RELEASE 
9570: 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e  call below can n
9580: 65 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a  ever fail..  */.
9590: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53 74    assert( p->iSt
95a0: 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62  atement==0 || db
95b0: 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43  ->flags&SQLITE_C
95c0: 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72 63  ountRows );.  rc
95d0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 6c   = sqlite3VdbeCl
95e0: 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c 20  oseStatement(p, 
95f0: 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
9600: 45 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28  E);.  if( NEVER(
9610: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29  rc!=SQLITE_OK) )
9620: 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  {.    break;.  }
9630: 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74  ..  /* Invalidat
9640: 65 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20  e all ephemeral 
9650: 63 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65  cursor row cache
9660: 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43  s */.  p->cacheC
9670: 74 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74  tr = (p->cacheCt
9680: 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20  r + 2)|1;..  /* 
9690: 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 72 65  Make sure the re
96a0: 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72  sults of the cur
96b0: 72 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30  rent row are \00
96c0: 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a  0 terminated.  *
96d0: 2a 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73  * and have an as
96e0: 73 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68  signed type.  Th
96f0: 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 64 65  e results are de
9700: 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61  -ephemeralized a
9710: 73 0a 20 20 2a 2a 20 61 20 73 69 64 65 20 65 66  s.  ** a side ef
9720: 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65  fect..  */.  pMe
9730: 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65  m = p->pResultSe
9740: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
9750: 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  1];.  for(i=0; i
9760: 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a  <pOp->p2; i++){.
9770: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
9780: 73 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29  sValid(&pMem[i])
9790: 20 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65   );.    Deepheme
97a0: 72 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29  ralize(&pMem[i])
97b0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
97c0: 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d  Mem[i].flags & M
97d0: 45 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20  EM_Ephem)==0.   
97e0: 20 20 20 20 20 20 20 20 20 7c 7c 20 28 70 4d 65           || (pMe
97f0: 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45  m[i].flags & (ME
9800: 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29  M_Str|MEM_Blob))
9810: 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  ==0 );.    sqlit
9820: 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d  e3VdbeMemNulTerm
9830: 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b  inate(&pMem[i]);
9840: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
9850: 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 26 70 4d  MemStoreType(&pM
9860: 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49  em[i]);.    REGI
9870: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
9880: 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b  p1+i, &pMem[i]);
9890: 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d  .  }.  if( db->m
98a0: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f  allocFailed ) go
98b0: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a  to no_mem;..  /*
98c0: 20 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52   Return SQLITE_R
98d0: 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20  OW.  */.  p->pc 
98e0: 3d 20 70 63 20 2b 20 31 3b 0a 20 20 72 63 20 3d  = pc + 1;.  rc =
98f0: 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67   SQLITE_ROW;.  g
9900: 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
9910: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
9920: 6f 6e 63 61 74 20 50 31 20 50 32 20 50 33 20 2a  oncat P1 P2 P3 *
9930: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
9940: 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31  r[P3]=r[P2]+r[P1
9950: 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20  ].**.** Add the 
9960: 74 65 78 74 20 69 6e 20 72 65 67 69 73 74 65 72  text in register
9970: 20 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64   P1 onto the end
9980: 20 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a   of the text in.
9990: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 20 61  ** register P2 a
99a0: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
99b0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
99c0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
99d0: 20 74 68 65 20 50 31 20 6f 72 20 50 32 20 74 65   the P1 or P2 te
99e0: 78 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e  xt are NULL then
99f0: 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50   store NULL in P
9a00: 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20  3..**.**   P3 = 
9a10: 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49  P2 || P1.**.** I
9a20: 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72  t is illegal for
9a30: 20 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65   P1 and P3 to be
9a40: 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74   the same regist
9a50: 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a  er. Sometimes,.*
9a60: 2a 20 69 66 20 50 33 20 69 73 20 74 68 65 20 73  * if P3 is the s
9a70: 61 6d 65 20 72 65 67 69 73 74 65 72 20 61 73 20  ame register as 
9a80: 50 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e  P2, the implemen
9a90: 74 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a  tation is able.*
9aa0: 2a 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d  * to avoid a mem
9ab0: 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  cpy()..*/.case O
9ac0: 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20  P_Concat: {     
9ad0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
9ae0: 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c   TK_CONCAT, in1,
9af0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
9b00: 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49  i64 nByte;..  pI
9b10: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
9b20: 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  p1];.  pIn2 = &a
9b30: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
9b40: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
9b50: 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
9b60: 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20   pIn1!=pOut );. 
9b70: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
9b80: 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29  s | pIn2->flags)
9b90: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
9ba0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
9bb0: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
9bc0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
9bd0: 20 69 66 28 20 45 78 70 61 6e 64 42 6c 6f 62 28   if( ExpandBlob(
9be0: 70 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64 42  pIn1) || ExpandB
9bf0: 6c 6f 62 28 70 49 6e 32 29 20 29 20 67 6f 74 6f  lob(pIn2) ) goto
9c00: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e   no_mem;.  Strin
9c10: 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64  gify(pIn1, encod
9c20: 69 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67 69 66  ing);.  Stringif
9c30: 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67  y(pIn2, encoding
9c40: 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e  );.  nByte = pIn
9c50: 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a  1->n + pIn2->n;.
9c60: 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e    if( nByte>db->
9c70: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
9c80: 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
9c90: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
9ca0: 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70  .  }.  MemSetTyp
9cb0: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
9cc0: 53 74 72 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  Str);.  if( sqli
9cd0: 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
9ce0: 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b  Out, (int)nByte+
9cf0: 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29  2, pOut==pIn2) )
9d00: 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
9d10: 6d 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 75  m;.  }.  if( pOu
9d20: 74 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d  t!=pIn2 ){.    m
9d30: 65 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70  emcpy(pOut->z, p
9d40: 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29  In2->z, pIn2->n)
9d50: 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26  ;.  }.  memcpy(&
9d60: 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d  pOut->z[pIn2->n]
9d70: 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d  , pIn1->z, pIn1-
9d80: 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e  >n);.  pOut->z[n
9d90: 42 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d  Byte]=0;.  pOut-
9da0: 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b  >z[nByte+1] = 0;
9db0: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c  .  pOut->flags |
9dc0: 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f  = MEM_Term;.  pO
9dd0: 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79  ut->n = (int)nBy
9de0: 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  te;.  pOut->enc 
9df0: 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50  = encoding;.  UP
9e00: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
9e10: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
9e20: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
9e30: 41 64 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  Add P1 P2 P3 * *
9e40: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
9e50: 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d  [P3]=r[P1]+r[P2]
9e60: 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76  .**.** Add the v
9e70: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
9e80: 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P1 to the value
9e90: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
9ea0: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
9eb0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
9ec0: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
9ed0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
9ee0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
9ef0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
9f00: 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50  code: Multiply P
9f10: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
9f20: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d  ynopsis:  r[P3]=
9f30: 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a  r[P1]*r[P2].**.*
9f40: 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68  *.** Multiply th
9f50: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
9f60: 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61  ter P1 by the va
9f70: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9f80: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
9f90: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
9fa0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
9fb0: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
9fc0: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
9fd0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
9fe0: 20 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63   Opcode: Subtrac
9ff0: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
a000: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
a010: 33 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a  3]=r[P2]-r[P1].*
a020: 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68  *.** Subtract th
a030: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
a040: 74 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20  ter P1 from the 
a050: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
a060: 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72  r P2.** and stor
a070: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
a080: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
a090: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
a0a0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
a0b0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
a0c0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64  /* Opcode: Divid
a0d0: 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
a0e0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
a0f0: 33 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a  3]=r[P2]/r[P1].*
a100: 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20  *.** Divide the 
a110: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
a120: 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75  r P1 by the valu
a130: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
a140: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
a150: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
a160: 73 74 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50  ster P3 (P3=P2/P
a170: 31 29 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65  1). If the value
a180: 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72   in .** register
a190: 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P1 is zero, the
a1a0: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
a1b0: 4e 55 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20  NULL. If either 
a1c0: 69 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c  input is .** NUL
a1d0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
a1e0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
a1f0: 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50  ode: Remainder P
a200: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
a210: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d  ynopsis:  r[P3]=
a220: 72 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P2]%r[P1].**.*
a230: 2a 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65  * Compute the re
a240: 6d 61 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e  mainder after in
a250: 74 65 67 65 72 20 72 65 67 69 73 74 65 72 20 50  teger register P
a260: 32 20 69 73 20 64 69 76 69 64 65 64 20 62 79 20  2 is divided by 
a270: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20  .** register P1 
a280: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
a290: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
a2a0: 20 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20   P3. .** If the 
a2b0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
a2c0: 72 20 50 31 20 69 73 20 7a 65 72 6f 20 74 68 65  r P1 is zero the
a2d0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
a2e0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70  .** If either op
a2f0: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74  erand is NULL, t
a300: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
a310: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64  L..*/.case OP_Ad
a320: 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d:              
a330: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
a340: 54 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e  TK_PLUS, in1, in
a350: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
a360: 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20  OP_Subtract:    
a370: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
a380: 65 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69  e as TK_MINUS, i
a390: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
a3a0: 0a 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c  .case OP_Multipl
a3b0: 79 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y:              
a3c0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54  /* same as TK_ST
a3d0: 41 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  AR, in1, in2, ou
a3e0: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69  t3 */.case OP_Di
a3f0: 76 69 64 65 3a 20 20 20 20 20 20 20 20 20 20 20  vide:           
a400: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
a410: 54 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69  TK_SLASH, in1, i
a420: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
a430: 20 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b   OP_Remainder: {
a440: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
a450: 6d 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e  me as TK_REM, in
a460: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
a470: 20 20 63 68 61 72 20 62 49 6e 74 69 6e 74 3b 20    char bIntint; 
a480: 20 20 2f 2a 20 53 74 61 72 74 65 64 20 6f 75 74    /* Started out
a490: 20 61 73 20 74 77 6f 20 69 6e 74 65 67 65 72 20   as two integer 
a4a0: 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20 69 6e  operands */.  in
a4b0: 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a  t flags;      /*
a4c0: 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20   Combined MEM_* 
a4d0: 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20  flags from both 
a4e0: 69 6e 70 75 74 73 20 2a 2f 0a 20 20 69 36 34 20  inputs */.  i64 
a4f0: 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  iA;         /* I
a500: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20  nteger value of 
a510: 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  left operand */.
a520: 20 20 69 36 34 20 69 42 3b 20 20 20 20 20 20 20    i64 iB;       
a530: 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c    /* Integer val
a540: 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72  ue of right oper
a550: 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20  and */.  double 
a560: 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c  rA;      /* Real
a570: 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f   value of left o
a580: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62  perand */.  doub
a590: 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a 20 52  le rB;      /* R
a5a0: 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 69 67  eal value of rig
a5b0: 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20  ht operand */.. 
a5c0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
a5d0: 70 2d 3e 70 31 5d 3b 0a 20 20 61 70 70 6c 79 4e  p->p1];.  applyN
a5e0: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
a5f0: 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26  In1);.  pIn2 = &
a600: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
a610: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
a620: 69 6e 69 74 79 28 70 49 6e 32 29 3b 0a 20 20 70  inity(pIn2);.  p
a630: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
a640: 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20  >p3];.  flags = 
a650: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
a660: 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28  n2->flags;.  if(
a670: 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75   (flags & MEM_Nu
a680: 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72  ll)!=0 ) goto ar
a690: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
a6a0: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28  is_null;.  if( (
a6b0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70 49  pIn1->flags & pI
a6c0: 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
a6d0: 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29 7b  Int)==MEM_Int ){
a6e0: 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e  .    iA = pIn1->
a6f0: 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70 49  u.i;.    iB = pI
a700: 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e  n2->u.i;.    bIn
a710: 74 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73 77  tint = 1;.    sw
a720: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
a730: 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  e ){.      case 
a740: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 69 66  OP_Add:       if
a750: 28 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36  ( sqlite3AddInt6
a760: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
a770: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
a780: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
a790: 53 75 62 74 72 61 63 74 3a 20 20 69 66 28 20 73  Subtract:  if( s
a7a0: 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 26  qlite3SubInt64(&
a7b0: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
a7c0: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
a7d0: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c       case OP_Mul
a7e0: 74 69 70 6c 79 3a 20 20 69 66 28 20 73 71 6c 69  tiply:  if( sqli
a7f0: 74 65 33 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c  te3MulInt64(&iB,
a800: 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  iA) ) goto fp_ma
a810: 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  th;  break;.    
a820: 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65    case OP_Divide
a830: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  : {.        if( 
a840: 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  iA==0 ) goto ari
a850: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
a860: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
a870: 69 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42  if( iA==-1 && iB
a880: 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  ==SMALLEST_INT64
a890: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
a8a0: 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69  .        iB /= i
a8b0: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
a8c0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
a8d0: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
a8e0: 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67     if( iA==0 ) g
a8f0: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
a900: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
a910: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d         if( iA==-
a920: 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20  1 ) iA = 1;.    
a930: 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20      iB %= iA;.  
a940: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
a950: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
a960: 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20  Out->u.i = iB;. 
a970: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
a980: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
a990: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62  ;.  }else{.    b
a9a0: 49 6e 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d  Intint = 0;.fp_m
a9b0: 61 74 68 3a 0a 20 20 20 20 72 41 20 3d 20 73 71  ath:.    rA = sq
a9c0: 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c  lite3VdbeRealVal
a9d0: 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42  ue(pIn1);.    rB
a9e0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
a9f0: 61 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20  alValue(pIn2);. 
aa00: 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e     switch( pOp->
aa10: 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20  opcode ){.      
aa20: 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20  case OP_Add:    
aa30: 20 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20       rB += rA;  
aa40: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
aa50: 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61    case OP_Subtra
aa60: 63 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b  ct:    rB -= rA;
aa70: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
aa80: 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74      case OP_Mult
aa90: 69 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72  iply:    rB *= r
aaa0: 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  A;       break;.
aab0: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69        case OP_Di
aac0: 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20  vide: {.        
aad0: 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20  /* (double)0 In 
aae0: 63 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f  case of SQLITE_O
aaf0: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
ab00: 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20  NT... */.       
ab10: 20 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65   if( rA==(double
ab20: 29 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  )0 ) goto arithm
ab30: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
ab40: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20  ull;.        rB 
ab50: 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62  /= rA;.        b
ab60: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
ab70: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20      default: {. 
ab80: 20 20 20 20 20 20 20 69 41 20 3d 20 28 69 36 34         iA = (i64
ab90: 29 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20  )rA;.        iB 
aba0: 3d 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20  = (i64)rB;.     
abb0: 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67     if( iA==0 ) g
abc0: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
abd0: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
abe0: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d         if( iA==-
abf0: 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20  1 ) iA = 1;.    
ac00: 20 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65      rB = (double
ac10: 29 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20  )(iB % iA);.    
ac20: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
ac30: 20 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20   }.    }.#ifdef 
ac40: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
ac50: 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70  TING_POINT.    p
ac60: 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20  Out->u.i = rB;. 
ac70: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
ac80: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
ac90: 3b 0a 23 65 6c 73 65 0a 20 20 20 20 69 66 28 20  ;.#else.    if( 
aca0: 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29  sqlite3IsNaN(rB)
acb0: 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
acc0: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
acd0: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a  _is_null;.    }.
ace0: 20 20 20 20 70 4f 75 74 2d 3e 72 20 3d 20 72 42      pOut->r = rB
acf0: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
ad00: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52  Flag(pOut, MEM_R
ad10: 65 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 66  eal);.    if( (f
ad20: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
ad30: 3d 3d 30 20 26 26 20 21 62 49 6e 74 69 6e 74 20  ==0 && !bIntint 
ad40: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
ad50: 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e  VdbeIntegerAffin
ad60: 69 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d  ity(pOut);.    }
ad70: 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
ad80: 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63  eak;..arithmetic
ad90: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a  _result_is_null:
ada0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
adb0: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
adc0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
add0: 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50  pcode: CollSeq P
ade0: 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50  1 * * P4.**.** P
adf0: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
ae00: 6f 20 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75  o a CollSeq stru
ae10: 63 74 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20  ct. If the next 
ae20: 63 61 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66  call to a user f
ae30: 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67  unction.** or ag
ae40: 67 72 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71  gregate calls sq
ae50: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
ae60: 53 65 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c  Seq(), this coll
ae70: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77  ation sequence w
ae80: 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e  ill.** be return
ae90: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
aea0: 20 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e   by the built-in
aeb0: 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e   min(), max() an
aec0: 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75  d nullif().** fu
aed0: 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49  nctions..**.** I
aee0: 66 20 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P1 is not zero
aef0: 2c 20 74 68 65 6e 20 69 74 20 69 73 20 61 20 72  , then it is a r
af00: 65 67 69 73 74 65 72 20 74 68 61 74 20 61 20 73  egister that a s
af10: 75 62 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20  ubsequent min() 
af20: 6f 72 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72  or.** max() aggr
af30: 65 67 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74  egate will set t
af40: 6f 20 31 20 69 66 20 74 68 65 20 63 75 72 72 65  o 1 if the curre
af50: 6e 74 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68  nt row is not th
af60: 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20  e minimum or.** 
af70: 6d 61 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31  maximum.  The P1
af80: 20 72 65 67 69 73 74 65 72 20 69 73 20 69 6e 69   register is ini
af90: 74 69 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79  tialized to 0 by
afa0: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
afb0: 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  n..**.** The int
afc0: 65 72 66 61 63 65 20 75 73 65 64 20 62 79 20 74  erface used by t
afd0: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
afe0: 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65  n of the aforeme
aff0: 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e  ntioned function
b000: 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65  s.** to retrieve
b010: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73   the collation s
b020: 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20 74  equence set by t
b030: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f  his opcode is no
b040: 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70  t available.** p
b050: 75 62 6c 69 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f  ublicly, only to
b060: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 73 20   user functions 
b070: 64 65 66 69 6e 65 64 20 69 6e 20 66 75 6e 63 2e  defined in func.
b080: 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  c..*/.case OP_Co
b090: 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72  llSeq: {.  asser
b0a0: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
b0b0: 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20  P4_COLLSEQ );.  
b0c0: 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  if( pOp->p1 ){. 
b0d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
b0e0: 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b  mSetInt64(&aMem[
b0f0: 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20 20  pOp->p1], 0);.  
b100: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
b110: 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f   Opcode: Functio
b120: 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  n P1 P2 P3 P4 P5
b130: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
b140: 50 33 5d 3d 66 75 6e 63 28 72 5b 50 32 40 50 35  P3]=func(r[P2@P5
b150: 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20  ]).**.** Invoke 
b160: 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  a user function 
b170: 28 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72  (P4 is a pointer
b180: 20 74 6f 20 61 20 46 75 6e 63 74 69 6f 6e 20 73   to a Function s
b190: 74 72 75 63 74 75 72 65 20 74 68 61 74 0a 2a 2a  tructure that.**
b1a0: 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e   defines the fun
b1b0: 63 74 69 6f 6e 29 20 77 69 74 68 20 50 35 20 61  ction) with P5 a
b1c0: 72 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66  rguments taken f
b1d0: 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
b1e0: 61 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72  and.** successor
b1f0: 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f  s.  The result o
b200: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69  f the function i
b210: 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
b220: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69  ster P3..** Regi
b230: 73 74 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74  ster P3 must not
b240: 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66   be one of the f
b250: 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a  unction inputs..
b260: 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32  **.** P1 is a 32
b270: 2d 62 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64  -bit bitmask ind
b280: 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20  icating whether 
b290: 6f 72 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75  or not each argu
b2a0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20  ment to the .** 
b2b0: 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74  function was det
b2c0: 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f  ermined to be co
b2d0: 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c  nstant at compil
b2e0: 65 20 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66  e time. If the f
b2f0: 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
b300: 20 77 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68   was constant th
b310: 65 6e 20 62 69 74 20 30 20 6f 66 20 50 31 20 69  en bit 0 of P1 i
b320: 73 20 73 65 74 2e 20 54 68 69 73 20 69 73 20 75  s set. This is u
b330: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
b340: 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61  .** whether meta
b350: 20 64 61 74 61 20 61 73 73 6f 63 69 61 74 65 64   data associated
b360: 20 77 69 74 68 20 61 20 75 73 65 72 20 66 75 6e   with a user fun
b370: 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75  ction argument u
b380: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69  sing the.** sqli
b390: 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28  te3_set_auxdata(
b3a0: 29 20 41 50 49 20 6d 61 79 20 62 65 20 73 61 66  ) API may be saf
b3b0: 65 6c 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74  ely retained unt
b3c0: 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69  il the next.** i
b3d0: 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69  nvocation of thi
b3e0: 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  s opcode..**.** 
b3f0: 53 65 65 20 61 6c 73 6f 3a 20 41 67 67 53 74 65  See also: AggSte
b400: 70 20 61 6e 64 20 41 67 67 46 69 6e 61 6c 0a 2a  p and AggFinal.*
b410: 2f 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69  /.case OP_Functi
b420: 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  on: {.  int i;. 
b430: 20 4d 65 6d 20 2a 70 41 72 67 3b 0a 20 20 73 71   Mem *pArg;.  sq
b440: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74  lite3_context ct
b450: 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  x;.  sqlite3_val
b460: 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 20 20 69 6e  ue **apVal;.  in
b470: 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d  t n;..  n = pOp-
b480: 3e 70 35 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70  >p5;.  apVal = p
b490: 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72  ->apArg;.  asser
b4a0: 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30  t( apVal || n==0
b4b0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
b4c0: 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
b4d0: 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
b4e0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f  nCursor) );.  pO
b4f0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
b500: 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
b510: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
b520: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d  ;..  assert( n==
b530: 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20  0 || (pOp->p2>0 
b540: 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70  && pOp->p2+n<=(p
b550: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
b560: 72 29 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72  r)+1) );.  asser
b570: 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e  t( pOp->p3<pOp->
b580: 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70  p2 || pOp->p3>=p
b590: 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41  Op->p2+n );.  pA
b5a0: 72 67 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  rg = &aMem[pOp->
b5b0: 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  p2];.  for(i=0; 
b5c0: 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b  i<n; i++, pArg++
b5d0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ){.    assert( m
b5e0: 65 6d 49 73 56 61 6c 69 64 28 70 41 72 67 29 20  emIsValid(pArg) 
b5f0: 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20  );.    apVal[i] 
b600: 3d 20 70 41 72 67 3b 0a 20 20 20 20 44 65 65 70  = pArg;.    Deep
b610: 68 65 6d 65 72 61 6c 69 7a 65 28 70 41 72 67 29  hemeralize(pArg)
b620: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
b630: 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70 41  eMemStoreType(pA
b640: 72 67 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  rg);.    REGISTE
b650: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b  R_TRACE(pOp->p2+
b660: 69 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20  i, pArg);.  }.. 
b670: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
b680: 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46  type==P4_FUNCDEF
b690: 20 29 3b 0a 20 20 63 74 78 2e 70 46 75 6e 63 20   );.  ctx.pFunc 
b6a0: 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b  = pOp->p4.pFunc;
b6b0: 0a 20 20 63 74 78 2e 69 4f 70 20 3d 20 70 63 3b  .  ctx.iOp = pc;
b6c0: 0a 20 20 63 74 78 2e 70 56 64 62 65 20 3d 20 70  .  ctx.pVdbe = p
b6d0: 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70  ;..  /* The outp
b6e0: 75 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65  ut cell may alre
b6f0: 61 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65  ady have a buffe
b700: 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76  r allocated. Mov
b710: 65 0a 20 20 2a 2a 20 74 68 65 20 70 6f 69 6e 74  e.  ** the point
b720: 65 72 20 74 6f 20 63 74 78 2e 73 20 73 6f 20 69  er to ctx.s so i
b730: 6e 20 63 61 73 65 20 74 68 65 20 75 73 65 72 2d  n case the user-
b740: 66 75 6e 63 74 69 6f 6e 20 63 61 6e 20 75 73 65  function can use
b750: 0a 20 20 2a 2a 20 74 68 65 20 61 6c 72 65 61 64  .  ** the alread
b760: 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66  y allocated buff
b770: 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c  er instead of al
b780: 6c 6f 63 61 74 69 6e 67 20 61 20 6e 65 77 20 6f  locating a new o
b790: 6e 65 2e 0a 20 20 2a 2f 0a 20 20 6d 65 6d 63 70  ne..  */.  memcp
b7a0: 79 28 26 63 74 78 2e 73 2c 20 70 4f 75 74 2c 20  y(&ctx.s, pOut, 
b7b0: 73 69 7a 65 6f 66 28 4d 65 6d 29 29 3b 0a 20 20  sizeof(Mem));.  
b7c0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
b7d0: 4d 5f 4e 75 6c 6c 3b 0a 20 20 70 4f 75 74 2d 3e  M_Null;.  pOut->
b7e0: 78 44 65 6c 20 3d 20 30 3b 0a 20 20 70 4f 75 74  xDel = 0;.  pOut
b7f0: 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20  ->zMalloc = 0;. 
b800: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
b810: 26 63 74 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c  &ctx.s, MEM_Null
b820: 29 3b 0a 0a 20 20 63 74 78 2e 66 45 72 72 6f 72  );..  ctx.fError
b830: 4f 72 41 75 78 20 3d 20 30 3b 0a 20 20 69 66 28  OrAux = 0;.  if(
b840: 20 63 74 78 2e 70 46 75 6e 63 2d 3e 66 75 6e 63   ctx.pFunc->func
b850: 46 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46  Flags & SQLITE_F
b860: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a  UNC_NEEDCOLL ){.
b870: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e      assert( pOp>
b880: 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72  aOp );.    asser
b890: 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70  t( pOp[-1].p4typ
b8a0: 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b  e==P4_COLLSEQ );
b8b0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
b8c0: 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  [-1].opcode==OP_
b8d0: 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 63  CollSeq );.    c
b8e0: 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d  tx.pColl = pOp[-
b8f0: 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d  1].p4.pColl;.  }
b900: 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64  .  db->lastRowid
b910: 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20   = lastRowid;.  
b920: 28 2a 63 74 78 2e 70 46 75 6e 63 2d 3e 78 46 75  (*ctx.pFunc->xFu
b930: 6e 63 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56  nc)(&ctx, n, apV
b940: 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32  al); /* IMP: R-2
b950: 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20  4505-23230 */.  
b960: 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e  lastRowid = db->
b970: 6c 61 73 74 52 6f 77 69 64 3b 0a 0a 20 20 69 66  lastRowid;..  if
b980: 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
b990: 65 64 20 29 7b 0a 20 20 20 20 2f 2a 20 45 76 65  ed ){.    /* Eve
b9a0: 6e 20 74 68 6f 75 67 68 20 61 20 6d 61 6c 6c 6f  n though a mallo
b9b0: 63 28 29 20 68 61 73 20 66 61 69 6c 65 64 2c 20  c() has failed, 
b9c0: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
b9d0: 6f 6e 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a  on of the.    **
b9e0: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d   user function m
b9f0: 61 79 20 68 61 76 65 20 63 61 6c 6c 65 64 20 61  ay have called a
ba00: 6e 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  n sqlite3_result
ba10: 5f 58 58 58 28 29 20 66 75 6e 63 74 69 6f 6e 0a  _XXX() function.
ba20: 20 20 20 20 2a 2a 20 74 6f 20 72 65 74 75 72 6e      ** to return
ba30: 20 61 20 76 61 6c 75 65 2e 20 54 68 65 20 66 6f   a value. The fo
ba40: 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 72 65 6c  llowing call rel
ba50: 65 61 73 65 73 20 61 6e 79 20 72 65 73 6f 75 72  eases any resour
ba60: 63 65 73 0a 20 20 20 20 2a 2a 20 61 73 73 6f 63  ces.    ** assoc
ba70: 69 61 74 65 64 20 77 69 74 68 20 73 75 63 68 20  iated with such 
ba80: 61 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a  a value..    */.
ba90: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
baa0: 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73  emRelease(&ctx.s
bab0: 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  );.    goto no_m
bac0: 65 6d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66  em;.  }..  /* If
bad0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65   the function re
bae0: 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c  turned an error,
baf0: 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74   throw an except
bb00: 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74 78  ion */.  if( ctx
bb10: 2e 66 45 72 72 6f 72 4f 72 41 75 78 20 29 7b 0a  .fErrorOrAux ){.
bb20: 20 20 20 20 69 66 28 20 63 74 78 2e 69 73 45 72      if( ctx.isEr
bb30: 72 6f 72 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ror ){.      sql
bb40: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
bb50: 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
bb60: 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
bb70: 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29  ue_text(&ctx.s))
bb80: 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 63 74 78  ;.      rc = ctx
bb90: 2e 69 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  .isError;.    }.
bba0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 44      sqlite3VdbeD
bbb0: 65 6c 65 74 65 41 75 78 44 61 74 61 28 70 2c 20  eleteAuxData(p, 
bbc0: 70 63 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  pc, pOp->p1);.  
bbd0: 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65  }..  /* Copy the
bbe0: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66   result of the f
bbf0: 75 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67  unction into reg
bc00: 69 73 74 65 72 20 50 33 20 2a 2f 0a 20 20 73 71  ister P3 */.  sq
bc10: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
bc20: 6e 63 6f 64 69 6e 67 28 26 63 74 78 2e 73 2c 20  ncoding(&ctx.s, 
bc30: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 61 73 73  encoding);.  ass
bc40: 65 72 74 28 20 70 4f 75 74 2d 3e 66 6c 61 67 73  ert( pOut->flags
bc50: 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20  ==MEM_Null );.  
bc60: 6d 65 6d 63 70 79 28 70 4f 75 74 2c 20 26 63 74  memcpy(pOut, &ct
bc70: 78 2e 73 2c 20 73 69 7a 65 6f 66 28 4d 65 6d 29  x.s, sizeof(Mem)
bc80: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
bc90: 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4f  VdbeMemTooBig(pO
bca0: 75 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ut) ){.    goto 
bcb0: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 23 69  too_big;.  }..#i
bcc0: 66 20 30 0a 20 20 2f 2a 20 54 68 65 20 61 70 70  f 0.  /* The app
bcd0: 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
bce0: 6e 20 68 61 73 20 64 6f 6e 65 20 73 6f 6d 65 74  n has done somet
bcf0: 68 69 6e 67 20 74 68 61 74 20 61 73 20 63 61 75  hing that as cau
bd00: 73 65 64 20 74 68 69 73 0a 20 20 2a 2a 20 73 74  sed this.  ** st
bd10: 61 74 65 6d 65 6e 74 20 74 6f 20 65 78 70 69 72  atement to expir
bd20: 65 2e 20 20 28 50 65 72 68 61 70 73 20 74 68 65  e.  (Perhaps the
bd30: 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 65 64   function called
bd40: 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 0a   sqlite3_exec().
bd50: 20 20 2a 2a 20 77 69 74 68 20 61 20 43 52 45 41    ** with a CREA
bd60: 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  TE TABLE stateme
bd70: 6e 74 2e 29 0a 20 20 2a 2f 0a 20 20 69 66 28 20  nt.).  */.  if( 
bd80: 70 2d 3e 65 78 70 69 72 65 64 20 29 20 72 63 20  p->expired ) rc 
bd90: 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a  = SQLITE_ABORT;.
bda0: 23 65 6e 64 69 66 0a 0a 20 20 52 45 47 49 53 54  #endif..  REGIST
bdb0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
bdc0: 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54  , pOut);.  UPDAT
bdd0: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
bde0: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
bdf0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74  ../* Opcode: Bit
be00: 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  And P1 P2 P3 * *
be10: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
be20: 5b 50 33 5d 3d 72 5b 50 31 5d 26 72 5b 50 32 5d  [P3]=r[P1]&r[P2]
be30: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
be40: 62 69 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20  bit-wise AND of 
be50: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
be60: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32  gister P1 and P2
be70: 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68   and.** store th
be80: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
be90: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
bea0: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
beb0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
bec0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
bed0: 70 63 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20  pcode: BitOr P1 
bee0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
bef0: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
bf00: 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  P1]|r[P2].**.** 
bf10: 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73  Take the bit-wis
bf20: 65 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75  e OR of the valu
bf30: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
bf40: 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
bf50: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
bf60: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
bf70: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
bf80: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
bf90: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
bfa0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
bfb0: 68 69 66 74 4c 65 66 74 20 50 31 20 50 32 20 50  hiftLeft P1 P2 P
bfc0: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
bfd0: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3c  s:  r[P3]=r[P2]<
bfe0: 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69  <r[P1].**.** Shi
bff0: 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  ft the integer v
c000: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
c010: 20 50 32 20 74 6f 20 74 68 65 20 6c 65 66 74 20   P2 to the left 
c020: 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72  by the.** number
c030: 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69   of bits specifi
c040: 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65  ed by the intege
c050: 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  r in register P1
c060: 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72  ..** Store the r
c070: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
c080: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
c090: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
c0a0: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
c0b0: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
c0c0: 64 65 3a 20 53 68 69 66 74 52 69 67 68 74 20 50  de: ShiftRight P
c0d0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
c0e0: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d  ynopsis:  r[P3]=
c0f0: 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a  r[P2]>>r[P1].**.
c100: 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74  ** Shift the int
c110: 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65  eger value in re
c120: 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65  gister P2 to the
c130: 20 72 69 67 68 74 20 62 79 20 74 68 65 0a 2a 2a   right by the.**
c140: 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
c150: 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
c160: 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69   integer in regi
c170: 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72  ster P1..** Stor
c180: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
c190: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
c1a0: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
c1b0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
c1c0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
c1d0: 63 61 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20  case OP_BitAnd: 
c1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1f0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49  /* same as TK_BI
c200: 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  TAND, in1, in2, 
c210: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
c220: 42 69 74 4f 72 3a 20 20 20 20 20 20 20 20 20 20  BitOr:          
c230: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
c240: 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69 6e 31  as TK_BITOR, in1
c250: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
c260: 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65 66 74  ase OP_ShiftLeft
c270: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
c280: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 53 48  * same as TK_LSH
c290: 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  IFT, in1, in2, o
c2a0: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
c2b0: 68 69 66 74 52 69 67 68 74 3a 20 7b 20 20 20 20  hiftRight: {    
c2c0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
c2d0: 73 20 54 4b 5f 52 53 48 49 46 54 2c 20 69 6e 31  s TK_RSHIFT, in1
c2e0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
c2f0: 20 69 36 34 20 69 41 3b 0a 20 20 75 36 34 20 75   i64 iA;.  u64 u
c300: 41 3b 0a 20 20 69 36 34 20 69 42 3b 0a 20 20 75  A;.  i64 iB;.  u
c310: 38 20 6f 70 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  8 op;..  pIn1 = 
c320: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
c330: 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
c340: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20  Op->p2];.  pOut 
c350: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
c360: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
c370: 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61  lags | pIn2->fla
c380: 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  gs) & MEM_Null )
c390: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
c3a0: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
c3b0: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
c3c0: 7d 0a 20 20 69 41 20 3d 20 73 71 6c 69 74 65 33  }.  iA = sqlite3
c3d0: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
c3e0: 32 29 3b 0a 20 20 69 42 20 3d 20 73 71 6c 69 74  2);.  iB = sqlit
c3f0: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
c400: 49 6e 31 29 3b 0a 20 20 6f 70 20 3d 20 70 4f 70  In1);.  op = pOp
c410: 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 69 66 28 20  ->opcode;.  if( 
c420: 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e 64 20 29 7b  op==OP_BitAnd ){
c430: 0a 20 20 20 20 69 41 20 26 3d 20 69 42 3b 0a 20  .    iA &= iB;. 
c440: 20 7d 65 6c 73 65 20 69 66 28 20 6f 70 3d 3d 4f   }else if( op==O
c450: 50 5f 42 69 74 4f 72 20 29 7b 0a 20 20 20 20 69  P_BitOr ){.    i
c460: 41 20 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65  A |= iB;.  }else
c470: 20 69 66 28 20 69 42 21 3d 30 20 29 7b 0a 20 20   if( iB!=0 ){.  
c480: 20 20 61 73 73 65 72 74 28 20 6f 70 3d 3d 4f 50    assert( op==OP
c490: 5f 53 68 69 66 74 52 69 67 68 74 20 7c 7c 20 6f  _ShiftRight || o
c4a0: 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20  p==OP_ShiftLeft 
c4b0: 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 73 68  );..    /* If sh
c4c0: 69 66 74 69 6e 67 20 62 79 20 61 20 6e 65 67 61  ifting by a nega
c4d0: 74 69 76 65 20 61 6d 6f 75 6e 74 2c 20 73 68 69  tive amount, shi
c4e0: 66 74 20 69 6e 20 74 68 65 20 6f 74 68 65 72 20  ft in the other 
c4f0: 64 69 72 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 20  direction */.   
c500: 20 69 66 28 20 69 42 3c 30 20 29 7b 0a 20 20 20   if( iB<0 ){.   
c510: 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 68     assert( OP_Sh
c520: 69 66 74 52 69 67 68 74 3d 3d 4f 50 5f 53 68 69  iftRight==OP_Shi
c530: 66 74 4c 65 66 74 2b 31 20 29 3b 0a 20 20 20 20  ftLeft+1 );.    
c540: 20 20 6f 70 20 3d 20 32 2a 4f 50 5f 53 68 69 66    op = 2*OP_Shif
c550: 74 4c 65 66 74 20 2b 20 31 20 2d 20 6f 70 3b 0a  tLeft + 1 - op;.
c560: 20 20 20 20 20 20 69 42 20 3d 20 69 42 3e 28 2d        iB = iB>(-
c570: 36 34 29 20 3f 20 2d 69 42 20 3a 20 36 34 3b 0a  64) ? -iB : 64;.
c580: 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 69      }..    if( i
c590: 42 3e 3d 36 34 20 29 7b 0a 20 20 20 20 20 20 69  B>=64 ){.      i
c5a0: 41 20 3d 20 28 69 41 3e 3d 30 20 7c 7c 20 6f 70  A = (iA>=0 || op
c5b0: 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 29 20  ==OP_ShiftLeft) 
c5c0: 3f 20 30 20 3a 20 2d 31 3b 0a 20 20 20 20 7d 65  ? 0 : -1;.    }e
c5d0: 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d 63 70  lse{.      memcp
c5e0: 79 28 26 75 41 2c 20 26 69 41 2c 20 73 69 7a 65  y(&uA, &iA, size
c5f0: 6f 66 28 75 41 29 29 3b 0a 20 20 20 20 20 20 69  of(uA));.      i
c600: 66 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c  f( op==OP_ShiftL
c610: 65 66 74 20 29 7b 0a 20 20 20 20 20 20 20 20 75  eft ){.        u
c620: 41 20 3c 3c 3d 20 69 42 3b 0a 20 20 20 20 20 20  A <<= iB;.      
c630: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 75  }else{.        u
c640: 41 20 3e 3e 3d 20 69 42 3b 0a 20 20 20 20 20 20  A >>= iB;.      
c650: 20 20 2f 2a 20 53 69 67 6e 2d 65 78 74 65 6e 64    /* Sign-extend
c660: 20 6f 6e 20 61 20 72 69 67 68 74 20 73 68 69 66   on a right shif
c670: 74 20 6f 66 20 61 20 6e 65 67 61 74 69 76 65 20  t of a negative 
c680: 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20 20  number */.      
c690: 20 20 69 66 28 20 69 41 3c 30 20 29 20 75 41 20    if( iA<0 ) uA 
c6a0: 7c 3d 20 28 28 28 28 75 36 34 29 30 78 66 66 66  |= ((((u64)0xfff
c6b0: 66 66 66 66 66 29 3c 3c 33 32 29 7c 30 78 66 66  fffff)<<32)|0xff
c6c0: 66 66 66 66 66 66 29 20 3c 3c 20 28 36 34 2d 69  ffffff) << (64-i
c6d0: 42 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  B);.      }.    
c6e0: 20 20 6d 65 6d 63 70 79 28 26 69 41 2c 20 26 75    memcpy(&iA, &u
c6f0: 41 2c 20 73 69 7a 65 6f 66 28 69 41 29 29 3b 0a  A, sizeof(iA));.
c700: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74      }.  }.  pOut
c710: 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a 20 20 4d 65  ->u.i = iA;.  Me
c720: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
c730: 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62  t, MEM_Int);.  b
c740: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
c750: 64 65 3a 20 41 64 64 49 6d 6d 20 20 50 31 20 50  de: AddImm  P1 P
c760: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
c770: 73 69 73 3a 20 20 72 5b 50 31 5d 3d 72 5b 50 31  sis:  r[P1]=r[P1
c780: 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20  ]+P2.** .** Add 
c790: 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32 20  the constant P2 
c7a0: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  to the value in 
c7b0: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
c7c0: 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  The result is al
c7d0: 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72 2e  ways an integer.
c7e0: 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65 20  .**.** To force 
c7f0: 61 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f 20  any register to 
c800: 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 6a  be an integer, j
c810: 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63 61  ust add 0..*/.ca
c820: 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b 20  se OP_AddImm: { 
c830: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
c840: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
c850: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
c860: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
c870: 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71 6c  (p, pIn1);.  sql
c880: 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
c890: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70  erify(pIn1);.  p
c8a0: 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d  In1->u.i += pOp-
c8b0: 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  >p2;.  break;.}.
c8c0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73 74  ./* Opcode: Must
c8d0: 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a 20  BeInt P1 P2 * * 
c8e0: 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20 74  *.** .** Force t
c8f0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
c900: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e  ster P1 to be an
c910: 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68   integer.  If th
c920: 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
c930: 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67   is not an integ
c940: 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65  er and cannot be
c950: 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
c960: 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77 69  an integer.** wi
c970: 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73 2c  thout data loss,
c980: 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
c990: 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f 72  iately to P2, or
c9a0: 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61 69   if P2==0.** rai
c9b0: 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53  se an SQLITE_MIS
c9c0: 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e 2e  MATCH exception.
c9d0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73 74  .*/.case OP_Must
c9e0: 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  BeInt: {        
c9f0: 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
ca00: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
ca10: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
ca20: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
ca30: 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
ca40: 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
ca50: 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f  ty(pIn1, SQLITE_
ca60: 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63  AFF_NUMERIC, enc
ca70: 6f 64 69 6e 67 29 3b 0a 20 20 20 20 56 64 62 65  oding);.    Vdbe
ca80: 42 72 61 6e 63 68 54 61 6b 65 6e 28 28 70 49 6e  BranchTaken((pIn
ca90: 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
caa0: 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66  )==0, 2);.    if
cab0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
cac0: 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a   MEM_Int)==0 ){.
cad0: 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70        if( pOp->p
cae0: 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  2==0 ){.        
caf0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 4d  rc = SQLITE_MISM
cb00: 41 54 43 48 3b 0a 20 20 20 20 20 20 20 20 67 6f  ATCH;.        go
cb10: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
cb20: 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 65 6c  error;.      }el
cb30: 73 65 7b 0a 20 20 20 20 20 20 20 20 70 63 20 3d  se{.        pc =
cb40: 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
cb50: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
cb60: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
cb70: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
cb80: 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pIn1, MEM_Int);.
cb90: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
cba0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
cbb0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f  FLOATING_POINT./
cbc0: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41 66  * Opcode: RealAf
cbd0: 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a 20  finity P1 * * * 
cbe0: 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69 73  *.**.** If regis
cbf0: 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e 20  ter P1 holds an 
cc00: 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74 20  integer convert 
cc10: 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61 6c  it to a real val
cc20: 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ue..**.** This o
cc30: 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 77 68  pcode is used wh
cc40: 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69 6e  en extracting in
cc50: 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61  formation from a
cc60: 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a 20   column that.** 
cc70: 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69 74  has REAL affinit
cc80: 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e 20  y.  Such column 
cc90: 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c 6c  values may still
cca0: 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a 2a   be stored as.**
ccb0: 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20 73   integers, for s
ccc0: 70 61 63 65 20 65 66 66 69 63 69 65 6e 63 79 2c  pace efficiency,
ccd0: 20 62 75 74 20 61 66 74 65 72 20 65 78 74 72 61   but after extra
cce0: 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74 68  ction we want th
ccf0: 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f 6e  em.** to have on
cd00: 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e  ly a real value.
cd10: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c  .*/.case OP_Real
cd20: 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20 20  Affinity: {     
cd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cd40: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
cd50: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
cd60: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
cd70: 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20  s & MEM_Int ){. 
cd80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
cd90: 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a  mRealify(pIn1);.
cda0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
cdb0: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
cdc0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a  QLITE_OMIT_CAST.
cdd0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 54 65 78  /* Opcode: ToTex
cde0: 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  t P1 * * * *.**.
cdf0: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
ce00: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
ce10: 31 20 74 6f 20 62 65 20 74 65 78 74 2e 0a 2a 2a  1 to be text..**
ce20: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73   If the value is
ce30: 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72   numeric, conver
ce40: 74 20 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67  t it to a string
ce50: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71   using the.** eq
ce60: 75 69 76 61 6c 65 6e 74 20 6f 66 20 73 70 72 69  uivalent of spri
ce70: 6e 74 66 28 29 2e 20 20 42 6c 6f 62 20 76 61 6c  ntf().  Blob val
ce80: 75 65 73 20 61 72 65 20 75 6e 63 68 61 6e 67 65  ues are unchange
ce90: 64 20 61 6e 64 0a 2a 2a 20 61 72 65 20 61 66 74  d and.** are aft
cea0: 65 72 77 61 72 64 73 20 73 69 6d 70 6c 79 20 69  erwards simply i
ceb0: 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 74 65  nterpreted as te
cec0: 78 74 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  xt..**.** A NULL
ced0: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
cee0: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
cef0: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
cf00: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
cf10: 20 4f 50 5f 54 6f 54 65 78 74 3a 20 7b 20 20 20   OP_ToText: {   
cf20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cf30: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
cf40: 54 45 58 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  TEXT, in1 */.  p
cf50: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
cf60: 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p1];.  memAbout
cf70: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31  ToChange(p, pIn1
cf80: 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  );.  if( pIn1->f
cf90: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
cfa0: 29 20 62 72 65 61 6b 3b 0a 20 20 61 73 73 65 72  ) break;.  asser
cfb0: 74 28 20 4d 45 4d 5f 53 74 72 3d 3d 28 4d 45 4d  t( MEM_Str==(MEM
cfc0: 5f 42 6c 6f 62 3e 3e 33 29 20 29 3b 0a 20 20 70  _Blob>>3) );.  p
cfd0: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 3d 20 28 70  In1->flags |= (p
cfe0: 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 42  In1->flags&MEM_B
cff0: 6c 6f 62 29 3e 3e 33 3b 0a 20 20 61 70 70 6c 79  lob)>>3;.  apply
d000: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53  Affinity(pIn1, S
d010: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20  QLITE_AFF_TEXT, 
d020: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 72 63 20  encoding);.  rc 
d030: 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  = ExpandBlob(pIn
d040: 31 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1);.  assert( pI
d050: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
d060: 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f  Str || db->mallo
d070: 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 70 49 6e  cFailed );.  pIn
d080: 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45  1->flags &= ~(ME
d090: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d  M_Int|MEM_Real|M
d0a0: 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 5a 65 72 6f  EM_Blob|MEM_Zero
d0b0: 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
d0c0: 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a  BLOBSIZE(pIn1);.
d0d0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
d0e0: 70 63 6f 64 65 3a 20 54 6f 42 6c 6f 62 20 50 31  pcode: ToBlob P1
d0f0: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46   * * * *.**.** F
d100: 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  orce the value i
d110: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
d120: 20 62 65 20 61 20 42 4c 4f 42 2e 0a 2a 2a 20 49   be a BLOB..** I
d130: 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 6e  f the value is n
d140: 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72 74 20  umeric, convert 
d150: 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20 66  it to a string f
d160: 69 72 73 74 2e 0a 2a 2a 20 53 74 72 69 6e 67 73  irst..** Strings
d170: 20 61 72 65 20 73 69 6d 70 6c 79 20 72 65 69 6e   are simply rein
d180: 74 65 72 70 72 65 74 65 64 20 61 73 20 62 6c 6f  terpreted as blo
d190: 62 73 20 77 69 74 68 20 6e 6f 20 63 68 61 6e 67  bs with no chang
d1a0: 65 0a 2a 2a 20 74 6f 20 74 68 65 20 75 6e 64 65  e.** to the unde
d1b0: 72 6c 79 69 6e 67 20 64 61 74 61 2e 0a 2a 2a 0a  rlying data..**.
d1c0: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
d1d0: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
d1e0: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
d1f0: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
d200: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 42  ..*/.case OP_ToB
d210: 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20  lob: {          
d220: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
d230: 61 73 20 54 4b 5f 54 4f 5f 42 4c 4f 42 2c 20 69  as TK_TO_BLOB, i
d240: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
d250: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
d260: 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
d270: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72   & MEM_Null ) br
d280: 65 61 6b 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  eak;.  if( (pIn1
d290: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
d2a0: 6f 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70  ob)==0 ){.    ap
d2b0: 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31  plyAffinity(pIn1
d2c0: 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  , SQLITE_AFF_TEX
d2d0: 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  T, encoding);.  
d2e0: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
d2f0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20  flags & MEM_Str 
d300: 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  || db->mallocFai
d310: 6c 65 64 20 29 3b 0a 20 20 20 20 4d 65 6d 53 65  led );.    MemSe
d320: 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20  tTypeFlag(pIn1, 
d330: 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 65 6c  MEM_Blob);.  }el
d340: 73 65 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 66 6c  se{.    pIn1->fl
d350: 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 54 79 70  ags &= ~(MEM_Typ
d360: 65 4d 61 73 6b 26 7e 4d 45 4d 5f 42 6c 6f 62 29  eMask&~MEM_Blob)
d370: 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d  ;.  }.  UPDATE_M
d380: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31  AX_BLOBSIZE(pIn1
d390: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
d3a0: 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 4e 75 6d 65  * Opcode: ToNume
d3b0: 72 69 63 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ric P1 * * * *.*
d3c0: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
d3d0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
d3e0: 20 50 31 20 74 6f 20 62 65 20 6e 75 6d 65 72 69   P1 to be numeri
d3f0: 63 20 28 65 69 74 68 65 72 20 61 6e 0a 2a 2a 20  c (either an.** 
d400: 69 6e 74 65 67 65 72 20 6f 72 20 61 20 66 6c 6f  integer or a flo
d410: 61 74 69 6e 67 2d 70 6f 69 6e 74 20 6e 75 6d 62  ating-point numb
d420: 65 72 2e 29 0a 2a 2a 20 49 66 20 74 68 65 20 76  er.).** If the v
d430: 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72 20  alue is text or 
d440: 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e  blob, try to con
d450: 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20 75 73  vert it to an us
d460: 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76  ing the.** equiv
d470: 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20  alent of atoi() 
d480: 6f 72 20 61 74 6f 66 28 29 20 61 6e 64 20 73 74  or atof() and st
d490: 6f 72 65 20 30 20 69 66 20 6e 6f 20 73 75 63 68  ore 0 if no such
d4a0: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 0a 2a 2a 20   conversion .** 
d4b0: 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a  is possible..**.
d4c0: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
d4d0: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
d4e0: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
d4f0: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
d500: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 4e  ..*/.case OP_ToN
d510: 75 6d 65 72 69 63 3a 20 7b 20 20 20 20 20 20 20  umeric: {       
d520: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
d530: 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 4e 55 4d 45  me as TK_TO_NUME
d540: 52 49 43 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  RIC, in1 */.  pI
d550: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
d560: 70 31 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p1];.  sqlite3Vd
d570: 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79 28 70 49  beMemNumerify(pI
d580: 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  n1);.  break;.}.
d590: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
d5a0: 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f  _OMIT_CAST */../
d5b0: 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 49 6e 74 20  * Opcode: ToInt 
d5c0: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
d5d0: 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65   Force the value
d5e0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
d5f0: 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
d600: 2e 20 20 49 66 0a 2a 2a 20 54 68 65 20 76 61 6c  .  If.** The val
d610: 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  ue is currently 
d620: 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20 64  a real number, d
d630: 72 6f 70 20 69 74 73 20 66 72 61 63 74 69 6f 6e  rop its fraction
d640: 61 6c 20 70 61 72 74 2e 0a 2a 2a 20 49 66 20 74  al part..** If t
d650: 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78 74  he value is text
d660: 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f   or blob, try to
d670: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
d680: 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67 20  n integer using 
d690: 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e  the.** equivalen
d6a0: 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64 20  t of atoi() and 
d6b0: 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73 75  store 0 if no su
d6c0: 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73  ch conversion is
d6d0: 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a   possible..**.**
d6e0: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
d6f0: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
d700: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
d710: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
d720: 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 49 6e 74  */.case OP_ToInt
d730: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
d740: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
d750: 54 4b 5f 54 4f 5f 49 4e 54 2c 20 69 6e 31 20 2a  TK_TO_INT, in1 *
d760: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
d770: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
d780: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
d790: 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
d7a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
d7b0: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
d7c0: 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
d7d0: 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .}..#if !defined
d7e0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53  (SQLITE_OMIT_CAS
d7f0: 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
d800: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
d810: 49 4e 47 5f 50 4f 49 4e 54 29 0a 2f 2a 20 4f 70  ING_POINT)./* Op
d820: 63 6f 64 65 3a 20 54 6f 52 65 61 6c 20 50 31 20  code: ToReal P1 
d830: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f  * * * *.**.** Fo
d840: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
d850: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
d860: 62 65 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f  be a floating po
d870: 69 6e 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20 49  int number..** I
d880: 66 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 63  f The value is c
d890: 75 72 72 65 6e 74 6c 79 20 61 6e 20 69 6e 74 65  urrently an inte
d8a0: 67 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 2e  ger, convert it.
d8b0: 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
d8c0: 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62   is text or blob
d8d0: 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  , try to convert
d8e0: 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65   it to an intege
d8f0: 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65  r using the.** e
d900: 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f  quivalent of ato
d910: 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 2e  i() and store 0.
d920: 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e  0 if no such con
d930: 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69  version is possi
d940: 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  ble..**.** A NUL
d950: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
d960: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
d970: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
d980: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
d990: 65 20 4f 50 5f 54 6f 52 65 61 6c 3a 20 7b 20 20  e OP_ToReal: {  
d9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9b0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f  /* same as TK_TO
d9c0: 5f 52 45 41 4c 2c 20 69 6e 31 20 2a 2f 0a 20 20  _REAL, in1 */.  
d9d0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
d9e0: 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p1];.  memAbou
d9f0: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
da00: 31 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1);.  if( (pIn1-
da10: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
da20: 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  l)==0 ){.    sql
da30: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
da40: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
da50: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
da60: 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
da70: 54 45 5f 4f 4d 49 54 5f 43 41 53 54 29 20 26 26  TE_OMIT_CAST) &&
da80: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
da90: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
daa0: 4f 49 4e 54 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  OINT) */../* Opc
dab0: 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50 33  ode: Lt P1 P2 P3
dac0: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
dad0: 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c 72 5b 50  is: if r[P1]<r[P
dae0: 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  3] goto P2.**.**
daf0: 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c   Compare the val
db00: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
db10: 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72  P1 and P3.  If r
db20: 65 67 28 50 33 29 3c 72 65 67 28 50 31 29 20 74  eg(P3)<reg(P1) t
db30: 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61  hen.** jump to a
db40: 64 64 72 65 73 73 20 50 32 2e 20 20 0a 2a 2a 0a  ddress P2.  .**.
db50: 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  ** If the SQLITE
db60: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20  _JUMPIFNULL bit 
db70: 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64  of P5 is set and
db80: 20 65 69 74 68 65 72 20 72 65 67 28 50 31 29 20   either reg(P1) 
db90: 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69 73  or.** reg(P3) is
dba0: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20   NULL then take 
dbb0: 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20 74 68  the jump.  If th
dbc0: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
dbd0: 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20 63  ULL .** bit is c
dbe0: 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c 20 74  lear then fall t
dbf0: 68 72 6f 75 67 68 20 69 66 20 65 69 74 68 65 72  hrough if either
dc00: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
dc10: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ..**.** The SQLI
dc20: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74  TE_AFF_MASK port
dc30: 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62  ion of P5 must b
dc40: 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68  e an affinity ch
dc50: 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c  aracter -.** SQL
dc60: 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51  ITE_AFF_TEXT, SQ
dc70: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
dc80: 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
dc90: 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  An attempt is ma
dca0: 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65  de .** to coerce
dcb0: 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63   both inputs acc
dcc0: 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61  ording to this a
dcd0: 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74  ffinity before t
dce0: 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  he.** comparison
dcf0: 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65   is made. If the
dd00: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
dd10: 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e   is 0x00, then n
dd20: 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69  umeric.** affini
dd30: 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65  ty is used. Note
dd40: 20 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69   that the affini
dd50: 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61  ty conversions a
dd60: 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63  re stored.** bac
dd70: 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74  k into the input
dd80: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
dd90: 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f  d P3.  So this o
dda0: 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a  pcode can cause.
ddb0: 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68  ** persistent ch
ddc0: 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65  anges to registe
ddd0: 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a  rs P1 and P3..**
dde0: 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e  .** Once any con
ddf0: 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61  versions have ta
de00: 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e  ken place, and n
de10: 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20  either value is 
de20: 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61  NULL, .** the va
de30: 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65  lues are compare
de40: 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  d. If both value
de50: 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e  s are blobs then
de60: 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20   memcmp() is.** 
de70: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
de80: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
de90: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
dea0: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
deb0: 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68  .** are text, th
dec0: 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  en the appropria
ded0: 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  te collating fun
dee0: 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20  ction specified 
def0: 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65  in.** P4 is  use
df00: 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70  d to do the comp
df10: 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69  arison.  If P4 i
df20: 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20  s not specified 
df30: 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29  then.** memcmp()
df40: 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70   is used to comp
df50: 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e  are text string.
df60: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
df70: 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c   are.** numeric,
df80: 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20   then a numeric 
df90: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73  comparison is us
dfa0: 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76  ed. If the two v
dfb0: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20  alues.** are of 
dfc0: 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c  different types,
dfd0: 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72   then numbers ar
dfe0: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
dff0: 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67  s than.** string
e000: 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72  s and strings ar
e010: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
e020: 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a  s than blobs..**
e030: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
e040: 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20 6f 66  E_STOREP2 bit of
e050: 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e   P5 is set, then
e060: 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49   do not jump.  I
e070: 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65  nstead,.** store
e080: 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c   a boolean resul
e090: 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f 72 20  t (either 0, or 
e0a0: 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72  1, or NULL) in r
e0b0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
e0c0: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
e0d0: 4e 55 4c 4c 45 51 20 62 69 74 20 69 73 20 73 65  NULLEQ bit is se
e0e0: 74 20 69 6e 20 50 35 2c 20 74 68 65 6e 20 4e 55  t in P5, then NU
e0f0: 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  LL values are co
e100: 6e 73 69 64 65 72 65 64 0a 2a 2a 20 65 71 75 61  nsidered.** equa
e110: 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68 65 72  l to one another
e120: 2c 20 70 72 6f 76 69 64 65 64 20 74 68 61 74 20  , provided that 
e130: 74 68 65 79 20 64 6f 20 6e 6f 74 20 68 61 76 65  they do not have
e140: 20 74 68 65 69 72 20 4d 45 4d 5f 43 6c 65 61 72   their MEM_Clear
e150: 65 64 0a 2a 2a 20 62 69 74 20 73 65 74 2e 0a 2a  ed.** bit set..*
e160: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20  /./* Opcode: Ne 
e170: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
e180: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
e190: 5b 50 31 5d 21 3d 72 5b 50 33 5d 20 67 6f 74 6f  [P1]!=r[P3] goto
e1a0: 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P2.**.** This w
e1b0: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
e1c0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
e1d0: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
e1e0: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
e1f0: 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e   the operands in
e200: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
e210: 64 20 50 33 20 61 72 65 20 6e 6f 74 20 65 71 75  d P3 are not equ
e220: 61 6c 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  al.  See the Lt 
e230: 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64  opcode for.** ad
e240: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
e250: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53  tion..**.** If S
e260: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
e270: 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74  set in P5 then t
e280: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d  he result of com
e290: 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79  parison is alway
e2a0: 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65  s either.** true
e2b0: 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73   or false and is
e2c0: 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66   never NULL.  If
e2d0: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
e2e0: 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  re NULL then the
e2f0: 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f   result.** of co
e300: 6d 70 61 72 69 73 6f 6e 20 69 73 20 66 61 6c 73  mparison is fals
e310: 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70  e.  If either op
e320: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
e330: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
e340: 20 74 72 75 65 2e 0a 2a 2a 20 49 66 20 6e 65 69   true..** If nei
e350: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
e360: 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20  NULL the result 
e370: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69  is the same as i
e380: 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a  t would be if.**
e390: 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c   the SQLITE_NULL
e3a0: 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69  EQ flag were omi
e3b0: 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f  tted from P5..*/
e3c0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50  ./* Opcode: Eq P
e3d0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
e3e0: 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
e3f0: 50 31 5d 3d 3d 72 5b 50 33 5d 20 67 6f 74 6f 20  P1]==r[P3] goto 
e400: 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P2.**.** This wo
e410: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
e420: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
e430: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
e440: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
e450: 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20  the operands in 
e460: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
e470: 20 50 33 20 61 72 65 20 65 71 75 61 6c 2e 0a 2a   P3 are equal..*
e480: 2a 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63  * See the Lt opc
e490: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
e4a0: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
e4b0: 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f  **.** If SQLITE_
e4c0: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e  NULLEQ is set in
e4d0: 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73   P5 then the res
e4e0: 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  ult of compariso
e4f0: 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68  n is always eith
e500: 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61  er.** true or fa
e510: 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72  lse and is never
e520: 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20   NULL.  If both 
e530: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
e540: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
e550: 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73  t.** of comparis
e560: 6f 6e 20 69 73 20 74 72 75 65 2e 20 20 49 66 20  on is true.  If 
e570: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
e580: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
e590: 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65 2e  result is false.
e5a0: 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f  .** If neither o
e5b0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
e5c0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65  he result is the
e5d0: 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c   same as it woul
e5e0: 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53  d be if.** the S
e5f0: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61  QLITE_NULLEQ fla
e600: 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66  g were omitted f
e610: 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70  rom P5..*/./* Op
e620: 63 6f 64 65 3a 20 4c 65 20 50 31 20 50 32 20 50  code: Le P1 P2 P
e630: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
e640: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c 3d 72  sis: if r[P1]<=r
e650: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
e660: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
e670: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
e680: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
e690: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
e6a0: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
e6b0: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
e6c0: 72 20 50 33 20 69 73 20 6c 65 73 73 20 74 68 61  r P3 is less tha
e6d0: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
e6e0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
e6f0: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
e700: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
e710: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
e720: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nformation..*/./
e730: 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20  * Opcode: Gt P1 
e740: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
e750: 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
e760: 5d 3e 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a  ]>r[P3] goto P2.
e770: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
e780: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
e790: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
e7a0: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
e7b0: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
e7c0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
e7d0: 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74  ster P3 is great
e7e0: 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e 74  er than the cont
e7f0: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
e800: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
e810: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
e820: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
e830: 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
e840: 64 65 3a 20 47 65 20 50 31 20 50 32 20 50 33 20  de: Ge P1 P2 P3 
e850: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
e860: 73 3a 20 69 66 20 72 5b 50 31 5d 3e 3d 72 5b 50  s: if r[P1]>=r[P
e870: 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  3] goto P2.**.**
e880: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
e890: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
e8a0: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
e8b0: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
e8c0: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
e8d0: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
e8e0: 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
e8f0: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
e900: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
e910: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
e920: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
e930: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
e940: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
e950: 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 20  case OP_Eq:     
e960: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
e970: 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70  e as TK_EQ, jump
e980: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
e990: 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20  se OP_Ne:       
e9a0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
e9b0: 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20  as TK_NE, jump, 
e9c0: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
e9d0: 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20 20   OP_Lt:         
e9e0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
e9f0: 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e   TK_LT, jump, in
ea00: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
ea10: 50 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20 20  P_Le:           
ea20: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
ea30: 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_LE, jump, in1,
ea40: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
ea50: 47 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Gt:             
ea60: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
ea70: 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  GT, jump, in1, i
ea80: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65  n3 */.case OP_Ge
ea90: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
eaa0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 45  /* same as TK_GE
eab0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
eac0: 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20   */.  int res;  
ead0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
eae0: 75 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  ult of the compa
eaf0: 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67  rison of pIn1 ag
eb00: 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20  ainst pIn3 */.  
eb10: 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20  char affinity;  
eb20: 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20      /* Affinity 
eb30: 74 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d 70 61  to use for compa
eb40: 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66  rison */.  u16 f
eb50: 6c 61 67 73 31 3b 20 20 20 20 20 20 20 20 20 2f  lags1;         /
eb60: 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61  * Copy of initia
eb70: 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d  l value of pIn1-
eb80: 3e 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31 36 20  >flags */.  u16 
eb90: 66 6c 61 67 73 33 3b 20 20 20 20 20 20 20 20 20  flags3;         
eba0: 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69  /* Copy of initi
ebb0: 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 33  al value of pIn3
ebc0: 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49  ->flags */..  pI
ebd0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
ebe0: 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  p1];.  pIn3 = &a
ebf0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
ec00: 66 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66  flags1 = pIn1->f
ec10: 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d  lags;.  flags3 =
ec20: 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn3->flags;.  
ec30: 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20 66 6c  if( (flags1 | fl
ec40: 61 67 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29  ags3)&MEM_Null )
ec50: 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  {.    /* One or 
ec60: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
ec70: 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 69 66  e NULL */.    if
ec80: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
ec90: 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20 20 20  TE_NULLEQ ){.   
eca0: 20 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f     /* If SQLITE_
ecb0: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 28 77  NULLEQ is set (w
ecc0: 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79 20 68  hich will only h
ecd0: 61 70 70 65 6e 20 69 66 20 74 68 65 20 6f 70 65  appen if the ope
ece0: 72 61 74 6f 72 20 69 73 0a 20 20 20 20 20 20 2a  rator is.      *
ecf0: 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f 4e 65  * OP_Eq or OP_Ne
ed00: 29 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  ) then take the 
ed10: 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65 70 65  jump or not depe
ed20: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
ed30: 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e 6f 74  .      ** or not
ed40: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
ed50: 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20 20 2a  re null..      *
ed60: 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
ed70: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
ed80: 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  Eq || pOp->opcod
ed90: 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20  e==OP_Ne );.    
eda0: 20 20 61 73 73 65 72 74 28 20 28 66 6c 61 67 73    assert( (flags
edb0: 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65 64 29  1 & MEM_Cleared)
edc0: 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28  ==0 );.      if(
edd0: 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 4e 75 6c   (flags1&MEM_Nul
ede0: 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20  l)!=0.       && 
edf0: 28 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c  (flags3&MEM_Null
ee00: 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28  )!=0.       && (
ee10: 66 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65 61 72  flags3&MEM_Clear
ee20: 65 64 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a  ed)==0.      ){.
ee30: 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b          res = 0;
ee40: 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 61 72 65    /* Results are
ee50: 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20   equal */.      
ee60: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72  }else{.        r
ee70: 65 73 20 3d 20 31 3b 20 20 2f 2a 20 52 65 73 75  es = 1;  /* Resu
ee80: 6c 74 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61  lts are not equa
ee90: 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20  l */.      }.   
eea0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a   }else{.      /*
eeb0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
eec0: 73 20 63 6c 65 61 72 20 61 6e 64 20 61 74 20 6c  s clear and at l
eed0: 65 61 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64  east one operand
eee0: 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20   is NULL,.      
eef0: 2a 2a 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  ** then the resu
ef00: 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55 4c  lt is always NUL
ef10: 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 20  L..      ** The 
ef20: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
ef30: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
ef40: 49 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73 65  IFNULL bit is se
ef50: 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  t..      */.    
ef60: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
ef70: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29  SQLITE_STOREP2 )
ef80: 7b 0a 20 20 20 20 20 20 20 20 70 4f 75 74 20 3d  {.        pOut =
ef90: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
efa0: 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54  .        MemSetT
efb0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
efc0: 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20  M_Null);.       
efd0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
efe0: 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
eff0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
f000: 20 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54       VdbeBranchT
f010: 61 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 20 20 20  aken(2,3);.     
f020: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26     if( pOp->p5 &
f030: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
f040: 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  LL ){.          
f050: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
f060: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
f070: 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
f080: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
f090: 20 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f 70 65    /* Neither ope
f0a0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44  rand is NULL.  D
f0b0: 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  o a comparison. 
f0c0: 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69 74 79 20  */.    affinity 
f0d0: 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  = pOp->p5 & SQLI
f0e0: 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20  TE_AFF_MASK;.   
f0f0: 20 69 66 28 20 61 66 66 69 6e 69 74 79 20 29 7b   if( affinity ){
f100: 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66 69  .      applyAffi
f110: 6e 69 74 79 28 70 49 6e 31 2c 20 61 66 66 69 6e  nity(pIn1, affin
f120: 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  ity, encoding);.
f130: 20 20 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e        applyAffin
f140: 69 74 79 28 70 49 6e 33 2c 20 61 66 66 69 6e 69  ity(pIn3, affini
f150: 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ty, encoding);. 
f160: 20 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c       if( db->mal
f170: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
f180: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 0a   no_mem;.    }..
f190: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
f1a0: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c  >p4type==P4_COLL
f1b0: 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70  SEQ || pOp->p4.p
f1c0: 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20 20 45  Coll==0 );.    E
f1d0: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b  xpandBlob(pIn1);
f1e0: 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28  .    ExpandBlob(
f1f0: 70 49 6e 33 29 3b 0a 20 20 20 20 72 65 73 20 3d  pIn3);.    res =
f200: 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61   sqlite3MemCompa
f210: 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70  re(pIn3, pIn1, p
f220: 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20  Op->p4.pColl);. 
f230: 20 7d 0a 20 20 73 77 69 74 63 68 28 20 70 4f 70   }.  switch( pOp
f240: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20  ->opcode ){.    
f250: 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 72  case OP_Eq:    r
f260: 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20  es = res==0;    
f270: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
f280: 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73 20 3d   OP_Ne:    res =
f290: 20 72 65 73 21 3d 30 3b 20 20 20 20 20 62 72 65   res!=0;     bre
f2a0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
f2b0: 4c 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Lt:    res = res
f2c0: 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  <0;      break;.
f2d0: 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20      case OP_Le: 
f2e0: 20 20 20 72 65 73 20 3d 20 72 65 73 3c 3d 30 3b     res = res<=0;
f2f0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
f300: 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 72  case OP_Gt:    r
f310: 65 73 20 3d 20 72 65 73 3e 30 3b 20 20 20 20 20  es = res>0;     
f320: 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61   break;.    defa
f330: 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73 20 3d  ult:       res =
f340: 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62 72 65   res>=0;     bre
f350: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70  ak;.  }..  if( p
f360: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
f370: 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 70  STOREP2 ){.    p
f380: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
f390: 3e 70 32 5d 3b 0a 20 20 20 20 6d 65 6d 41 62 6f  >p2];.    memAbo
f3a0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
f3b0: 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54  ut);.    MemSetT
f3c0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
f3d0: 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74  M_Int);.    pOut
f3e0: 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20 20  ->u.i = res;.   
f3f0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
f400: 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
f410: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62    }else{.    Vdb
f420: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
f430: 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20  !=0, (pOp->p5 & 
f440: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29 3f 32  SQLITE_NULLEQ)?2
f450: 3a 33 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  :3);.    if( res
f460: 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
f470: 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a  Op->p2-1;.    }.
f480: 20 20 7d 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e    }.  /* Undo an
f490: 79 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62  y changes made b
f4a0: 79 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28  y applyAffinity(
f4b0: 29 20 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72  ) to the input r
f4c0: 65 67 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20 70  egisters. */.  p
f4d0: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49  In1->flags = (pI
f4e0: 6e 31 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54  n1->flags&~MEM_T
f4f0: 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67  ypeMask) | (flag
f500: 73 31 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29  s1&MEM_TypeMask)
f510: 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  ;.  pIn3->flags 
f520: 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26 7e  = (pIn3->flags&~
f530: 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20  MEM_TypeMask) | 
f540: 28 66 6c 61 67 73 33 26 4d 45 4d 5f 54 79 70 65  (flags3&MEM_Type
f550: 4d 61 73 6b 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  Mask);.  break;.
f560: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65  }../* Opcode: Pe
f570: 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20  rmutation * * * 
f580: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74  P4 *.**.** Set t
f590: 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 75  he permutation u
f5a0: 73 65 64 20 62 79 20 74 68 65 20 4f 50 5f 43 6f  sed by the OP_Co
f5b0: 6d 70 61 72 65 20 6f 70 65 72 61 74 6f 72 20 74  mpare operator t
f5c0: 6f 20 62 65 20 74 68 65 20 61 72 72 61 79 0a 2a  o be the array.*
f5d0: 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69 6e  * of integers in
f5e0: 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70   P4..**.** The p
f5f0: 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e  ermutation is on
f600: 6c 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74  ly valid until t
f610: 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61  he next OP_Compa
f620: 72 65 20 74 68 61 74 20 68 61 73 0a 2a 2a 20 74  re that has.** t
f630: 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  he OPFLAG_PERMUT
f640: 45 20 62 69 74 20 73 65 74 20 69 6e 20 50 35 2e  E bit set in P5.
f650: 20 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f   Typically the O
f660: 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68  P_Permutation sh
f670: 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69  ould .** occur i
f680: 6d 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72  mmediately prior
f690: 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61   to the OP_Compa
f6a0: 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  re..*/.case OP_P
f6b0: 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20  ermutation: {.  
f6c0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
f6d0: 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59  ype==P4_INTARRAY
f6e0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
f6f0: 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61 50  p->p4.ai );.  aP
f700: 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34  ermute = pOp->p4
f710: 2e 61 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .ai;.  break;.}.
f720: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70  ./* Opcode: Comp
f730: 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34 20  are P1 P2 P3 P4 
f740: 50 35 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65  P5.**.** Compare
f750: 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f 66 20   two vectors of 
f760: 72 65 67 69 73 74 65 72 73 20 69 6e 20 72 65 67  registers in reg
f770: 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d  (P1)..reg(P1+P3-
f780: 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a  1) (call this.**
f790: 20 76 65 63 74 6f 72 20 22 41 22 29 20 61 6e 64   vector "A") and
f7a0: 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65 67   in reg(P2)..reg
f7b0: 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29 2e  (P2+P3-1) ("B").
f7c0: 20 20 53 61 76 65 20 74 68 65 20 72 65 73 75 6c    Save the resul
f7d0: 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70  t of.** the comp
f7e0: 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20 62  arison for use b
f7f0: 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75  y the next OP_Ju
f800: 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a  mp instruct..**.
f810: 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65  ** If P5 has the
f820: 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
f830: 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68  bit set, then th
f840: 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70 61  e order of compa
f850: 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65  rison is.** dete
f860: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6d 6f  rmined by the mo
f870: 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 50 65 72  st recent OP_Per
f880: 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f  mutation operato
f890: 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50  r.  If the.** OP
f8a0: 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74  FLAG_PERMUTE bit
f8b0: 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20   is clear, then 
f8c0: 72 65 67 69 73 74 65 72 20 61 72 65 20 63 6f 6d  register are com
f8d0: 70 61 72 65 64 20 69 6e 20 73 65 71 75 65 6e 74  pared in sequent
f8e0: 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a  ial.** order..**
f8f0: 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79 49  .** P4 is a KeyI
f900: 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74 68  nfo structure th
f910: 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61  at defines colla
f920: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61  ting sequences a
f930: 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72  nd sort.** order
f940: 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61 72  s for the compar
f950: 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75  ison.  The permu
f960: 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 74  tation applies t
f970: 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f  o registers.** o
f980: 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  nly.  The KeyInf
f990: 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 75  o elements are u
f9a0: 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c 79  sed sequentially
f9b0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70  ..**.** The comp
f9c0: 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72 74  arison is a sort
f9d0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20   comparison, so 
f9e0: 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65 71  NULLs compare eq
f9f0: 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72  ual,.** NULLs ar
fa00: 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d 62  e less than numb
fa10: 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65  ers, numbers are
fa20: 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e   less than strin
fa30: 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e  gs,.** and strin
fa40: 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  gs are less than
fa50: 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20   blobs..*/.case 
fa60: 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20  OP_Compare: {.  
fa70: 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a  int n;.  int i;.
fa80: 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20    int p1;.  int 
fa90: 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49  p2;.  const KeyI
faa0: 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20  nfo *pKeyInfo;. 
fab0: 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c   int idx;.  Coll
fac0: 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f  Seq *pColl;    /
fad0: 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
fae0: 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20 74  ence to use on t
faf0: 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e  his term */.  in
fb00: 74 20 62 52 65 76 3b 20 20 20 20 20 20 20 20 20  t bRev;         
fb10: 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53   /* True for DES
fb20: 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64  CENDING sort ord
fb30: 65 72 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f  er */..  if( (pO
fb40: 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50  p->p5 & OPFLAG_P
fb50: 45 52 4d 55 54 45 29 3d 3d 30 20 29 20 61 50 65  ERMUTE)==0 ) aPe
fb60: 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 6e 20 3d  rmute = 0;.  n =
fb70: 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79   pOp->p3;.  pKey
fb80: 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
fb90: 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72  KeyInfo;.  asser
fba0: 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65  t( n>0 );.  asse
fbb0: 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20  rt( pKeyInfo!=0 
fbc0: 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  );.  p1 = pOp->p
fbd0: 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  1;.  p2 = pOp->p
fbe0: 32 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45  2;.#if SQLITE_DE
fbf0: 42 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75  BUG.  if( aPermu
fc00: 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c  te ){.    int k,
fc10: 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72   mx = 0;.    for
fc20: 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20  (k=0; k<n; k++) 
fc30: 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e  if( aPermute[k]>
fc40: 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75  mx ) mx = aPermu
fc50: 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72  te[k];.    asser
fc60: 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78  t( p1>0 && p1+mx
fc70: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
fc80: 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20  ursor)+1 );.    
fc90: 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20  assert( p2>0 && 
fca0: 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p2+mx<=(p->nMem-
fcb0: 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
fcc0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
fcd0: 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31  sert( p1>0 && p1
fce0: 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  +n<=(p->nMem-p->
fcf0: 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
fd00: 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26    assert( p2>0 &
fd10: 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d  & p2+n<=(p->nMem
fd20: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29  -p->nCursor)+1 )
fd30: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
fd40: 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
fd50: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20    for(i=0; i<n; 
fd60: 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20  i++){.    idx = 
fd70: 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d  aPermute ? aPerm
fd80: 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20  ute[i] : i;.    
fd90: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
fda0: 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  id(&aMem[p1+idx]
fdb0: 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
fdc0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
fdd0: 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20  m[p2+idx]) );.  
fde0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
fdf0: 28 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70  (p1+idx, &aMem[p
fe00: 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47  1+idx]);.    REG
fe10: 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69  ISTER_TRACE(p2+i
fe20: 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78  dx, &aMem[p2+idx
fe30: 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  ]);.    assert( 
fe40: 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  i<pKeyInfo->nFie
fe50: 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20  ld );.    pColl 
fe60: 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c  = pKeyInfo->aCol
fe70: 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d  l[i];.    bRev =
fe80: 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74   pKeyInfo->aSort
fe90: 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43  Order[i];.    iC
fea0: 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65 33  ompare = sqlite3
feb0: 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d  MemCompare(&aMem
fec0: 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b  [p1+idx], &aMem[
fed0: 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b  p2+idx], pColl);
fee0: 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61 72  .    if( iCompar
fef0: 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62  e ){.      if( b
ff00: 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20 3d  Rev ) iCompare =
ff10: 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20   -iCompare;.    
ff20: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
ff30: 20 7d 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20   }.  aPermute = 
ff40: 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
ff50: 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50  * Opcode: Jump P
ff60: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
ff70: 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69 6e  * Jump to the in
ff80: 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64 64  struction at add
ff90: 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72 20  ress P1, P2, or 
ffa0: 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  P3 depending on 
ffb0: 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68  whether.** in th
ffc0: 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50  e most recent OP
ffd0: 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75 63  _Compare instruc
ffe0: 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63 74  tion the P1 vect
fff0: 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61 6e  or was less than
10000 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72  .** equal to, or
10010 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
10020 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65 73  e P2 vector, res
10030 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61  pectively..*/.ca
10040 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20  se OP_Jump: {   
10050 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
10060 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70  p */.  if( iComp
10070 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 70 63 20  are<0 ){.    pc 
10080 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 20 20  = pOp->p1 - 1;  
10090 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
100a0 30 2c 33 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  0,3);.  }else if
100b0 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b  ( iCompare==0 ){
100c0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
100d0 32 20 2d 20 31 3b 20 20 56 64 62 65 42 72 61 6e  2 - 1;  VdbeBran
100e0 63 68 54 61 6b 65 6e 28 31 2c 33 29 3b 0a 20 20  chTaken(1,3);.  
100f0 7d 65 6c 73 65 7b 0a 20 20 20 20 70 63 20 3d 20  }else{.    pc = 
10100 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 20 20 56 64  pOp->p3 - 1;  Vd
10110 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c  beBranchTaken(2,
10120 33 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  3);.  }.  break;
10130 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
10140 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nd P1 P2 P3 * *.
10150 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
10160 33 5d 3d 28 72 5b 50 31 5d 20 26 26 20 72 5b 50  3]=(r[P1] && r[P
10170 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  2]).**.** Take t
10180 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f  he logical AND o
10190 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
101a0 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
101b0 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65   P2 and.** write
101c0 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f   the result into
101d0 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
101e0 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31  .** If either P1
101f0 20 6f 72 20 50 32 20 69 73 20 30 20 28 66 61 6c   or P2 is 0 (fal
10200 73 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73  se) then the res
10210 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69 66  ult is 0 even if
10220 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e  .** the other in
10230 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20  put is NULL.  A 
10240 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72  NULL and true or
10250 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a   two NULLs give.
10260 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74  ** a NULL output
10270 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
10280 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  Or P1 P2 P3 * *.
10290 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
102a0 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20 72 5b 50  3]=(r[P1] || r[P
102b0 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  2]).**.** Take t
102c0 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66  he logical OR of
102d0 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
102e0 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
102f0 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
10300 68 65 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67  he answer in reg
10310 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
10320 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20  If either P1 or 
10330 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74  P2 is nonzero (t
10340 72 75 65 29 20 74 68 65 6e 20 74 68 65 20 72 65  rue) then the re
10350 73 75 6c 74 20 69 73 20 31 20 28 74 72 75 65 29  sult is 1 (true)
10360 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20  .** even if the 
10370 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  other input is N
10380 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64  ULL.  A NULL and
10390 20 66 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55   false or two NU
103a0 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55  LLs.** give a NU
103b0 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61  LL output..*/.ca
103c0 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20  se OP_And:      
103d0 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
103e0 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20  as TK_AND, in1, 
103f0 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
10400 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20  e OP_Or: {      
10410 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
10420 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e  s TK_OR, in1, in
10430 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74  2, out3 */.  int
10440 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20   v1;    /* Left 
10450 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c  operand:  0==FAL
10460 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d  SE, 1==TRUE, 2==
10470 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20  UNKNOWN or NULL 
10480 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20  */.  int v2;    
10490 2f 2a 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64  /* Right operand
104a0 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54  : 0==FALSE, 1==T
104b0 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20  RUE, 2==UNKNOWN 
104c0 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49  or NULL */..  pI
104d0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
104e0 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p1];.  if( pIn1-
104f0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
10500 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b  l ){.    v1 = 2;
10510 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31  .  }else{.    v1
10520 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
10530 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b  tValue(pIn1)!=0;
10540 0a 20 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61  .  }.  pIn2 = &a
10550 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
10560 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20  if( pIn2->flags 
10570 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
10580 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73    v2 = 2;.  }els
10590 65 7b 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69  e{.    v2 = sqli
105a0 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
105b0 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20  pIn2)!=0;.  }.  
105c0 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
105d0 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73  =OP_And ){.    s
105e0 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
105f0 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f  gned char and_lo
10600 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20  gic[] = { 0, 0, 
10610 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32  0, 0, 1, 2, 0, 2
10620 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20  , 2 };.    v1 = 
10630 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76  and_logic[v1*3+v
10640 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  2];.  }else{.   
10650 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
10660 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c  signed char or_l
10670 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c  ogic[] = { 0, 1,
10680 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20   2, 1, 1, 1, 2, 
10690 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d  1, 2 };.    v1 =
106a0 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76   or_logic[v1*3+v
106b0 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d  2];.  }.  pOut =
106c0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
106d0 0a 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a  .  if( v1==2 ){.
106e0 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
106f0 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c  ag(pOut, MEM_Nul
10700 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  l);.  }else{.   
10710 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b   pOut->u.i = v1;
10720 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
10730 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
10740 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  t);.  }.  break;
10750 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
10760 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ot P1 P2 * * *.*
10770 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
10780 5d 3d 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  ]= !r[P1].**.** 
10790 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 76 61  Interpret the va
107a0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
107b0 50 31 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20  P1 as a boolean 
107c0 76 61 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68  value.  Store th
107d0 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d  e.** boolean com
107e0 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73  plement in regis
107f0 74 65 72 20 50 32 2e 20 20 49 66 20 74 68 65 20  ter P2.  If the 
10800 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
10810 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c  r P1 is .** NULL
10820 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73  , then a NULL is
10830 20 73 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a   stored in P2..*
10840 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b  /.case OP_Not: {
10850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10860 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f  /* same as TK_NO
10870 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a  T, in1, out2 */.
10880 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
10890 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
108a0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
108b0 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
108c0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
108d0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
108e0 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
108f0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
10900 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
10910 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 21 73 71  tInt64(pOut, !sq
10920 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
10930 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20  e(pIn1));.  }.  
10940 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
10950 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50  ode: BitNot P1 P
10960 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
10970 73 69 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b 50  sis: r[P1]= ~r[P
10980 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  1].**.** Interpr
10990 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  et the content o
109a0 66 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73  f register P1 as
109b0 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74   an integer.  St
109c0 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d  ore the.** ones-
109d0 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68  complement of th
109e0 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20  e P1 value into 
109f0 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
10a00 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e   P1 holds.** a N
10a10 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61  ULL then store a
10a20 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a   NULL in P2..*/.
10a30 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20  case OP_BitNot: 
10a40 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
10a50 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e   same as TK_BITN
10a60 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f  OT, in1, out2 */
10a70 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
10a80 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
10a90 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
10aa0 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
10ab0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
10ac0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
10ad0 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
10ae0 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
10af0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
10b00 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 7e 73  etInt64(pOut, ~s
10b10 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
10b20 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20  ue(pIn1));.  }. 
10b30 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
10b40 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20 50 32  code: Once P1 P2
10b50 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65   * * *.**.** Che
10b60 63 6b 20 69 66 20 4f 50 5f 4f 6e 63 65 20 66 6c  ck if OP_Once fl
10b70 61 67 20 50 31 20 69 73 20 73 65 74 2e 20 49 66  ag P1 is set. If
10b80 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73   so, jump to ins
10b90 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68  truction P2. Oth
10ba0 65 72 77 69 73 65 2c 0a 2a 2a 20 73 65 74 20 74  erwise,.** set t
10bb0 68 65 20 66 6c 61 67 20 61 6e 64 20 66 61 6c 6c  he flag and fall
10bc0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
10bd0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
10be0 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
10bf0 73 2c 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64  s,.** this opcod
10c00 65 20 63 61 75 73 65 73 20 61 6c 6c 20 66 6f 6c  e causes all fol
10c10 6c 6f 77 69 6e 67 20 75 70 20 63 6f 64 65 73 20  lowing up codes 
10c20 75 70 20 74 68 72 6f 75 67 68 20 50 32 20 28 62  up through P2 (b
10c30 75 74 20 6e 6f 74 20 69 6e 63 6c 75 64 69 6e 67  ut not including
10c40 0a 2a 2a 20 50 32 29 20 74 6f 20 72 75 6e 20 6a  .** P2) to run j
10c50 75 73 74 20 6f 6e 63 65 20 61 6e 64 20 73 6b 69  ust once and ski
10c60 70 70 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65  pped on subseque
10c70 6e 74 20 74 69 6d 65 73 20 74 68 72 6f 75 67 68  nt times through
10c80 20 74 68 65 20 6c 6f 6f 70 2e 0a 2a 2f 0a 63 61   the loop..*/.ca
10c90 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20  se OP_Once: {   
10ca0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
10cb0 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
10cc0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46  Op->p1<p->nOnceF
10cd0 6c 61 67 20 29 3b 0a 20 20 56 64 62 65 42 72 61  lag );.  VdbeBra
10ce0 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 61 4f 6e 63  nchTaken(p->aOnc
10cf0 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 21 3d  eFlag[pOp->p1]!=
10d00 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 2d 3e  0, 2);.  if( p->
10d10 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70  aOnceFlag[pOp->p
10d20 31 5d 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  1] ){.    pc = p
10d30 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73  Op->p2-1;.  }els
10d40 65 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65 46  e{.    p->aOnceF
10d50 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 31  lag[pOp->p1] = 1
10d60 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
10d70 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20  ../* Opcode: If 
10d80 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
10d90 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
10da0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
10db0 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72 75  gister P1 is tru
10dc0 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  e.  The value.**
10dd0 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74   is considered t
10de0 72 75 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d  rue if it is num
10df0 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72  eric and non-zer
10e00 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  o.  If the value
10e10 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c  .** in P1 is NUL
10e20 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
10e30 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20 6e 6f  jump if P3 is no
10e40 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70  n-zero..*/./* Op
10e50 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50  code: IfNot P1 P
10e60 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
10e70 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
10e80 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
10e90 65 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20  er P1 is False. 
10ea0 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
10eb0 20 63 6f 6e 73 69 64 65 72 65 64 20 66 61 6c 73   considered fals
10ec0 65 20 69 66 20 69 74 20 68 61 73 20 61 20 6e 75  e if it has a nu
10ed0 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a  meric value of z
10ee0 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c  ero.  If the val
10ef0 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e  ue.** in P1 is N
10f00 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68  ULL then take th
10f10 65 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20  e jump if P3 is 
10f20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  zero..*/.case OP
10f30 5f 49 66 3a 20 20 20 20 20 20 20 20 20 20 20 20  _If:            
10f40 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
10f50 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e  1 */.case OP_IfN
10f60 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
10f70 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
10f80 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31  .  int c;.  pIn1
10f90 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
10fa0 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
10fb0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
10fc0 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e  ){.    c = pOp->
10fd0 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66  p3;.  }else{.#if
10fe0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
10ff0 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
11000 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64     c = sqlite3Vd
11010 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
11020 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63  !=0;.#else.    c
11030 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
11040 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  alValue(pIn1)!=0
11050 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69  .0;.#endif.    i
11060 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
11070 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21  OP_IfNot ) c = !
11080 63 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61  c;.  }.  VdbeBra
11090 6e 63 68 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32  nchTaken(c!=0, 2
110a0 29 3b 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20  );.  if( c ){.  
110b0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
110c0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
110d0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e  ../* Opcode: IsN
110e0 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ull P1 P2 * * *.
110f0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66  ** Synopsis:  if
11100 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74   r[P1]==NULL got
11110 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20  o P2.**.** Jump 
11120 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
11130 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
11140 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  1 is NULL..*/.ca
11150 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20  se OP_IsNull: { 
11160 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
11170 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c  me as TK_ISNULL,
11180 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
11190 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
111a0 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61  ->p1];.  VdbeBra
111b0 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d  nchTaken( (pIn1-
111c0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
111d0 6c 29 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  l)!=0, 2);.  if(
111e0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
111f0 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a  MEM_Null)!=0 ){.
11200 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
11210 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
11220 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
11230 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a   NotNull P1 P2 *
11240 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
11250 3a 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c  : if r[P1]!=NULL
11260 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a   goto P2.**.** J
11270 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
11280 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
11290 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c  er P1 is not NUL
112a0 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  L.  .*/.case OP_
112b0 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  NotNull: {      
112c0 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
112d0 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d   TK_NOTNULL, jum
112e0 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
112f0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
11300 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  ];.  VdbeBranchT
11310 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61  aken( (pIn1->fla
11320 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
11330 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49  0, 2);.  if( (pI
11340 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
11350 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
11360 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
11370 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
11380 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c  ../* Opcode: Col
11390 75 6d 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  umn P1 P2 P3 P4 
113a0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
113b0 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20   r[P3]=PX.**.** 
113c0 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 64 61  Interpret the da
113d0 74 61 20 74 68 61 74 20 63 75 72 73 6f 72 20 50  ta that cursor P
113e0 31 20 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61  1 points to as a
113f0 20 73 74 72 75 63 74 75 72 65 20 62 75 69 6c 74   structure built
11400 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61   using.** the Ma
11410 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63  keRecord instruc
11420 74 69 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20  tion.  (See the 
11430 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64  MakeRecord opcod
11440 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
11450 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** information 
11460 61 62 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74  about the format
11470 20 6f 66 20 74 68 65 20 64 61 74 61 2e 29 20 20   of the data.)  
11480 45 78 74 72 61 63 74 20 74 68 65 20 50 32 2d 74  Extract the P2-t
11490 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d  h column.** from
114a0 20 74 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49   this record.  I
114b0 66 20 74 68 65 72 65 20 61 72 65 20 6c 65 73 73  f there are less
114c0 20 74 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a   that (P2+1) .**
114d0 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72   values in the r
114e0 65 63 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61  ecord, extract a
114f0 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   NULL..**.** The
11500 20 76 61 6c 75 65 20 65 78 74 72 61 63 74 65 64   value extracted
11510 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
11520 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a  gister P3..**.**
11530 20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63   If the column c
11540 6f 6e 74 61 69 6e 73 20 66 65 77 65 72 20 74 68  ontains fewer th
11550 61 6e 20 50 32 20 66 69 65 6c 64 73 2c 20 74 68  an P2 fields, th
11560 65 6e 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c  en extract a NUL
11570 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68  L.  Or,.** if th
11580 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73  e P4 argument is
11590 20 61 20 50 34 5f 4d 45 4d 20 75 73 65 20 74 68   a P4_MEM use th
115a0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
115b0 34 20 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a  4 argument as.**
115c0 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a   the result..**.
115d0 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
115e0 5f 43 4c 45 41 52 43 41 43 48 45 20 62 69 74 20  _CLEARCACHE bit 
115f0 69 73 20 73 65 74 20 6f 6e 20 50 35 20 61 6e 64  is set on P5 and
11600 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d   P1 is a pseudo-
11610 74 61 62 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a  table cursor,.**
11620 20 74 68 65 6e 20 74 68 65 20 63 61 63 68 65 20   then the cache 
11630 6f 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  of the cursor is
11640 20 72 65 73 65 74 20 70 72 69 6f 72 20 74 6f 20   reset prior to 
11650 65 78 74 72 61 63 74 69 6e 67 20 74 68 65 20 63  extracting the c
11660 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69  olumn..** The fi
11670 72 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67  rst OP_Column ag
11680 61 69 6e 73 74 20 61 20 70 73 65 75 64 6f 2d 74  ainst a pseudo-t
11690 61 62 6c 65 20 61 66 74 65 72 20 74 68 65 20 76  able after the v
116a0 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  alue of the cont
116b0 65 6e 74 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  ent.** register 
116c0 68 61 73 20 63 68 61 6e 67 65 64 20 73 68 6f 75  has changed shou
116d0 6c 64 20 68 61 76 65 20 74 68 69 73 20 62 69 74  ld have this bit
116e0 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74   set..**.** If t
116f0 68 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  he OPFLAG_LENGTH
11700 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54  ARG and OPFLAG_T
11710 59 50 45 4f 46 41 52 47 20 62 69 74 73 20 61 72  YPEOFARG bits ar
11720 65 20 73 65 74 20 6f 6e 20 50 35 20 77 68 65 6e  e set on P5 when
11730 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69  .** the result i
11740 73 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20  s guaranteed to 
11750 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 61 73 20  only be used as 
11760 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6f 66 20  the argument of 
11770 61 20 6c 65 6e 67 74 68 28 29 0a 2a 2a 20 6f 72  a length().** or
11780 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
11790 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  on, respectively
117a0 2e 20 20 54 68 65 20 6c 6f 61 64 69 6e 67 20 6f  .  The loading o
117b0 66 20 6c 61 72 67 65 20 62 6c 6f 62 73 20 63 61  f large blobs ca
117c0 6e 20 62 65 0a 2a 2a 20 73 6b 69 70 70 65 64 20  n be.** skipped 
117d0 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 61 6e 64  for length() and
117e0 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c 6f 61   all content loa
117f0 64 69 6e 67 20 63 61 6e 20 62 65 20 73 6b 69 70  ding can be skip
11800 70 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29  ped for typeof()
11810 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c  ..*/.case OP_Col
11820 75 6d 6e 3a 20 7b 0a 20 20 69 36 34 20 70 61 79  umn: {.  i64 pay
11830 6c 6f 61 64 53 69 7a 65 36 34 3b 20 2f 2a 20 4e  loadSize64; /* N
11840 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
11850 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  n the record */.
11860 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20    int p2;       
11870 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e       /* column n
11880 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65 76  umber to retriev
11890 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  e */.  VdbeCurso
118a0 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65  r *pC;    /* The
118b0 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a   VDBE cursor */.
118c0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
118d0 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72 65  r;   /* The BTre
118e0 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33  e cursor */.  u3
118f0 32 20 2a 61 54 79 70 65 3b 20 20 20 20 20 20 20  2 *aType;       
11900 20 2f 2a 20 61 54 79 70 65 5b 69 5d 20 68 6f 6c   /* aType[i] hol
11910 64 73 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74  ds the numeric t
11920 79 70 65 20 6f 66 20 74 68 65 20 69 2d 74 68 20  ype of the i-th 
11930 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20  column */.  u32 
11940 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20 20 2f  *aOffset;      /
11950 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69 73 20  * aOffset[i] is 
11960 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72 74 20  offset to start 
11970 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d 74 68  of data for i-th
11980 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74   column */.  int
11990 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20   len;           
119a0 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66  /* The length of
119b0 20 74 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20   the serialized 
119c0 64 61 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c  data for the col
119d0 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20  umn */.  int i; 
119e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
119f0 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  oop counter */. 
11a00 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20 20 20   Mem *pDest;    
11a10 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74 6f 20      /* Where to 
11a20 77 72 69 74 65 20 74 68 65 20 65 78 74 72 61 63  write the extrac
11a30 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d  ted value */.  M
11a40 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20  em sMem;        
11a50 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67    /* For storing
11a60 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e   the record bein
11a70 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63  g decoded */.  c
11a80 6f 6e 73 74 20 75 38 20 2a 7a 44 61 74 61 3b 20  onst u8 *zData; 
11a90 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65    /* Part of the
11aa0 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65   record being de
11ab0 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74  coded */.  const
11ac0 20 75 38 20 2a 7a 48 64 72 3b 20 20 20 20 2f 2a   u8 *zHdr;    /*
11ad0 20 4e 65 78 74 20 75 6e 70 61 72 73 65 64 20 62   Next unparsed b
11ae0 79 74 65 20 6f 66 20 74 68 65 20 68 65 61 64 65  yte of the heade
11af0 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20  r */.  const u8 
11b00 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a 20 50 6f 69  *zEndHdr; /* Poi
11b10 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20 62 79  nter to first by
11b20 74 65 20 61 66 74 65 72 20 74 68 65 20 68 65 61  te after the hea
11b30 64 65 72 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66  der */.  u32 off
11b40 73 65 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  set;        /* O
11b50 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65 20 64  ffset into the d
11b60 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 73 7a 46  ata */.  u32 szF
11b70 69 65 6c 64 3b 20 20 20 20 20 20 20 2f 2a 20 4e  ield;       /* N
11b80 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
11b90 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  n the content of
11ba0 20 61 20 66 69 65 6c 64 20 2a 2f 0a 20 20 75 33   a field */.  u3
11bb0 32 20 61 76 61 69 6c 3b 20 20 20 20 20 20 20 20  2 avail;        
11bc0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
11bd0 74 65 73 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  tes of available
11be0 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 74   data */.  u32 t
11bf0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
11c00 20 41 20 74 79 70 65 20 63 6f 64 65 20 66 72 6f   A type code fro
11c10 6d 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61  m the record hea
11c20 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  der */.  Mem *pR
11c30 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50  eg;         /* P
11c40 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70 75 74  seudoTable input
11c50 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a 20 20   register */..  
11c60 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
11c70 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
11c80 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
11c90 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
11ca0 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20  r) );.  pDest = 
11cb0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
11cc0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
11cd0 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20  ge(p, pDest);.  
11ce0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
11cf0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
11d00 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
11d10 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
11d20 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
11d30 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
11d40 74 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64  t( p2<pC->nField
11d50 20 29 3b 0a 20 20 61 54 79 70 65 20 3d 20 70 43   );.  aType = pC
11d60 2d 3e 61 54 79 70 65 3b 0a 20 20 61 4f 66 66 73  ->aType;.  aOffs
11d70 65 74 20 3d 20 61 54 79 70 65 20 2b 20 70 43 2d  et = aType + pC-
11d80 3e 6e 46 69 65 6c 64 3b 0a 23 69 66 6e 64 65 66  >nField;.#ifndef
11d90 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
11da0 54 55 41 4c 54 41 42 4c 45 0a 20 20 61 73 73 65  TUALTABLE.  asse
11db0 72 74 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72  rt( pC->pVtabCur
11dc0 73 6f 72 3d 3d 30 20 29 3b 20 2f 2a 20 4f 50 5f  sor==0 ); /* OP_
11dd0 43 6f 6c 75 6d 6e 20 6e 65 76 65 72 20 63 61 6c  Column never cal
11de0 6c 65 64 20 6f 6e 20 76 69 72 74 75 61 6c 20 74  led on virtual t
11df0 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  able */.#endif. 
11e00 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
11e10 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
11e20 70 43 72 73 72 21 3d 30 20 7c 7c 20 70 43 2d 3e  pCrsr!=0 || pC->
11e30 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3e 30  pseudoTableReg>0
11e40 20 29 3b 20 2f 2a 20 70 43 72 73 72 20 4e 55 4c   ); /* pCrsr NUL
11e50 4c 20 6f 6e 20 50 73 65 75 64 6f 54 61 62 6c 65  L on PseudoTable
11e60 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  s */.  assert( p
11e70 43 72 73 72 21 3d 30 20 7c 7c 20 70 43 2d 3e 6e  Crsr!=0 || pC->n
11e80 75 6c 6c 52 6f 77 20 29 3b 20 20 20 20 20 20 20  ullRow );       
11e90 20 20 20 2f 2a 20 70 43 2d 3e 6e 75 6c 6c 52 6f     /* pC->nullRo
11ea0 77 20 6f 6e 20 50 73 65 75 64 6f 54 61 62 6c 65  w on PseudoTable
11eb0 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68  s */..  /* If th
11ec0 65 20 63 75 72 73 6f 72 20 63 61 63 68 65 20 69  e cursor cache i
11ed0 73 20 73 74 61 6c 65 2c 20 62 72 69 6e 67 20 69  s stale, bring i
11ee0 74 20 75 70 2d 74 6f 2d 64 61 74 65 20 2a 2f 0a  t up-to-date */.
11ef0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
11f00 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70  beCursorMoveto(p
11f10 43 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  C);.  if( rc ) g
11f20 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
11f30 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 43  _error;.  if( pC
11f40 2d 3e 63 61 63 68 65 53 74 61 74 75 73 21 3d 70  ->cacheStatus!=p
11f50 2d 3e 63 61 63 68 65 43 74 72 20 7c 7c 20 28 70  ->cacheCtr || (p
11f60 4f 70 2d 3e 70 35 26 4f 50 46 4c 41 47 5f 43 4c  Op->p5&OPFLAG_CL
11f70 45 41 52 43 41 43 48 45 29 21 3d 30 20 29 7b 0a  EARCACHE)!=0 ){.
11f80 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c      if( pC->null
11f90 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 69 66 28  Row ){.      if(
11fa0 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20 20   pCrsr==0 ){.   
11fb0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
11fc0 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3e  >pseudoTableReg>
11fd0 30 20 29 3b 0a 20 20 20 20 20 20 20 20 70 52 65  0 );.        pRe
11fe0 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 70 73  g = &aMem[pC->ps
11ff0 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b 0a 20  eudoTableReg];. 
12000 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
12010 52 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Reg->flags & MEM
12020 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20 20  _Blob );.       
12030 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
12040 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20 20 20  lid(pReg) );.   
12050 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64       pC->payload
12060 53 69 7a 65 20 3d 20 70 43 2d 3e 73 7a 52 6f 77  Size = pC->szRow
12070 20 3d 20 61 76 61 69 6c 20 3d 20 70 52 65 67 2d   = avail = pReg-
12080 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  >n;.        pC->
12090 61 52 6f 77 20 3d 20 28 75 38 2a 29 70 52 65 67  aRow = (u8*)pReg
120a0 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ->z;.      }else
120b0 7b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74  {.        MemSet
120c0 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20  TypeFlag(pDest, 
120d0 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20  MEM_Null);.     
120e0 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
120f0 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20  n_out;.      }. 
12100 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
12110 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b  assert( pCrsr );
12120 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69  .      if( pC->i
12130 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20  sTable==0 ){.   
12140 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
12150 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
12160 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b  sValid(pCrsr) );
12170 0a 20 20 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c  .        VVA_ONL
12180 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42  Y(rc =) sqlite3B
12190 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73  treeKeySize(pCrs
121a0 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 36  r, &payloadSize6
121b0 34 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  4);.        asse
121c0 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
121d0 4b 20 29 3b 20 2f 2a 20 54 72 75 65 20 62 65 63  K ); /* True bec
121e0 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f  ause of CursorMo
121f0 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76  veto() call abov
12200 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 2f 2a 20  e */.        /* 
12210 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 72 73  sqlite3BtreePars
12220 65 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73 20  eCellPtr() uses 
12230 67 65 74 56 61 72 69 6e 74 33 32 28 29 20 74 6f  getVarint32() to
12240 20 65 78 74 72 61 63 74 20 74 68 65 0a 20 20 20   extract the.   
12250 20 20 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20       ** payload 
12260 73 69 7a 65 2c 20 73 6f 20 69 74 20 69 73 20 69  size, so it is i
12270 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 70 61  mpossible for pa
12280 79 6c 6f 61 64 53 69 7a 65 36 34 20 74 6f 20 62  yloadSize64 to b
12290 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 61 72  e.        ** lar
122a0 67 65 72 20 74 68 61 6e 20 33 32 20 62 69 74 73  ger than 32 bits
122b0 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73  . */.        ass
122c0 65 72 74 28 20 28 70 61 79 6c 6f 61 64 53 69 7a  ert( (payloadSiz
122d0 65 36 34 20 26 20 53 51 4c 49 54 45 5f 4d 41 58  e64 & SQLITE_MAX
122e0 5f 55 33 32 29 3d 3d 28 75 36 34 29 70 61 79 6c  _U32)==(u64)payl
122f0 6f 61 64 53 69 7a 65 36 34 20 29 3b 0a 20 20 20  oadSize64 );.   
12300 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20       pC->aRow = 
12310 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46  sqlite3BtreeKeyF
12320 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61  etch(pCrsr, &ava
12330 69 6c 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  il);.        pC-
12340 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28  >payloadSize = (
12350 75 33 32 29 70 61 79 6c 6f 61 64 53 69 7a 65 36  u32)payloadSize6
12360 34 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  4;.      }else{.
12370 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
12380 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
12390 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29  orIsValid(pCrsr)
123a0 20 29 3b 0a 20 20 20 20 20 20 20 20 56 56 41 5f   );.        VVA_
123b0 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74  ONLY(rc =) sqlit
123c0 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28  e3BtreeDataSize(
123d0 70 43 72 73 72 2c 20 26 70 43 2d 3e 70 61 79 6c  pCrsr, &pC->payl
123e0 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20 20 20  oadSize);.      
123f0 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
12400 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20  LITE_OK );   /* 
12410 44 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f  DataSize() canno
12420 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 20 20  t fail */.      
12430 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c    pC->aRow = sql
12440 69 74 65 33 42 74 72 65 65 44 61 74 61 46 65 74  ite3BtreeDataFet
12450 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c  ch(pCrsr, &avail
12460 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
12470 20 61 73 73 65 72 74 28 20 61 76 61 69 6c 3c 3d   assert( avail<=
12480 36 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61 78  65536 );  /* Max
12490 69 6d 75 6d 20 70 61 67 65 20 73 69 7a 65 20 69  imum page size i
124a0 73 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20 20  s 64KiB */.     
124b0 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64   if( pC->payload
124c0 53 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76 61  Size <= (u32)ava
124d0 69 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43  il ){.        pC
124e0 2d 3e 73 7a 52 6f 77 20 3d 20 70 43 2d 3e 70 61  ->szRow = pC->pa
124f0 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 20  yloadSize;.     
12500 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
12510 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69  pC->szRow = avai
12520 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  l;.      }.     
12530 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64   if( pC->payload
12540 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e  Size > (u32)db->
12550 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
12560 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
12570 20 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f         goto too_
12580 62 69 67 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  big;.      }.   
12590 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65   }.    pC->cache
125a0 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68  Status = p->cach
125b0 65 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e 69 48  eCtr;.    pC->iH
125c0 64 72 4f 66 66 73 65 74 20 3d 20 67 65 74 56 61  drOffset = getVa
125d0 72 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f 77 2c  rint32(pC->aRow,
125e0 20 6f 66 66 73 65 74 29 3b 0a 20 20 20 20 70 43   offset);.    pC
125f0 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20 30  ->nHdrParsed = 0
12600 3b 0a 20 20 20 20 61 4f 66 66 73 65 74 5b 30 5d  ;.    aOffset[0]
12610 20 3d 20 6f 66 66 73 65 74 3b 0a 20 20 20 20 69   = offset;.    i
12620 66 28 20 61 76 61 69 6c 3c 6f 66 66 73 65 74 20  f( avail<offset 
12630 29 7b 0a 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e  ){.      /* pC->
12640 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61  aRow does not ha
12650 76 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 65  ve to hold the e
12660 6e 74 69 72 65 20 72 6f 77 2c 20 62 75 74 20 69  ntire row, but i
12670 74 20 64 6f 65 73 20 61 74 20 6c 65 61 73 74 0a  t does at least.
12680 20 20 20 20 20 20 2a 2a 20 6e 65 65 64 20 74 6f        ** need to
12690 20 63 6f 76 65 72 20 74 68 65 20 68 65 61 64 65   cover the heade
126a0 72 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e  r of the record.
126b0 20 20 49 66 20 70 43 2d 3e 61 52 6f 77 20 64 6f    If pC->aRow do
126c0 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a 20  es not contain. 
126d0 20 20 20 20 20 2a 2a 20 74 68 65 20 63 6f 6d 70       ** the comp
126e0 6c 65 74 65 20 68 65 61 64 65 72 2c 20 74 68 65  lete header, the
126f0 6e 20 73 65 74 20 69 74 20 74 6f 20 7a 65 72 6f  n set it to zero
12700 2c 20 66 6f 72 63 69 6e 67 20 74 68 65 20 68 65  , forcing the he
12710 61 64 65 72 20 74 6f 20 62 65 0a 20 20 20 20 20  ader to be.     
12720 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   ** dynamically 
12730 61 6c 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a 20 20  allocated. */.  
12740 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30      pC->aRow = 0
12750 3b 0a 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f  ;.      pC->szRo
12760 77 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20  w = 0;.    }..  
12770 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61    /* Make sure a
12780 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73   corrupt databas
12790 65 20 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20  e has not given 
127a0 75 73 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68  us an oversize h
127b0 65 61 64 65 72 2e 0a 20 20 20 20 2a 2a 20 44 6f  eader..    ** Do
127c0 20 74 68 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f   this now to avo
127d0 69 64 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d  id an oversize m
127e0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
127f0 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
12800 54 79 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e  Type entries can
12810 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e   be between 1 an
12820 64 20 35 20 62 79 74 65 73 20 65 61 63 68 2e 20  d 5 bytes each. 
12830 20 42 75 74 20 34 20 61 6e 64 20 35 20 62 79 74   But 4 and 5 byt
12840 65 0a 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75  e.    ** types u
12850 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20  se so much data 
12860 73 70 61 63 65 20 74 68 61 74 20 74 68 65 72 65  space that there
12870 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39   can only be 409
12880 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20  6 and 32 of.    
12890 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74  ** them, respect
128a0 69 76 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d  ively.  So the m
128b0 61 78 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65  aximum header le
128c0 6e 67 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f  ngth results fro
128d0 6d 20 61 0a 20 20 20 20 2a 2a 20 33 2d 62 79 74  m a.    ** 3-byt
128e0 65 20 74 79 70 65 20 66 6f 72 20 65 61 63 68 20  e type for each 
128f0 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  of the maximum o
12900 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20  f 32768 columns 
12910 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20 2a  plus three.    *
12920 2a 20 65 78 74 72 61 20 62 79 74 65 73 20 66 6f  * extra bytes fo
12930 72 20 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e  r the header len
12940 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37  gth itself.  327
12950 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37  68*3 + 3 = 98307
12960 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
12970 20 6f 66 66 73 65 74 20 3e 20 39 38 33 30 37 20   offset > 98307 
12980 7c 7c 20 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e  || offset > pC->
12990 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20  payloadSize ){. 
129a0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
129b0 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
129c0 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
129d0 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  umn_error;.    }
129e0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  .  }..  /* Make 
129f0 73 75 72 65 20 61 74 20 6c 65 61 73 74 20 74 68  sure at least th
12a00 65 20 66 69 72 73 74 20 70 32 2b 31 20 65 6e 74  e first p2+1 ent
12a10 72 69 65 73 20 6f 66 20 74 68 65 20 68 65 61 64  ries of the head
12a20 65 72 20 68 61 76 65 20 62 65 65 6e 0a 20 20 2a  er have been.  *
12a30 2a 20 70 61 72 73 65 64 20 61 6e 64 20 76 61 6c  * parsed and val
12a40 69 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  id information i
12a50 73 20 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61  s in aOffset[] a
12a60 6e 64 20 61 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f  nd aType[]..  */
12a70 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50  .  if( pC->nHdrP
12a80 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20  arsed<=p2 ){.   
12a90 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20   /* If there is 
12aa0 6d 6f 72 65 20 68 65 61 64 65 72 20 61 76 61 69  more header avai
12ab0 6c 61 62 6c 65 20 66 6f 72 20 70 61 72 73 69 6e  lable for parsin
12ac0 67 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c  g in the record,
12ad0 20 74 72 79 0a 20 20 20 20 2a 2a 20 74 6f 20 65   try.    ** to e
12ae0 78 74 72 61 63 74 20 61 64 64 69 74 69 6f 6e 61  xtract additiona
12af0 6c 20 66 69 65 6c 64 73 20 75 70 20 74 68 72 6f  l fields up thro
12b00 75 67 68 20 74 68 65 20 70 32 2b 31 2d 74 68 20  ugh the p2+1-th 
12b10 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f 0a 20 20  field .    */.  
12b20 20 20 69 66 28 20 70 43 2d 3e 69 48 64 72 4f 66    if( pC->iHdrOf
12b30 66 73 65 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20  fset<aOffset[0] 
12b40 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65  ){.      /* Make
12b50 20 73 75 72 65 20 7a 44 61 74 61 20 70 6f 69 6e   sure zData poin
12b60 74 73 20 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20  ts to enough of 
12b70 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 63 6f  the record to co
12b80 76 65 72 20 74 68 65 20 68 65 61 64 65 72 2e 20  ver the header. 
12b90 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d  */.      if( pC-
12ba0 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20  >aRow==0 ){.    
12bb0 20 20 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d      memset(&sMem
12bc0 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d  , 0, sizeof(sMem
12bd0 29 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  ));.        rc =
12be0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
12bf0 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20  romBtree(pCrsr, 
12c00 30 2c 20 61 4f 66 66 73 65 74 5b 30 5d 2c 20 0a  0, aOffset[0], .
12c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c30 20 20 20 20 20 21 70 43 2d 3e 69 73 54 61 62 6c       !pC->isTabl
12c40 65 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20  e, &sMem);.     
12c50 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
12c60 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
12c70 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
12c80 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
12c90 7d 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  }.        zData 
12ca0 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20  = (u8*)sMem.z;. 
12cb0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
12cc0 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e      zData = pC->
12cd0 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20  aRow;.      }.  
12ce0 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69  .      /* Fill i
12cf0 6e 20 61 54 79 70 65 5b 69 5d 20 61 6e 64 20 61  n aType[i] and a
12d00 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c 75 65 73  Offset[i] values
12d10 20 74 68 72 6f 75 67 68 20 74 68 65 20 70 32 2d   through the p2-
12d20 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a 20 20 20  th field. */.   
12d30 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50     i = pC->nHdrP
12d40 61 72 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66  arsed;.      off
12d50 73 65 74 20 3d 20 61 4f 66 66 73 65 74 5b 69 5d  set = aOffset[i]
12d60 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a  ;.      zHdr = z
12d70 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64 72 4f  Data + pC->iHdrO
12d80 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a 45 6e  ffset;.      zEn
12d90 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 61  dHdr = zData + a
12da0 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20 20  Offset[0];.     
12db0 20 61 73 73 65 72 74 28 20 69 3c 3d 70 32 20 26   assert( i<=p2 &
12dc0 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29  & zHdr<zEndHdr )
12dd0 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20  ;.      do{.    
12de0 20 20 20 20 69 66 28 20 7a 48 64 72 5b 30 5d 3c      if( zHdr[0]<
12df0 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20  0x80 ){.        
12e00 20 20 74 20 3d 20 7a 48 64 72 5b 30 5d 3b 0a 20    t = zHdr[0];. 
12e10 20 20 20 20 20 20 20 20 20 7a 48 64 72 2b 2b 3b           zHdr++;
12e20 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
12e30 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 20 2b            zHdr +
12e40 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  = sqlite3GetVari
12e50 6e 74 33 32 28 7a 48 64 72 2c 20 26 74 29 3b 0a  nt32(zHdr, &t);.
12e60 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
12e70 20 20 61 54 79 70 65 5b 69 5d 20 3d 20 74 3b 0a    aType[i] = t;.
12e80 20 20 20 20 20 20 20 20 73 7a 46 69 65 6c 64 20          szField 
12e90 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
12ea0 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20  ialTypeLen(t);. 
12eb0 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d         offset +=
12ec0 20 73 7a 46 69 65 6c 64 3b 0a 20 20 20 20 20 20   szField;.      
12ed0 20 20 69 66 28 20 6f 66 66 73 65 74 3c 73 7a 46    if( offset<szF
12ee0 69 65 6c 64 20 29 7b 20 20 2f 2a 20 54 72 75 65  ield ){  /* True
12ef0 20 69 66 20 6f 66 66 73 65 74 20 6f 76 65 72 66   if offset overf
12f00 6c 6f 77 73 20 2a 2f 0a 20 20 20 20 20 20 20 20  lows */.        
12f10 20 20 7a 48 64 72 20 3d 20 26 7a 45 6e 64 48 64    zHdr = &zEndHd
12f20 72 5b 31 5d 3b 20 20 2f 2a 20 46 6f 72 63 65 73  r[1];  /* Forces
12f30 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20   SQLITE_CORRUPT 
12f40 72 65 74 75 72 6e 20 62 65 6c 6f 77 20 2a 2f 0a  return below */.
12f50 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
12f60 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
12f70 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20     i++;.        
12f80 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 6f 66 66  aOffset[i] = off
12f90 73 65 74 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c  set;.      }whil
12fa0 65 28 20 69 3c 3d 70 32 20 26 26 20 7a 48 64 72  e( i<=p2 && zHdr
12fb0 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20 20 20  <zEndHdr );.    
12fc0 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64    pC->nHdrParsed
12fd0 20 3d 20 69 3b 0a 20 20 20 20 20 20 70 43 2d 3e   = i;.      pC->
12fe0 69 48 64 72 4f 66 66 73 65 74 20 3d 20 28 75 33  iHdrOffset = (u3
12ff0 32 29 28 7a 48 64 72 20 2d 20 7a 44 61 74 61 29  2)(zHdr - zData)
13000 3b 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e  ;.      if( pC->
13010 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20  aRow==0 ){.     
13020 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
13030 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b  mRelease(&sMem);
13040 0a 20 20 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c  .        sMem.fl
13050 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
13060 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20        }.  .     
13070 20 2f 2a 20 49 66 20 77 65 20 68 61 76 65 20 72   /* If we have r
13080 65 61 64 20 6d 6f 72 65 20 68 65 61 64 65 72 20  ead more header 
13090 64 61 74 61 20 74 68 61 6e 20 77 61 73 20 63 6f  data than was co
130a0 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 68  ntained in the h
130b0 65 61 64 65 72 2c 0a 20 20 20 20 20 20 2a 2a 20  eader,.      ** 
130c0 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66  or if the end of
130d0 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20   the last field 
130e0 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 70 61  appears to be pa
130f0 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  st the end of th
13100 65 0a 20 20 20 20 20 20 2a 2a 20 72 65 63 6f 72  e.      ** recor
13110 64 2c 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64  d, or if the end
13120 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69 65   of the last fie
13130 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20 62 65  ld appears to be
13140 20 62 65 66 6f 72 65 20 74 68 65 20 65 6e 64 0a   before the end.
13150 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20        ** of the 
13160 72 65 63 6f 72 64 20 28 77 68 65 6e 20 61 6c 6c  record (when all
13170 20 66 69 65 6c 64 73 20 70 72 65 73 65 6e 74 29   fields present)
13180 2c 20 74 68 65 6e 20 77 65 20 6d 75 73 74 20 62  , then we must b
13190 65 20 64 65 61 6c 69 6e 67 20 0a 20 20 20 20 20  e dealing .     
131a0 20 2a 2a 20 77 69 74 68 20 61 20 63 6f 72 72 75   ** with a corru
131b0 70 74 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20  pt database..   
131c0 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
131d0 28 7a 48 64 72 20 3e 20 7a 45 6e 64 48 64 72 29  (zHdr > zEndHdr)
131e0 0a 20 20 20 20 20 20 20 7c 7c 20 28 6f 66 66 73  .       || (offs
131f0 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64  et > pC->payload
13200 53 69 7a 65 29 0a 20 20 20 20 20 20 20 7c 7c 20  Size).       || 
13210 28 7a 48 64 72 3d 3d 7a 45 6e 64 48 64 72 20 26  (zHdr==zEndHdr &
13220 26 20 6f 66 66 73 65 74 21 3d 70 43 2d 3e 70 61  & offset!=pC->pa
13230 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20  yloadSize).     
13240 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
13250 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
13260 42 4b 50 54 3b 0a 20 20 20 20 20 20 20 20 67 6f  BKPT;.        go
13270 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72  to op_column_err
13280 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
13290 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20 61 66 74  }..    /* If aft
132a0 65 72 20 74 72 79 69 6e 67 20 74 6f 20 65 78 74  er trying to ext
132b0 72 61 20 6e 65 77 20 65 6e 74 72 69 65 73 20 66  ra new entries f
132c0 72 6f 6d 20 74 68 65 20 68 65 61 64 65 72 2c 20  rom the header, 
132d0 6e 48 64 72 50 61 72 73 65 64 20 69 73 0a 20 20  nHdrParsed is.  
132e0 20 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75    ** still not u
132f0 70 20 74 6f 20 70 32 2c 20 74 68 61 74 20 6d 65  p to p2, that me
13300 61 6e 73 20 74 68 61 74 20 74 68 65 20 72 65 63  ans that the rec
13310 6f 72 64 20 68 61 73 20 66 65 77 65 72 20 74 68  ord has fewer th
13320 61 6e 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c  an p2.    ** col
13330 75 6d 6e 73 2e 20 20 53 6f 20 74 68 65 20 72 65  umns.  So the re
13340 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 65 69 74  sult will be eit
13350 68 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20  her the default 
13360 76 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e  value or a NULL.
13370 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
13380 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d  pC->nHdrParsed<=
13390 70 32 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  p2 ){.      if( 
133a0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
133b0 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 20 20 73  MEM ){.        s
133c0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
133d0 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20  llowCopy(pDest, 
133e0 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45  pOp->p4.pMem, ME
133f0 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 20  M_Static);.     
13400 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
13410 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
13420 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  Dest, MEM_Null);
13430 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67  .      }.      g
13440 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
13450 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  t;.    }.  }..  
13460 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 63  /* Extract the c
13470 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68 65 20 70  ontent for the p
13480 32 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20 20  2+1-th column.  
13490 43 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79  Control can only
134a0 0a 20 20 2a 2a 20 72 65 61 63 68 20 74 68 69 73  .  ** reach this
134b0 20 70 6f 69 6e 74 20 69 66 20 61 4f 66 66 73 65   point if aOffse
134c0 74 5b 70 32 5d 2c 20 61 4f 66 66 73 65 74 5b 70  t[p2], aOffset[p
134d0 32 2b 31 5d 2c 20 61 6e 64 20 61 54 79 70 65 5b  2+1], and aType[
134e0 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c  p2] are.  ** all
134f0 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61   valid..  */.  a
13500 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48  ssert( p2<pC->nH
13510 64 72 50 61 72 73 65 64 20 29 3b 0a 20 20 61 73  drParsed );.  as
13520 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
13530 5f 4f 4b 20 29 3b 0a 20 20 69 66 28 20 70 43 2d  _OK );.  if( pC-
13540 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74 5b  >szRow>=aOffset[
13550 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a 20  p2+1] ){.    /* 
13560 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 6d 6d  This is the comm
13570 6f 6e 20 63 61 73 65 20 77 68 65 72 65 20 74 68  on case where th
13580 65 20 64 65 73 69 72 65 64 20 63 6f 6e 74 65 6e  e desired conten
13590 74 20 66 69 74 73 20 6f 6e 20 74 68 65 20 6f 72  t fits on the or
135a0 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70 61  iginal.    ** pa
135b0 67 65 20 2d 20 77 68 65 72 65 20 74 68 65 20 63  ge - where the c
135c0 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f 6e  ontent is not on
135d0 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67   an overflow pag
135e0 65 20 2a 2f 0a 20 20 20 20 56 64 62 65 4d 65 6d  e */.    VdbeMem
135f0 52 65 6c 65 61 73 65 28 70 44 65 73 74 29 3b 0a  Release(pDest);.
13600 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
13610 65 72 69 61 6c 47 65 74 28 70 43 2d 3e 61 52 6f  erialGet(pC->aRo
13620 77 2b 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61  w+aOffset[p2], a
13630 54 79 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29  Type[p2], pDest)
13640 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
13650 2a 20 54 68 69 73 20 62 72 61 6e 63 68 20 68 61  * This branch ha
13660 70 70 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20  ppens only when 
13670 63 6f 6e 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76  content is on ov
13680 65 72 66 6c 6f 77 20 70 61 67 65 73 20 2a 2f 0a  erflow pages */.
13690 20 20 20 20 74 20 3d 20 61 54 79 70 65 5b 70 32      t = aType[p2
136a0 5d 3b 0a 20 20 20 20 69 66 28 20 28 28 70 4f 70  ];.    if( ((pOp
136b0 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 4c  ->p5 & (OPFLAG_L
136c0 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c 41 47 5f  ENGTHARG|OPFLAG_
136d0 54 59 50 45 4f 46 41 52 47 29 29 21 3d 30 0a 20  TYPEOFARG))!=0. 
136e0 20 20 20 20 20 20 20 20 20 26 26 20 28 28 74 3e           && ((t>
136f0 3d 31 32 20 26 26 20 28 74 26 31 29 3d 3d 30 29  =12 && (t&1)==0)
13700 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f   || (pOp->p5 & O
13710 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29  PFLAG_TYPEOFARG)
13720 21 3d 30 29 29 0a 20 20 20 20 20 7c 7c 20 28 6c  !=0)).     || (l
13730 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  en = sqlite3Vdbe
13740 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29  SerialTypeLen(t)
13750 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20  )==0.    ){.    
13760 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69 73 20    /* Content is 
13770 69 72 72 65 6c 65 76 61 6e 74 20 66 6f 72 20 74  irrelevant for t
13780 68 65 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63  he typeof() func
13790 74 69 6f 6e 20 61 6e 64 20 66 6f 72 0a 20 20 20  tion and for.   
137a0 20 20 20 2a 2a 20 74 68 65 20 6c 65 6e 67 74 68     ** the length
137b0 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 66 20  (X) function if 
137c0 58 20 69 73 20 61 20 62 6c 6f 62 2e 20 20 53 6f  X is a blob.  So
137d0 20 77 65 20 6d 69 67 68 74 20 61 73 20 77 65 6c   we might as wel
137e0 6c 20 75 73 65 0a 20 20 20 20 20 20 2a 2a 20 62  l use.      ** b
137f0 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20 72 61 74  ogus content rat
13800 68 65 72 20 74 68 61 6e 20 72 65 61 64 69 6e 67  her than reading
13810 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69   content from di
13820 73 6b 2e 20 20 4e 55 4c 4c 20 77 6f 72 6b 73 0a  sk.  NULL works.
13830 20 20 20 20 20 20 2a 2a 20 66 6f 72 20 74 65 78        ** for tex
13840 74 20 61 6e 64 20 62 6c 6f 62 20 61 6e 64 20 77  t and blob and w
13850 68 61 74 65 76 65 72 20 69 73 20 69 6e 20 74 68  hatever is in th
13860 65 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20  e payloadSize64 
13870 76 61 72 69 61 62 6c 65 0a 20 20 20 20 20 20 2a  variable.      *
13880 2a 20 77 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20  * will work for 
13890 65 76 65 72 79 74 68 69 6e 67 20 65 6c 73 65 2e  everything else.
138a0 20 20 43 6f 6e 74 65 6e 74 20 69 73 20 61 6c 73    Content is als
138b0 6f 20 69 72 72 65 6c 65 76 61 6e 74 20 69 66 0a  o irrelevant if.
138c0 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63 6f 6e        ** the con
138d0 74 65 6e 74 20 6c 65 6e 67 74 68 20 69 73 20 30  tent length is 0
138e0 2e 20 2a 2f 0a 20 20 20 20 20 20 7a 44 61 74 61  . */.      zData
138f0 20 3d 20 74 3c 3d 31 33 20 3f 20 28 75 38 2a 29   = t<=13 ? (u8*)
13900 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 3a  &payloadSize64 :
13910 20 30 3b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 7a   0;.      sMem.z
13920 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20  Malloc = 0;.    
13930 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d  }else{.      mem
13940 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69  set(&sMem, 0, si
13950 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 20  zeof(sMem));.   
13960 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
13970 6d 4d 6f 76 65 28 26 73 4d 65 6d 2c 20 70 44 65  mMove(&sMem, pDe
13980 73 74 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  st);.      rc = 
13990 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
139a0 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 61  omBtree(pCrsr, a
139b0 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c  Offset[p2], len,
139c0 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 0a 20   !pC->isTable,. 
139d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139f0 20 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20    &sMem);.      
13a00 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
13a10 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  K ){.        got
13a20 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f  o op_column_erro
13a30 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
13a40 20 7a 44 61 74 61 20 3d 20 28 75 38 2a 29 73 4d   zData = (u8*)sM
13a50 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20  em.z;.    }.    
13a60 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
13a70 6c 47 65 74 28 7a 44 61 74 61 2c 20 74 2c 20 70  lGet(zData, t, p
13a80 44 65 73 74 29 3b 0a 20 20 20 20 2f 2a 20 49 66  Dest);.    /* If
13a90 20 77 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   we dynamically 
13aa0 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20  allocated space 
13ab0 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61  to hold the data
13ac0 20 28 69 6e 20 74 68 65 0a 20 20 20 20 2a 2a 20   (in the.    ** 
13ad0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
13ae0 6f 6d 42 74 72 65 65 28 29 20 63 61 6c 6c 20 61  omBtree() call a
13af0 62 6f 76 65 29 20 74 68 65 6e 20 74 72 61 6e 73  bove) then trans
13b00 66 65 72 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74  fer control of t
13b10 68 61 74 0a 20 20 20 20 2a 2a 20 64 79 6e 61 6d  hat.    ** dynam
13b20 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
13b30 20 73 70 61 63 65 20 6f 76 65 72 20 74 6f 20 74   space over to t
13b40 68 65 20 70 44 65 73 74 20 73 74 72 75 63 74 75  he pDest structu
13b50 72 65 2e 0a 20 20 20 20 2a 2a 20 54 68 69 73 20  re..    ** This 
13b60 70 72 65 76 65 6e 74 73 20 61 20 6d 65 6d 6f 72  prevents a memor
13b70 79 20 63 6f 70 79 2e 20 2a 2f 0a 20 20 20 20 69  y copy. */.    i
13b80 66 28 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20  f( sMem.zMalloc 
13b90 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
13ba0 20 73 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d   sMem.z==sMem.zM
13bb0 61 6c 6c 6f 63 20 29 3b 0a 20 20 20 20 20 20 61  alloc );.      a
13bc0 73 73 65 72 74 28 20 21 28 70 44 65 73 74 2d 3e  ssert( !(pDest->
13bd0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29  flags & MEM_Dyn)
13be0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
13bf0 28 20 21 28 70 44 65 73 74 2d 3e 66 6c 61 67 73  ( !(pDest->flags
13c00 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d   & (MEM_Blob|MEM
13c10 5f 53 74 72 29 29 20 7c 7c 20 70 44 65 73 74 2d  _Str)) || pDest-
13c20 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20 20  >z==sMem.z );.  
13c30 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
13c40 20 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c   &= ~(MEM_Ephem|
13c50 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20  MEM_Static);.   
13c60 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20     pDest->flags 
13c70 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20  |= MEM_Term;.   
13c80 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 73 4d     pDest->z = sM
13c90 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 70 44 65 73  em.z;.      pDes
13ca0 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73 4d 65  t->zMalloc = sMe
13cb0 6d 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 7d  m.zMalloc;.    }
13cc0 0a 20 20 7d 0a 20 20 70 44 65 73 74 2d 3e 65 6e  .  }.  pDest->en
13cd0 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 0a 6f  c = encoding;..o
13ce0 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20  p_column_out:.  
13cf0 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70  Deephemeralize(p
13d00 44 65 73 74 29 3b 0a 6f 70 5f 63 6f 6c 75 6d 6e  Dest);.op_column
13d10 5f 65 72 72 6f 72 3a 0a 20 20 55 50 44 41 54 45  _error:.  UPDATE
13d20 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44  _MAX_BLOBSIZE(pD
13d30 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52  est);.  REGISTER
13d40 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
13d50 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b  pDest);.  break;
13d60 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
13d70 66 66 69 6e 69 74 79 20 50 31 20 50 32 20 2a 20  ffinity P1 P2 * 
13d80 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
13d90 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31 40  : affinity(r[P1@
13da0 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79  P2]).**.** Apply
13db0 20 61 66 66 69 6e 69 74 69 65 73 20 74 6f 20 61   affinities to a
13dc0 20 72 61 6e 67 65 20 6f 66 20 50 32 20 72 65 67   range of P2 reg
13dd0 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20  isters starting 
13de0 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50  with P1..**.** P
13df0 34 20 69 73 20 61 20 73 74 72 69 6e 67 20 74 68  4 is a string th
13e00 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74  at is P2 charact
13e10 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74  ers long. The nt
13e20 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74  h character of t
13e30 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64  he.** string ind
13e40 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d  icates the colum
13e50 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20  n affinity that 
13e60 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66  should be used f
13e70 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65  or the nth.** me
13e80 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 65  mory cell in the
13e90 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20   range..*/.case 
13ea0 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20  OP_Affinity: {. 
13eb0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 66   const char *zAf
13ec0 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68 65  finity;   /* The
13ed0 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20   affinity to be 
13ee0 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 63 68 61  applied */.  cha
13ef0 72 20 63 41 66 66 3b 20 20 20 20 20 20 20 20 20  r cAff;         
13f00 20 20 20 20 20 20 2f 2a 20 41 20 73 69 6e 67 6c        /* A singl
13f10 65 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 61  e character of a
13f20 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a 41  ffinity */..  zA
13f30 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
13f40 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 7a  4.z;.  assert( z
13f50 41 66 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20  Affinity!=0 );. 
13f60 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69   assert( zAffini
13f70 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29  ty[pOp->p2]==0 )
13f80 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
13f90 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69  [pOp->p1];.  whi
13fa0 6c 65 28 20 28 63 41 66 66 20 3d 20 2a 28 7a 41  le( (cAff = *(zA
13fb0 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d 30 20 29  ffinity++))!=0 )
13fc0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  {.    assert( pI
13fd0 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28  n1 <= &p->aMem[(
13fe0 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
13ff0 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  or)] );.    asse
14000 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
14010 49 6e 31 29 20 29 3b 0a 20 20 20 20 61 70 70 6c  In1) );.    appl
14020 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
14030 63 41 66 66 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  cAff, encoding);
14040 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d  .    pIn1++;.  }
14050 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
14060 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f  Opcode: MakeReco
14070 72 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  rd P1 P2 P3 P4 *
14080 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
14090 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31 40 50  P3]=mkrec(r[P1@P
140a0 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72  2]).**.** Conver
140b0 74 20 50 32 20 72 65 67 69 73 74 65 72 73 20 62  t P2 registers b
140c0 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 31  eginning with P1
140d0 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63 6f 72   into the [recor
140e0 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73 65  d format].** use
140f0 20 61 73 20 61 20 64 61 74 61 20 72 65 63 6f 72   as a data recor
14100 64 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20  d in a database 
14110 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b 65  table or as a ke
14120 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78  y.** in an index
14130 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  .  The OP_Column
14140 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65 63 6f   opcode can deco
14150 64 65 20 74 68 65 20 72 65 63 6f 72 64 20 6c 61  de the record la
14160 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61  ter..**.** P4 ma
14170 79 20 62 65 20 61 20 73 74 72 69 6e 67 20 74 68  y be a string th
14180 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74  at is P2 charact
14190 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e  ers long.  The n
141a0 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  th character of 
141b0 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e  the.** string in
141c0 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75  dicates the colu
141d0 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74  mn affinity that
141e0 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
141f0 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66  for the nth.** f
14200 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e 64 65  ield of the inde
14210 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  x key..**.** The
14220 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 63 68   mapping from ch
14230 61 72 61 63 74 65 72 20 74 6f 20 61 66 66 69 6e  aracter to affin
14240 69 74 79 20 69 73 20 67 69 76 65 6e 20 62 79 20  ity is given by 
14250 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a  the SQLITE_AFF_.
14260 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65  ** macros define
14270 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68  d in sqliteInt.h
14280 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73  ..**.** If P4 is
14290 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69   NULL then all i
142a0 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61 76 65  ndex fields have
142b0 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 4e 4f   the affinity NO
142c0 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  NE..*/.case OP_M
142d0 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20 75  akeRecord: {.  u
142e0 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20  8 *zNewRecord;  
142f0 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66 65        /* A buffe
14300 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61  r to hold the da
14310 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72  ta for the new r
14320 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ecord */.  Mem *
14330 70 52 65 63 3b 20 20 20 20 20 20 20 20 20 20 20  pRec;           
14340 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63    /* The new rec
14350 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61  ord */.  u64 nDa
14360 74 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ta;             
14370 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
14380 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65  es of data space
14390 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20   */.  int nHdr; 
143a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
143b0 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
143c0 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20  of header space 
143d0 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 20  */.  i64 nByte; 
143e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
143f0 61 74 61 20 73 70 61 63 65 20 72 65 71 75 69 72  ata space requir
14400 65 64 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f  ed for this reco
14410 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72  rd */.  int nZer
14420 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  o;             /
14430 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f  * Number of zero
14440 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e   bytes at the en
14450 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
14460 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74  */.  int nVarint
14470 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
14480 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
14490 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20  n a varint */.  
144a0 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b  u32 serial_type;
144b0 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66         /* Type f
144c0 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ield */.  Mem *p
144d0 44 61 74 61 30 3b 20 20 20 20 20 20 20 20 20 20  Data0;          
144e0 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20   /* First field 
144f0 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69  to be combined i
14500 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a  nto the record *
14510 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20  /.  Mem *pLast; 
14520 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61             /* La
14530 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20  st field of the 
14540 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
14550 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
14560 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14570 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
14580 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  cord */.  char *
14590 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20  zAffinity;      
145a0 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
145b0 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20   string for the 
145c0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
145d0 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20  file_format;    
145e0 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61     /* File forma
145f0 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63  t to use for enc
14600 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69  oding */.  int i
14610 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
14620 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20    /* Space used 
14630 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20  in zNewRecord[] 
14640 68 65 61 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20  header */.  int 
14650 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  j;              
14660 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64     /* Space used
14670 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d   in zNewRecord[]
14680 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 69 6e   content */.  in
14690 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  t len;          
146a0 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f       /* Length o
146b0 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20 20  f a field */..  
146c0 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65 20  /* Assuming the 
146d0 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20  record contains 
146e0 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72 65  N fields, the re
146f0 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b  cord format look
14700 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73  s.  ** like this
14710 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d  :.  **.  ** ----
14720 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14730 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14740 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14750 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14760 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d  ----.  ** | hdr-
14770 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c 20  size | type 0 | 
14780 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74  type 1 | ... | t
14790 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30 20  ype N-1 | data0 
147a0 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31  | ... | data N-1
147b0 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d   | .  ** -------
147c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
147d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
147e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
147f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14800 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61  -.  **.  ** Data
14810 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72 6f  (0) is taken fro
14820 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  m register P1.  
14830 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66 72  Data(1) comes fr
14840 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b 31  om register P1+1
14850 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 72 6f  .  ** and so fro
14860 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61  th..  **.  ** Ea
14870 63 68 20 74 79 70 65 20 66 69 65 6c 64 20 69 73  ch type field is
14880 20 61 20 76 61 72 69 6e 74 20 72 65 70 72 65 73   a varint repres
14890 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69 61  enting the seria
148a0 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a 20  l type of the . 
148b0 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e   ** correspondin
148c0 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20 28  g data element (
148d0 73 65 65 20 73 71 6c 69 74 65 33 56 64 62 65 53  see sqlite3VdbeS
148e0 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54 68  erialType()). Th
148f0 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20  e.  ** hdr-size 
14900 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61 20  field is also a 
14910 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20  varint which is 
14920 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20  the offset from 
14930 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20  the beginning.  
14940 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ** of the record
14950 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a   to data0..  */.
14960 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20 20 20    nData = 0;    
14970 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14980 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20  f bytes of data 
14990 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72 20  space */.  nHdr 
149a0 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  = 0;          /*
149b0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
149c0 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65   of header space
149d0 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30 3b   */.  nZero = 0;
149e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
149f0 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73  er of zero bytes
14a00 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
14a10 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e  he record */.  n
14a20 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b  Field = pOp->p1;
14a30 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70  .  zAffinity = p
14a40 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65  Op->p4.z;.  asse
14a50 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26 20  rt( nField>0 && 
14a60 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
14a70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 28 70 2d  ->p2+nField<=(p-
14a80 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
14a90 29 2b 31 20 29 3b 0a 20 20 70 44 61 74 61 30 20  )+1 );.  pData0 
14aa0 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b  = &aMem[nField];
14ab0 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d  .  nField = pOp-
14ac0 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26  >p2;.  pLast = &
14ad0 70 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d  pData0[nField-1]
14ae0 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ;.  file_format 
14af0 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c  = p->minWriteFil
14b00 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49  eFormat;..  /* I
14b10 64 65 6e 74 69 66 79 20 74 68 65 20 6f 75 74 70  dentify the outp
14b20 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 20  ut register */. 
14b30 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
14b40 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d  <pOp->p1 || pOp-
14b50 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70  >p3>=pOp->p1+pOp
14b60 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d  ->p2 );.  pOut =
14b70 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
14b80 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
14b90 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20  nge(p, pOut);.. 
14ba0 20 2f 2a 20 41 70 70 6c 79 20 74 68 65 20 72 65   /* Apply the re
14bb0 71 75 65 73 74 65 64 20 61 66 66 69 6e 69 74 79  quested affinity
14bc0 20 74 6f 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20   to all inputs. 
14bd0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 44   */.  assert( pD
14be0 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20  ata0<=pLast );. 
14bf0 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20 29   if( zAffinity )
14c00 7b 0a 20 20 20 20 70 52 65 63 20 3d 20 70 44 61  {.    pRec = pDa
14c10 74 61 30 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20  ta0;.    do{.   
14c20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
14c30 28 70 52 65 63 2b 2b 2c 20 2a 28 7a 41 66 66 69  (pRec++, *(zAffi
14c40 6e 69 74 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e  nity++), encodin
14c50 67 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  g);.      assert
14c60 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d  ( zAffinity[0]==
14c70 30 20 7c 7c 20 70 52 65 63 3c 3d 70 4c 61 73 74  0 || pRec<=pLast
14c80 20 29 3b 0a 20 20 20 20 7d 77 68 69 6c 65 28 20   );.    }while( 
14c90 7a 41 66 66 69 6e 69 74 79 5b 30 5d 20 29 3b 0a  zAffinity[0] );.
14ca0 20 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74    }..  /* Loop t
14cb0 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65 6d 65  hrough the eleme
14cc0 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20 6d 61  nts that will ma
14cd0 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f 72 64  ke up the record
14ce0 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a 20   to figure.  ** 
14cf0 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73 70 61  out how much spa
14d00 63 65 20 69 73 20 72 65 71 75 69 72 65 64 20 66  ce is required f
14d10 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72  or the new recor
14d20 64 2e 0a 20 20 2a 2f 0a 20 20 70 52 65 63 20 3d  d..  */.  pRec =
14d30 20 70 4c 61 73 74 3b 0a 20 20 64 6f 7b 0a 20 20   pLast;.  do{.  
14d40 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
14d50 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20  alid(pRec) );.  
14d60 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20    serial_type = 
14d70 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
14d80 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65  lType(pRec, file
14d90 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c 65  _format);.    le
14da0 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  n = sqlite3VdbeS
14db0 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 73 65 72  erialTypeLen(ser
14dc0 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69  ial_type);.    i
14dd0 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
14de0 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
14df0 20 20 20 69 66 28 20 6e 44 61 74 61 20 29 7b 0a     if( nData ){.
14e00 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
14e10 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62  dbeMemExpandBlob
14e20 28 70 52 65 63 29 3b 0a 20 20 20 20 20 20 7d 65  (pRec);.      }e
14e30 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65  lse{.        nZe
14e40 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a  ro += pRec->u.nZ
14e50 65 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e  ero;.        len
14e60 20 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72   -= pRec->u.nZer
14e70 6f 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  o;.      }.    }
14e80 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65  .    nData += le
14e90 6e 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  n;.    testcase(
14ea0 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32   serial_type==12
14eb0 37 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73  7 );.    testcas
14ec0 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d  e( serial_type==
14ed0 31 32 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20  128 );.    nHdr 
14ee0 2b 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d  += serial_type<=
14ef0 31 32 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65  127 ? 1 : sqlite
14f00 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61  3VarintLen(seria
14f10 6c 5f 74 79 70 65 29 3b 0a 20 20 7d 77 68 69 6c  l_type);.  }whil
14f20 65 28 20 28 2d 2d 70 52 65 63 29 3e 3d 70 44 61  e( (--pRec)>=pDa
14f30 74 61 30 20 29 3b 0a 0a 20 20 2f 2a 20 41 64 64  ta0 );..  /* Add
14f40 20 74 68 65 20 69 6e 69 74 69 61 6c 20 68 65 61   the initial hea
14f50 64 65 72 20 76 61 72 69 6e 74 20 61 6e 64 20 74  der varint and t
14f60 6f 74 61 6c 20 74 68 65 20 73 69 7a 65 20 2a 2f  otal the size */
14f70 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64  .  testcase( nHd
14f80 72 3d 3d 31 32 36 20 29 3b 0a 20 20 74 65 73 74  r==126 );.  test
14f90 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 37 20  case( nHdr==127 
14fa0 29 3b 0a 20 20 69 66 28 20 6e 48 64 72 3c 3d 31  );.  if( nHdr<=1
14fb0 32 36 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  26 ){.    /* The
14fc0 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a   common case */.
14fd0 20 20 20 20 6e 48 64 72 20 2b 3d 20 31 3b 0a 20      nHdr += 1;. 
14fe0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 52   }else{.    /* R
14ff0 61 72 65 20 63 61 73 65 20 6f 66 20 61 20 72 65  are case of a re
15000 61 6c 6c 79 20 6c 61 72 67 65 20 68 65 61 64 65  ally large heade
15010 72 20 2a 2f 0a 20 20 20 20 6e 56 61 72 69 6e 74  r */.    nVarint
15020 20 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74   = sqlite3Varint
15030 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20 20 20 6e  Len(nHdr);.    n
15040 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a  Hdr += nVarint;.
15050 20 20 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c      if( nVarint<
15060 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
15070 28 6e 48 64 72 29 20 29 20 6e 48 64 72 2b 2b 3b  (nHdr) ) nHdr++;
15080 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e  .  }.  nByte = n
15090 48 64 72 2b 6e 44 61 74 61 3b 0a 20 20 69 66 28  Hdr+nData;.  if(
150a0 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69   nByte>db->aLimi
150b0 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
150c0 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
150d0 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
150e0 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
150f0 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  the output regis
15100 74 65 72 20 68 61 73 20 61 20 62 75 66 66 65 72  ter has a buffer
15110 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f   large enough to
15120 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65   store .  ** the
15130 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65   new record. The
15140 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72   output register
15150 20 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f   (pOp->p3) is no
15160 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a  t allowed to.  *
15170 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20  * be one of the 
15180 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20  input registers 
15190 28 62 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c  (because the fol
151a0 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20  lowing call to. 
151b0 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d   ** sqlite3VdbeM
151c0 65 6d 47 72 6f 77 28 29 20 63 6f 75 6c 64 20 63  emGrow() could c
151d0 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75 65  lobber the value
151e0 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75 73   before it is us
151f0 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ed)..  */.  if( 
15200 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
15210 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42  ow(pOut, (int)nB
15220 79 74 65 2c 20 30 29 20 29 7b 0a 20 20 20 20 67  yte, 0) ){.    g
15230 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
15240 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28    zNewRecord = (
15250 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20  u8 *)pOut->z;.. 
15260 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72 65   /* Write the re
15270 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75  cord */.  i = pu
15280 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65  tVarint32(zNewRe
15290 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a  cord, nHdr);.  j
152a0 20 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73 65 72   = nHdr;.  asser
152b0 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74  t( pData0<=pLast
152c0 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61   );.  pRec = pDa
152d0 74 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73  ta0;.  do{.    s
152e0 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c  erial_type = sql
152f0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
15300 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f  pe(pRec, file_fo
15310 72 6d 61 74 29 3b 0a 20 20 20 20 69 20 2b 3d 20  rmat);.    i += 
15320 70 75 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65  putVarint32(&zNe
15330 77 52 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69  wRecord[i], seri
15340 61 6c 5f 74 79 70 65 29 3b 20 20 20 20 20 20 20  al_type);       
15350 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74       /* serial t
15360 79 70 65 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20  ype */.    j += 
15370 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
15380 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64  lPut(&zNewRecord
15390 5b 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69 61  [j], pRec, seria
153a0 6c 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74  l_type); /* cont
153b0 65 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28  ent */.  }while(
153c0 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74   (++pRec)<=pLast
153d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3d   );.  assert( i=
153e0 3d 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65 72  =nHdr );.  asser
153f0 74 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a  t( j==nByte );..
15400 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
15410 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
15420 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
15430 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  sor) );.  pOut->
15440 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a  n = (int)nByte;.
15450 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
15460 4d 45 4d 5f 42 6c 6f 62 20 7c 20 4d 45 4d 5f 44  MEM_Blob | MEM_D
15470 79 6e 3b 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c  yn;.  pOut->xDel
15480 20 3d 20 30 3b 0a 20 20 69 66 28 20 6e 5a 65 72   = 0;.  if( nZer
15490 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  o ){.    pOut->u
154a0 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a  .nZero = nZero;.
154b0 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
154c0 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d  |= MEM_Zero;.  }
154d0 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53  .  pOut->enc = S
154e0 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20  QLITE_UTF8;  /* 
154f0 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62  In case the blob
15500 20 69 73 20 65 76 65 72 20 63 6f 6e 76 65 72 74   is ever convert
15510 65 64 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20  ed to text */.  
15520 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
15530 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20  Op->p3, pOut);. 
15540 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
15550 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
15560 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
15570 65 3a 20 43 6f 75 6e 74 20 50 31 20 50 32 20 2a  e: Count P1 P2 *
15580 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
15590 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e 74 28 29 0a  : r[P2]=count().
155a0 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  **.** Store the 
155b0 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  number of entrie
155c0 73 20 28 61 6e 20 69 6e 74 65 67 65 72 20 76 61  s (an integer va
155d0 6c 75 65 29 20 69 6e 20 74 68 65 20 74 61 62 6c  lue) in the tabl
155e0 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f  e or index .** o
155f0 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20  pened by cursor 
15600 50 31 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  P1 in register P
15610 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  2.*/.#ifndef SQL
15620 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f  ITE_OMIT_BTREECO
15630 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e  UNT.case OP_Coun
15640 74 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  t: {         /* 
15650 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
15660 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b  */.  i64 nEntry;
15670 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
15680 73 72 3b 0a 0a 20 20 70 43 72 73 72 20 3d 20 70  sr;..  pCrsr = p
15690 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
156a0 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  ->pCursor;.  ass
156b0 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20  ert( pCrsr );.  
156c0 6e 45 6e 74 72 79 20 3d 20 30 3b 20 20 2f 2a 20  nEntry = 0;  /* 
156d0 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
156e0 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63  y used to silenc
156f0 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
15700 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
15710 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20  reeCount(pCrsr, 
15720 26 6e 45 6e 74 72 79 29 3b 0a 20 20 70 4f 75 74  &nEntry);.  pOut
15730 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a  ->u.i = nEntry;.
15740 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
15750 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61  f../* Opcode: Sa
15760 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50  vepoint P1 * * P
15770 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20  4 *.**.** Open, 
15780 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62  release or rollb
15790 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e  ack the savepoin
157a0 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d  t named by param
157b0 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69  eter P4, dependi
157c0 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c  ng.** on the val
157d0 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65  ue of P1. To ope
157e0 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  n a new savepoin
157f0 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c  t, P1==0. To rel
15800 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e  ease (commit) an
15810 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76  .** existing sav
15820 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f  epoint, P1==1, o
15830 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e  r to rollback an
15840 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f   existing savepo
15850 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61  int P1==2..*/.ca
15860 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a  se OP_Savepoint:
15870 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20   {.  int p1;    
15880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15890 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66       /* Value of
158a0 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20   P1 operand */. 
158b0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
158c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158d0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65   /* Name of save
158e0 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  point */.  int n
158f0 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e  Name;.  Savepoin
15900 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70  t *pNew;.  Savep
15910 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
15920 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
15930 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65  Tmp;.  int iSave
15940 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b  point;.  int ii;
15950 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ..  p1 = pOp->p1
15960 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d  ;.  zName = pOp-
15970 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73  >p4.z;..  /* Ass
15980 65 72 74 20 74 68 61 74 20 74 68 65 20 70 31 20  ert that the p1 
15990 70 61 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c  parameter is val
159a0 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66  id. Also that if
159b0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65   there is no ope
159c0 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69  n.  ** transacti
159d0 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63  on, then there c
159e0 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76  annot be any sav
159f0 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20  epoints. .  */. 
15a00 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61   assert( db->pSa
15a10 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62  vepoint==0 || db
15a20 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
15a30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d  );.  assert( p1=
15a40 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e  =SAVEPOINT_BEGIN
15a50 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ||p1==SAVEPOINT_
15a60 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56  RELEASE||p1==SAV
15a70 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
15a80 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
15a90 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64  >pSavepoint || d
15aa0 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
15ab0 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a  Savepoint==0 );.
15ac0 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53    assert( checkS
15ad0 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62  avepointCount(db
15ae0 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
15af0 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a  ->bIsReader );..
15b00 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
15b10 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20  INT_BEGIN ){.   
15b20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72   if( db->nVdbeWr
15b30 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f  ite>0 ){.      /
15b40 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  * A new savepoin
15b50 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61  t cannot be crea
15b60 74 65 64 20 69 66 20 74 68 65 72 65 20 61 72 65  ted if there are
15b70 20 61 63 74 69 76 65 20 77 72 69 74 65 20 0a 20   active write . 
15b80 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e       ** statemen
15b90 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65  ts (i.e. open re
15ba0 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65  ad/write increme
15bb0 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65  ntal blob handle
15bc0 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  s)..      */.   
15bd0 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
15be0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
15bf0 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65   db, "cannot ope
15c00 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a  n savepoint - ".
15c10 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61          "SQL sta
15c20 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
15c30 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20  ess");.      rc 
15c40 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
15c50 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
15c60 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 53  nName = sqlite3S
15c70 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a  trlen30(zName);.
15c80 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
15c90 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
15ca0 45 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20  E.      /* This 
15cb0 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76 65 6e 20  call is Ok even 
15cc0 69 66 20 74 68 69 73 20 73 61 76 65 70 6f 69 6e  if this savepoin
15cd0 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20  t is actually a 
15ce0 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 20 20  transaction.    
15cf0 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 20 28    ** savepoint (
15d00 61 6e 64 20 74 68 65 72 65 66 6f 72 65 20 73 68  and therefore sh
15d10 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d 70 74 20  ould not prompt 
15d20 78 53 61 76 65 70 6f 69 6e 74 28 29 29 20 63 61  xSavepoint()) ca
15d30 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20 20 20 2a  llbacks..      *
15d40 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 20 74  * If this is a t
15d50 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
15d60 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 6e 65  oint being opene
15d70 64 2c 20 69 74 20 69 73 20 67 75 61 72 61 6e 74  d, it is guarant
15d80 65 65 64 0a 20 20 20 20 20 20 2a 2a 20 74 68 61  eed.      ** tha
15d90 74 20 74 68 65 20 64 62 2d 3e 61 56 54 72 61 6e  t the db->aVTran
15da0 73 5b 5d 20 61 72 72 61 79 20 69 73 20 65 6d 70  s[] array is emp
15db0 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20 20 61 73  ty.  */.      as
15dc0 73 65 72 74 28 20 64 62 2d 3e 61 75 74 6f 43 6f  sert( db->autoCo
15dd0 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e  mmit==0 || db->n
15de0 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a 20 20 20  VTrans==0 );.   
15df0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
15e00 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c  tabSavepoint(db,
15e10 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e   SAVEPOINT_BEGIN
15e20 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
15e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e40 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74    db->nStatement
15e50 2b 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 29  +db->nSavepoint)
15e60 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
15e70 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
15e80 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
15e90 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20  ror;.#endif..   
15ea0 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e     /* Create a n
15eb0 65 77 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72  ew savepoint str
15ec0 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20  ucture. */.     
15ed0 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44   pNew = sqlite3D
15ee0 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73  bMallocRaw(db, s
15ef0 69 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29  izeof(Savepoint)
15f00 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20  +nName+1);.     
15f10 20 69 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20   if( pNew ){.   
15f20 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65       pNew->zName
15f30 20 3d 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77   = (char *)&pNew
15f40 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d  [1];.        mem
15f50 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c  cpy(pNew->zName,
15f60 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29   zName, nName+1)
15f70 3b 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f  ;.    .        /
15f80 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  * If there is no
15f90 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f   open transactio
15fa0 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69  n, then mark thi
15fb0 73 20 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20  s as a special. 
15fc0 20 20 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73         ** "trans
15fd0 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
15fe0 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  ". */.        if
15ff0 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  ( db->autoCommit
16000 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62   ){.          db
16010 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30  ->autoCommit = 0
16020 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
16030 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
16040 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20  epoint = 1;.    
16050 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
16060 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f       db->nSavepo
16070 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  int++;.        }
16080 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a  .    .        /*
16090 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61   Link the new sa
160a0 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65  vepoint into the
160b0 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
160c0 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20  's list. */.    
160d0 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20      pNew->pNext 
160e0 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
160f0 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
16100 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b  avepoint = pNew;
16110 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e  .        pNew->n
16120 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 64  DeferredCons = d
16130 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
16140 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  ;.        pNew->
16150 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
16160 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   = db->nDeferred
16170 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d  ImmCons;.      }
16180 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
16190 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d      iSavepoint =
161a0 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64   0;..    /* Find
161b0 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76 65 70   the named savep
161c0 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65 20 69  oint. If there i
161d0 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f  s no such savepo
161e0 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20  int, then an.   
161f0 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69 73 20   ** an error is 
16200 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20  returned to the 
16210 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f  user.  */.    fo
16220 72 28 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  r(.      pSavepo
16230 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70  int = db->pSavep
16240 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70 53 61  oint; .      pSa
16250 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c 69 74  vepoint && sqlit
16260 65 33 53 74 72 49 43 6d 70 28 70 53 61 76 65 70  e3StrICmp(pSavep
16270 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61  oint->zName, zNa
16280 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61 76 65  me);.      pSave
16290 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69  point = pSavepoi
162a0 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b  nt->pNext.    ){
162b0 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e  .      iSavepoin
162c0 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  t++;.    }.    i
162d0 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74 20 29  f( !pSavepoint )
162e0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  {.      sqlite3S
162f0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
16300 72 4d 73 67 2c 20 64 62 2c 20 22 6e 6f 20 73 75  rMsg, db, "no su
16310 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20 25 73  ch savepoint: %s
16320 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  ", zName);.     
16330 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
16340 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  OR;.    }else if
16350 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65  ( db->nVdbeWrite
16360 3e 30 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f  >0 && p1==SAVEPO
16370 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20  INT_RELEASE ){. 
16380 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f       /* It is no
16390 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 65  t possible to re
163a0 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61  lease (commit) a
163b0 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20 74 68   savepoint if th
163c0 65 72 65 20 61 72 65 20 0a 20 20 20 20 20 20 2a  ere are .      *
163d0 2a 20 61 63 74 69 76 65 20 77 72 69 74 65 20 73  * active write s
163e0 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 20 20 20  tatements..     
163f0 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
16400 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
16410 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20  ErrMsg, db, .   
16420 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 72 65 6c       "cannot rel
16430 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d  ease savepoint -
16440 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
16450 69 6e 20 70 72 6f 67 72 65 73 73 22 0a 20 20 20  in progress".   
16460 20 20 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d     );.      rc =
16470 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
16480 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20    }else{..      
16490 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65  /* Determine whe
164a0 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69 73  ther or not this
164b0 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f   is a transactio
164c0 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20  n savepoint. If 
164d0 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64  so,.      ** and
164e0 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41   this is a RELEA
164f0 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e  SE command, then
16500 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
16510 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20 20  nsaction .      
16520 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e  ** is committed.
16530 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20   .      */.     
16540 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74 69   int isTransacti
16550 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  on = pSavepoint-
16560 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62 2d  >pNext==0 && db-
16570 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
16580 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69  vepoint;.      i
16590 66 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  f( isTransaction
165a0 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e   && p1==SAVEPOIN
165b0 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  T_RELEASE ){.   
165c0 20 20 20 20 20 69 66 28 20 28 72 63 20 3d 20 73       if( (rc = s
165d0 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
165e0 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45  k(p, 1))!=SQLITE
165f0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
16600 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
16610 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  n;.        }.   
16620 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
16630 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  mit = 1;.       
16640 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
16650 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f  Halt(p)==SQLITE_
16660 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20  BUSY ){.        
16670 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20    p->pc = pc;.  
16680 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
16690 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20  Commit = 0;.    
166a0 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
166b0 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
166c0 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76            goto v
166d0 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
166e0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62      }.        db
166f0 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
16700 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20  avepoint = 0;.  
16710 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63        rc = p->rc
16720 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
16730 20 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e         iSavepoin
16740 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69  t = db->nSavepoi
16750 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20  nt - iSavepoint 
16760 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  - 1;.        if(
16770 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
16780 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20  OLLBACK ){.     
16790 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69       for(ii=0; i
167a0 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29  i<db->nDb; ii++)
167b0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  {.            sq
167c0 6c 69 74 65 33 42 74 72 65 65 54 72 69 70 41 6c  lite3BtreeTripAl
167d0 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e 61 44 62  lCursors(db->aDb
167e0 5b 69 69 5d 2e 70 42 74 2c 20 53 51 4c 49 54 45  [ii].pBt, SQLITE
167f0 5f 41 42 4f 52 54 29 3b 0a 20 20 20 20 20 20 20  _ABORT);.       
16800 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
16810 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b         for(ii=0;
16820 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b   ii<db->nDb; ii+
16830 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63  +){.          rc
16840 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53   = sqlite3BtreeS
16850 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62  avepoint(db->aDb
16860 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53  [ii].pBt, p1, iS
16870 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
16880 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
16890 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
168a0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
168b0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
168c0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
168d0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
168e0 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
168f0 4f 4c 4c 42 41 43 4b 20 26 26 20 28 64 62 2d 3e  OLLBACK && (db->
16900 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 49 6e 74  flags&SQLITE_Int
16910 65 72 6e 43 68 61 6e 67 65 73 29 21 3d 30 20 29  ernChanges)!=0 )
16920 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
16930 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
16940 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b  dStatements(db);
16950 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
16960 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61  e3ResetAllSchema
16970 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62  sOfConnection(db
16980 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  );.          db-
16990 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d 3e 66 6c  >flags = (db->fl
169a0 61 67 73 20 7c 20 53 51 4c 49 54 45 5f 49 6e 74  ags | SQLITE_Int
169b0 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a 20 20 20  ernChanges);.   
169c0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
169d0 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72   .      /* Regar
169e0 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
169f0 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41   this is a RELEA
16a00 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20  SE or ROLLBACK, 
16a10 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20  destroy all .   
16a20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73     ** savepoints
16a30 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f   nested inside o
16a40 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  f the savepoint 
16a50 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
16a60 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c  n. */.      whil
16a70 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  e( db->pSavepoin
16a80 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b  t!=pSavepoint ){
16a90 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20  .        pTmp = 
16aa0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a  db->pSavepoint;.
16ab0 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
16ac0 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70  epoint = pTmp->p
16ad0 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71  Next;.        sq
16ae0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
16af0 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64  pTmp);.        d
16b00 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b  b->nSavepoint--;
16b10 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
16b20 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20 52 45  /* If it is a RE
16b30 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74  LEASE, then dest
16b40 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e  roy the savepoin
16b50 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  t being operated
16b60 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f   on .      ** to
16b70 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20 52 4f  o. If it is a RO
16b80 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20  LLBACK TO, then 
16b90 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  set the number o
16ba0 66 20 64 65 66 65 72 72 65 64 20 0a 20 20 20 20  f deferred .    
16bb0 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20    ** constraint 
16bc0 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73 65  violations prese
16bd0 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nt in the databa
16be0 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  se to the value 
16bf0 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a 20  stored.      ** 
16c00 77 68 65 6e 20 74 68 65 20 73 61 76 65 70 6f 69  when the savepoi
16c10 6e 74 20 77 61 73 20 63 72 65 61 74 65 64 2e 20  nt was created. 
16c20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31   */.      if( p1
16c30 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
16c40 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61  ASE ){.        a
16c50 73 73 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e  ssert( pSavepoin
16c60 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  t==db->pSavepoin
16c70 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  t );.        db-
16c80 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53  >pSavepoint = pS
16c90 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b  avepoint->pNext;
16ca0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
16cb0 44 62 46 72 65 65 28 64 62 2c 20 70 53 61 76 65  DbFree(db, pSave
16cc0 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
16cd0 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69  if( !isTransacti
16ce0 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  on ){.          
16cf0 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d  db->nSavepoint--
16d00 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
16d10 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
16d20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
16d30 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  ns = pSavepoint-
16d40 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
16d50 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66          db->nDef
16d60 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70  erredImmCons = p
16d70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65  Savepoint->nDefe
16d80 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20  rredImmCons;.   
16d90 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20     }..      if( 
16da0 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29  !isTransaction )
16db0 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
16dc0 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
16dd0 69 6e 74 28 64 62 2c 20 70 31 2c 20 69 53 61 76  int(db, p1, iSav
16de0 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  epoint);.       
16df0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
16e00 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
16e10 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
16e20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
16e30 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
16e40 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d  Opcode: AutoComm
16e50 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  it P1 P2 * * *.*
16e60 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74  *.** Set the dat
16e70 61 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  abase auto-commi
16e80 74 20 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20  t flag to P1 (1 
16e90 6f 72 20 30 29 2e 20 49 66 20 50 32 20 69 73 20  or 0). If P2 is 
16ea0 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61  true, roll.** ba
16eb0 63 6b 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79  ck any currently
16ec0 20 61 63 74 69 76 65 20 62 74 72 65 65 20 74 72   active btree tr
16ed0 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74  ansactions. If t
16ee0 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74  here are any act
16ef0 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72  ive.** VMs (apar
16f00 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29  t from this one)
16f10 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43  , then a ROLLBAC
16f20 4b 20 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d  K fails.  A COMM
16f30 49 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74  IT fails if.** t
16f40 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20  here are active 
16f50 77 72 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61  writing VMs or a
16f60 63 74 69 76 65 20 56 4d 73 20 74 68 61 74 20 75  ctive VMs that u
16f70 73 65 20 73 68 61 72 65 64 20 63 61 63 68 65 2e  se shared cache.
16f80 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
16f90 72 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74  ruction causes t
16fa0 68 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a  he VM to halt..*
16fb0 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f  /.case OP_AutoCo
16fc0 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65  mmit: {.  int de
16fd0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b  siredAutoCommit;
16fe0 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b  .  int iRollback
16ff0 3b 0a 20 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43  ;.  int turnOnAC
17000 3b 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f  ;..  desiredAuto
17010 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31  Commit = pOp->p1
17020 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20  ;.  iRollback = 
17030 70 4f 70 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f  pOp->p2;.  turnO
17040 6e 41 43 20 3d 20 64 65 73 69 72 65 64 41 75 74  nAC = desiredAut
17050 6f 43 6f 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e  oCommit && !db->
17060 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73  autoCommit;.  as
17070 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74  sert( desiredAut
17080 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65  oCommit==1 || de
17090 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
170a0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
170b0 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
170c0 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63  t==1 || iRollbac
170d0 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  k==0 );.  assert
170e0 28 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76  ( db->nVdbeActiv
170f0 65 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65  e>0 );  /* At le
17100 61 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20  ast this one VM 
17110 69 73 20 61 63 74 69 76 65 20 2a 2f 0a 20 20 61  is active */.  a
17120 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
17130 64 65 72 20 29 3b 0a 0a 23 69 66 20 30 0a 20 20  der );..#if 0.  
17140 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20  if( turnOnAC && 
17150 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d  iRollback && db-
17160 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 31 20 29  >nVdbeActive>1 )
17170 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73  {.    /* If this
17180 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70   instruction imp
17190 6c 65 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42 41  lements a ROLLBA
171a0 43 4b 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73  CK and other VMs
171b0 20 61 72 65 0a 20 20 20 20 2a 2a 20 73 74 69 6c   are.    ** stil
171c0 6c 20 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20 61  l running, and a
171d0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
171e0 61 63 74 69 76 65 2c 20 72 65 74 75 72 6e 20 61  active, return a
171f0 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69  n error indicati
17200 6e 67 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74  ng.    ** that t
17210 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73  he other VMs mus
17220 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74  t complete first
17230 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71  . .    */.    sq
17240 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
17250 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
17260 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b  "cannot rollback
17270 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22   transaction - "
17280 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74  .        "SQL st
17290 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
172a0 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d  ress");.    rc =
172b0 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
172c0 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20 69  }else.#endif.  i
172d0 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 21  f( turnOnAC && !
172e0 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d  iRollback && db-
172f0 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b  >nVdbeWrite>0 ){
17300 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20  .    /* If this 
17310 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c  instruction impl
17320 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20  ements a COMMIT 
17330 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72  and other VMs ar
17340 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20 2a 2a  e writing.    **
17350 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   return an error
17360 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74   indicating that
17370 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d   the other VMs m
17380 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72  ust complete fir
17390 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20  st. .    */.    
173a0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
173b0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
173c0 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74  , "cannot commit
173d0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22   transaction - "
173e0 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74  .        "SQL st
173f0 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
17400 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d  ress");.    rc =
17410 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
17420 7d 65 6c 73 65 20 69 66 28 20 64 65 73 69 72 65  }else if( desire
17430 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d  dAutoCommit!=db-
17440 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20  >autoCommit ){. 
17450 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b     if( iRollback
17460 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
17470 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
17480 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20  mit==1 );.      
17490 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
174a0 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 41 42  ll(db, SQLITE_AB
174b0 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20  ORT_ROLLBACK);. 
174c0 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
174d0 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c  mit = 1;.    }el
174e0 73 65 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c  se if( (rc = sql
174f0 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
17500 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f  p, 1))!=SQLITE_O
17510 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
17520 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
17530 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62   }else{.      db
17540 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28  ->autoCommit = (
17550 75 38 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f  u8)desiredAutoCo
17560 6d 6d 69 74 3b 0a 20 20 20 20 20 20 69 66 28 20  mmit;.      if( 
17570 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
17580 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  p)==SQLITE_BUSY 
17590 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 70 63  ){.        p->pc
175a0 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20 64   = pc;.        d
175b0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
175c0 28 75 38 29 28 31 2d 64 65 73 69 72 65 64 41 75  (u8)(1-desiredAu
175d0 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20  toCommit);.     
175e0 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20     p->rc = rc = 
175f0 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
17600 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
17610 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20  eturn;.      }. 
17620 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28     }.    assert(
17630 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d   db->nStatement=
17640 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
17650 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73  3CloseSavepoints
17660 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d  (db);.    if( p-
17670 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  >rc==SQLITE_OK )
17680 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
17690 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65  ITE_DONE;.    }e
176a0 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
176b0 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
176c0 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62    }.    goto vdb
176d0 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73  e_return;.  }els
176e0 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  e{.    sqlite3Se
176f0 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
17700 4d 73 67 2c 20 64 62 2c 0a 20 20 20 20 20 20 20  Msg, db,.       
17710 20 28 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f   (!desiredAutoCo
17720 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74  mmit)?"cannot st
17730 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f  art a transactio
17740 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  n within a trans
17750 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20  action":(.      
17760 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63    (iRollback)?"c
17770 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d  annot rollback -
17780 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   no transaction 
17790 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20  is active":.    
177a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
177b0 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20  cannot commit - 
177c0 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
177d0 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20  s active"));.   
177e0 20 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20        .    rc = 
177f0 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
17800 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
17810 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63   Opcode: Transac
17820 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34  tion P1 P2 P3 P4
17830 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20   P5.**.** Begin 
17840 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  a transaction on
17850 20 64 61 74 61 62 61 73 65 20 50 31 20 69 66 20   database P1 if 
17860 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  a transaction is
17870 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20   not already.** 
17880 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50 32  active..** If P2
17890 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
178a0 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  en a write-trans
178b0 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
178c0 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20 72  d, or if a .** r
178d0 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ead-transaction 
178e0 69 73 20 61 6c 72 65 61 64 79 20 61 63 74 69 76  is already activ
178f0 65 2c 20 69 74 20 69 73 20 75 70 67 72 61 64 65  e, it is upgrade
17900 64 20 74 6f 20 61 20 77 72 69 74 65 2d 74 72 61  d to a write-tra
17910 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20  nsaction..** If 
17920 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e  P2 is zero, then
17930 20 61 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74   a read-transact
17940 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 0a  ion is started..
17950 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
17960 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
17970 61 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68  abase file on wh
17980 69 63 68 20 74 68 65 20 74 72 61 6e 73 61 63 74  ich the transact
17990 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65  ion is.** starte
179a0 64 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20 74  d.  Index 0 is t
179b0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
179c0 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20   file and index 
179d0 31 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65  1 is the.** file
179e0 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72   used for tempor
179f0 61 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64  ary tables.  Ind
17a00 69 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72  ices of 2 or mor
17a10 65 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a  e are used for.*
17a20 2a 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  * attached datab
17a30 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61  ases..**.** If a
17a40 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
17a50 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20 61 6e  on is started an
17a60 64 20 74 68 65 20 56 64 62 65 2e 75 73 65 73 53  d the Vdbe.usesS
17a70 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20  tmtJournal flag 
17a80 69 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73  is.** true (this
17a90 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 66 20   flag is set if 
17aa0 74 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64  the Vdbe may mod
17ab0 69 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ify more than on
17ac0 65 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a  e row and may.**
17ad0 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20   throw an ABORT 
17ae0 65 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74  exception), a st
17af0 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
17b00 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20  ion may also be 
17b10 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20  opened..** More 
17b20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20  specifically, a 
17b30 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
17b40 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20  ction is opened 
17b50 69 66 66 20 74 68 65 20 64 61 74 61 62 61 73 65  iff the database
17b60 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  .** connection i
17b70 73 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20  s currently not 
17b80 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f  in autocommit mo
17b90 64 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20  de, or if there 
17ba0 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74  are other.** act
17bb0 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  ive statements. 
17bc0 41 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  A statement tran
17bd0 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74  saction allows t
17be0 68 65 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20  he changes made 
17bf0 62 79 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20  by this.** VDBE 
17c00 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
17c10 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  k after an error
17c20 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20   without having 
17c30 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65  to roll back the
17c40 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73  .** entire trans
17c50 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72  action. If no er
17c60 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72  ror is encounter
17c70 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ed, the statemen
17c80 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  t transaction.**
17c90 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61   will automatica
17ca0 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20  lly commit when 
17cb0 74 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a  the VDBE halts..
17cc0 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74  **.** If P5!=0 t
17cd0 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20  hen this opcode 
17ce0 61 6c 73 6f 20 63 68 65 63 6b 73 20 74 68 65 20  also checks the 
17cf0 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61 67  schema cookie ag
17d00 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64 20  ainst P3.** and 
17d10 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72  the schema gener
17d20 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61 67  ation counter ag
17d30 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68 65  ainst P4..** The
17d40 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20   cookie changes 
17d50 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76  its value whenev
17d60 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
17d70 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a  schema changes..
17d80 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f  ** This operatio
17d90 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  n is used to det
17da0 65 63 74 20 77 68 65 6e 20 74 68 61 74 20 74 68  ect when that th
17db0 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61  e cookie has cha
17dc0 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74  nged.** and that
17dd0 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
17de0 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65  cess needs to re
17df0 72 65 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e  read the schema.
17e00 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 0a    If the schema.
17e10 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33 20  ** cookie in P3 
17e20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65  differs from the
17e30 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69   schema cookie i
17e40 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  n the database h
17e50 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20 74  eader or.** if t
17e60 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61  he schema genera
17e70 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e 20  tion counter in 
17e80 50 34 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20  P4 differs from 
17e90 74 68 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20 67  the current.** g
17ea0 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
17eb0 72 2c 20 74 68 65 6e 20 61 6e 20 53 51 4c 49 54  r, then an SQLIT
17ec0 45 5f 53 43 48 45 4d 41 20 65 72 72 6f 72 20 69  E_SCHEMA error i
17ed0 73 20 72 61 69 73 65 64 20 61 6e 64 20 65 78 65  s raised and exe
17ee0 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e  cution.** halts.
17ef0 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f 73 74    The sqlite3_st
17f00 65 70 28 29 20 77 72 61 70 70 65 72 20 66 75 6e  ep() wrapper fun
17f10 63 74 69 6f 6e 20 6d 69 67 68 74 20 74 68 65 6e  ction might then
17f20 20 72 65 70 72 65 70 61 72 65 20 74 68 65 0a 2a   reprepare the.*
17f30 2a 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20  * statement and 
17f40 72 65 72 75 6e 20 69 74 20 66 72 6f 6d 20 74 68  rerun it from th
17f50 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a  e beginning..*/.
17f60 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74  case OP_Transact
17f70 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a  ion: {.  Btree *
17f80 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74 61  pBt;.  int iMeta
17f90 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b 0a 0a 20  ;.  int iGen;.. 
17fa0 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
17fb0 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72  eader );.  asser
17fc0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
17fd0 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20  0 || pOp->p2==0 
17fe0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
17ff0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
18000 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
18010 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
18020 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61  eMask & (((yDbMa
18030 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29  sk)1)<<pOp->p1))
18040 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  !=0 );.  if( pOp
18050 2d 3e 70 32 20 26 26 20 28 64 62 2d 3e 66 6c 61  ->p2 && (db->fla
18060 67 73 20 26 20 53 51 4c 49 54 45 5f 51 75 65 72  gs & SQLITE_Quer
18070 79 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20 20 20  yOnly)!=0 ){.   
18080 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 45 41   rc = SQLITE_REA
18090 44 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74 6f 20  DONLY;.    goto 
180a0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
180b0 6f 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20 3d 20  or;.  }.  pBt = 
180c0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
180d0 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42 74  .pBt;..  if( pBt
180e0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
180f0 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72  ite3BtreeBeginTr
18100 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32  ans(pBt, pOp->p2
18110 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
18120 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
18130 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a      p->pc = pc;.
18140 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
18150 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
18160 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
18170 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20  return;.    }.  
18180 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
18190 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
181a0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
181b0 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  rror;.    }..   
181c0 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20   if( pOp->p2 && 
181d0 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e  p->usesStmtJourn
181e0 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64 62 2d  al .     && (db-
181f0 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c  >autoCommit==0 |
18200 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e  | db->nVdbeRead>
18210 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  1) .    ){.     
18220 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
18230 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70  BtreeIsInTrans(p
18240 42 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28  Bt) );.      if(
18250 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d   p->iStatement==
18260 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
18270 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d  ert( db->nStatem
18280 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53  ent>=0 && db->nS
18290 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20  avepoint>=0 );. 
182a0 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74         db->nStat
182b0 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20  ement++; .      
182c0 20 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20    p->iStatement 
182d0 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  = db->nSavepoint
182e0 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e   + db->nStatemen
182f0 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  t;.      }..    
18300 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
18310 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20  abSavepoint(db, 
18320 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c  SAVEPOINT_BEGIN,
18330 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31   p->iStatement-1
18340 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  );.      if( rc=
18350 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
18360 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
18370 65 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74  e3BtreeBeginStmt
18380 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d  (pBt, p->iStatem
18390 65 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  ent);.      }.. 
183a0 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68       /* Store th
183b0 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20  e current value 
183c0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
183d0 68 61 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64  handles deferred
183e0 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20   constraint.    
183f0 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66    ** counter. If
18400 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   the statement t
18410 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73  ransaction needs
18420 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
18430 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  ck,.      ** the
18440 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
18450 6f 75 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20  ounter needs to 
18460 62 65 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e  be restored too.
18470 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53    */.      p->nS
18480 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d  tmtDefCons = db-
18490 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
184a0 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65        p->nStmtDe
184b0 66 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  fImmCons = db->n
184c0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
184d0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 47  .    }..    /* G
184e0 61 74 68 65 72 20 74 68 65 20 73 63 68 65 6d 61  ather the schema
184f0 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
18500 66 6f 72 20 63 68 65 63 6b 69 6e 67 20 2a 2f 0a  for checking */.
18510 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
18520 47 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54 52  GetMeta(pBt, BTR
18530 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  EE_SCHEMA_VERSIO
18540 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61  N, (u32 *)&iMeta
18550 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d 20 64 62  );.    iGen = db
18560 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
18570 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74  Schema->iGenerat
18580 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ion;.  }else{.  
18590 20 20 69 47 65 6e 20 3d 20 69 4d 65 74 61 20 3d    iGen = iMeta =
185a0 20 30 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74   0;.  }.  assert
185b0 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  ( pOp->p5==0 || 
185c0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
185d0 49 4e 54 33 32 20 29 3b 0a 20 20 69 66 28 20 70  INT32 );.  if( p
185e0 4f 70 2d 3e 70 35 20 26 26 20 28 69 4d 65 74 61  Op->p5 && (iMeta
185f0 21 3d 70 4f 70 2d 3e 70 33 20 7c 7c 20 69 47 65  !=pOp->p3 || iGe
18600 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69 29 20 29 7b  n!=pOp->p4.i) ){
18610 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
18620 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
18630 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d  g);.    p->zErrM
18640 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74  sg = sqlite3DbSt
18650 72 44 75 70 28 64 62 2c 20 22 64 61 74 61 62 61  rDup(db, "databa
18660 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68  se schema has ch
18670 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20  anged");.    /* 
18680 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f  If the schema-co
18690 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61  okie from the da
186a0 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63  tabase file matc
186b0 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a  hes the cookie .
186c0 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69      ** stored wi
186d0 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  th the in-memory
186e0 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
186f0 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64  of the schema, d
18700 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c  o.    ** not rel
18710 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 66  oad the schema f
18720 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
18730 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20   file..    **.  
18740 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d    ** If virtual-
18750 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73  tables are in us
18760 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a  e, this is not j
18770 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74  ust an optimizat
18780 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65  ion..    ** Ofte
18790 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72  n, v-tables stor
187a0 65 20 74 68 65 69 72 20 64 61 74 61 20 69 6e 20  e their data in 
187b0 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74 61 62  other SQLite tab
187c0 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a  les, which.    *
187d0 2a 20 61 72 65 20 71 75 65 72 69 65 64 20 66 72  * are queried fr
187e0 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28  om within xNext(
187f0 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61  ) and other v-ta
18800 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e  ble methods usin
18810 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65  g.    ** prepare
18820 64 20 71 75 65 72 69 65 73 2e 20 49 66 20 73 75  d queries. If su
18830 63 68 20 61 20 71 75 65 72 79 20 69 73 20 6f 75  ch a query is ou
18840 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f  t-of-date, we do
18850 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20   not want to.   
18860 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65 20   ** discard the 
18870 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c  database schema,
18880 20 61 73 20 74 68 65 20 75 73 65 72 20 63 6f 64   as the user cod
18890 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74  e implementing t
188a0 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c  he.    ** v-tabl
188b0 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20  e would have to 
188c0 62 65 20 72 65 61 64 79 20 66 6f 72 20 74 68 65  be ready for the
188d0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
188e0 72 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20  ructure itself. 
188f0 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61     ** to be inva
18900 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76 65 72  lidated whenever
18910 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
18920 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77  is called from w
18930 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20  ithin .    ** a 
18940 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a  v-table method..
18950 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64      */.    if( d
18960 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
18970 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f  pSchema->schema_
18980 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b  cookie!=iMeta ){
18990 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65  .      sqlite3Re
189a0 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c  setOneSchema(db,
189b0 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d   pOp->p1);.    }
189c0 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
189d0 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  = 1;.    rc = SQ
189e0 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d  LITE_SCHEMA;.  }
189f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
18a00 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b  Opcode: ReadCook
18a10 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ie P1 P2 P3 * *.
18a20 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69  **.** Read cooki
18a30 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d  e number P3 from
18a40 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64   database P1 and
18a50 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72   write it into r
18a60 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50  egister P2..** P
18a70 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65  3==1 is the sche
18a80 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d  ma version.  P3=
18a90 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =2 is the databa
18aa0 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33  se format..** P3
18ab0 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d  ==3 is the recom
18ac0 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63  mended pager cac
18ad0 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20  he size, and so 
18ae0 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73  forth.  P1==0 is
18af0 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74  .** the main dat
18b00 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50  abase file and P
18b10 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74 61  1==1 is the data
18b20 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74  base file used t
18b30 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f  o store.** tempo
18b40 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a  rary tables..**.
18b50 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62 65  ** There must be
18b60 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20   a read-lock on 
18b70 74 68 65 20 64 61 74 61 62 61 73 65 20 28 65 69  the database (ei
18b80 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69  ther a transacti
18b90 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73 74  on.** must be st
18ba0 61 72 74 65 64 20 6f 72 20 74 68 65 72 65 20 6d  arted or there m
18bb0 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20 63  ust be an open c
18bc0 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a  ursor) before.**
18bd0 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20   executing this 
18be0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
18bf0 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b  case OP_ReadCook
18c00 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ie: {           
18c10 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
18c20 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  elease */.  int 
18c30 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 44 62  iMeta;.  int iDb
18c40 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b  ;.  int iCookie;
18c50 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ..  assert( p->b
18c60 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 69 44  IsReader );.  iD
18c70 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69  b = pOp->p1;.  i
18c80 43 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33  Cookie = pOp->p3
18c90 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
18ca0 3e 70 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52  >p3<SQLITE_N_BTR
18cb0 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73  EE_META );.  ass
18cc0 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69  ert( iDb>=0 && i
18cd0 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  Db<db->nDb );.  
18ce0 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b  assert( db->aDb[
18cf0 69 44 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20  iDb].pBt!=0 );. 
18d00 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
18d10 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d  eeMask & (((yDbM
18d20 61 73 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d 30  ask)1)<<iDb))!=0
18d30 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74   );..  sqlite3Bt
18d40 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61  reeGetMeta(db->a
18d50 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f  Db[iDb].pBt, iCo
18d60 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d  okie, (u32 *)&iM
18d70 65 74 61 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  eta);.  pOut->u.
18d80 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65  i = iMeta;.  bre
18d90 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
18da0 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50  : SetCookie P1 P
18db0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  2 P3 * *.**.** W
18dc0 72 69 74 65 20 74 68 65 20 63 6f 6e 74 65 6e 74  rite the content
18dd0 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
18de0 28 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20  (interpreted as 
18df0 61 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20 69  an integer).** i
18e00 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65  nto cookie numbe
18e10 72 20 50 32 20 6f 66 20 64 61 74 61 62 61 73 65  r P2 of database
18e20 20 50 31 2e 20 20 50 32 3d 3d 31 20 69 73 20 74   P1.  P2==1 is t
18e30 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
18e40 6e 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69 73  n.  .** P2==2 is
18e50 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f   the database fo
18e60 72 6d 61 74 2e 20 50 32 3d 3d 33 20 69 73 20 74  rmat. P2==3 is t
18e70 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70  he recommended p
18e80 61 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73  ager cache .** s
18e90 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  ize, and so fort
18ea0 68 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65  h.  P1==0 is the
18eb0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
18ec0 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73  ile and P1==1 is
18ed0 20 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73   the .** databas
18ee0 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73  e file used to s
18ef0 74 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74  tore temporary t
18f00 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74  ables..**.** A t
18f10 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20  ransaction must 
18f20 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72  be started befor
18f30 65 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73  e executing this
18f40 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65   opcode..*/.case
18f50 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b   OP_SetCookie: {
18f60 20 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f         /* in3 */
18f70 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73  .  Db *pDb;.  as
18f80 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51  sert( pOp->p2<SQ
18f90 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54  LITE_N_BTREE_MET
18fa0 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  A );.  assert( p
18fb0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
18fc0 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
18fd0 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
18fe0 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62  reeMask & (((yDb
18ff0 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31  Mask)1)<<pOp->p1
19000 29 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ))!=0 );.  asser
19010 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
19020 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
19030 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  ->aDb[pOp->p1];.
19040 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70    assert( pDb->p
19050 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  Bt!=0 );.  asser
19060 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
19070 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70 4f  MutexHeld(db, pO
19080 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20 70  p->p1, 0) );.  p
19090 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
190a0 3e 70 33 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p3];.  sqlite3V
190b0 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
190c0 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65  (pIn3);.  /* See
190d0 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e 64 65   note about inde
190e0 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50  x shifting on OP
190f0 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20  _ReadCookie */. 
19100 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
19110 65 65 55 70 64 61 74 65 4d 65 74 61 28 70 44 62  eeUpdateMeta(pDb
19120 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20  ->pBt, pOp->p2, 
19130 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b  (int)pIn3->u.i);
19140 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d  .  if( pOp->p2==
19150 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52  BTREE_SCHEMA_VER
19160 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57  SION ){.    /* W
19170 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63  hen the schema c
19180 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72  ookie changes, r
19190 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f  ecord the new co
191a0 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20  okie internally 
191b0 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68  */.    pDb->pSch
191c0 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b  ema->schema_cook
191d0 69 65 20 3d 20 28 69 6e 74 29 70 49 6e 33 2d 3e  ie = (int)pIn3->
191e0 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61  u.i;.    db->fla
191f0 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74  gs |= SQLITE_Int
19200 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65  ernChanges;.  }e
19210 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d  lse if( pOp->p2=
19220 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d  =BTREE_FILE_FORM
19230 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63  AT ){.    /* Rec
19240 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74  ord changes in t
19250 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a  he file format *
19260 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65  /.    pDb->pSche
19270 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ma->file_format 
19280 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e 69 3b  = (u8)pIn3->u.i;
19290 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
192a0 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20  p1==1 ){.    /* 
192b0 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 70  Invalidate all p
192c0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
192d0 74 73 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  ts whenever the 
192e0 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20  TEMP database.  
192f0 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 63    ** schema is c
19300 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74 20  hanged.  Ticket 
19310 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c  #1644 */.    sql
19320 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
19330 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29  edStatements(db)
19340 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  ;.    p->expired
19350 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 0;.  }.  brea
19360 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
19370 20 4f 70 65 6e 52 65 61 64 20 50 31 20 50 32 20   OpenRead P1 P2 
19380 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
19390 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44  psis: root=P2 iD
193a0 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  b=P3.**.** Open 
193b0 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73  a read-only curs
193c0 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  or for the datab
193d0 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20  ase table whose 
193e0 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20  root page is.** 
193f0 50 32 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  P2 in a database
19400 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61   file.  The data
19410 62 61 73 65 20 66 69 6c 65 20 69 73 20 64 65 74  base file is det
19420 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a  ermined by P3. .
19430 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74  ** P3==0 means t
19440 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
19450 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68  , P3==1 means th
19460 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20  e database used 
19470 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72  for .** temporar
19480 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33  y tables, and P3
19490 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68  >1 means used th
194a0 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
194b0 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61  attached.** data
194c0 62 61 73 65 2e 20 20 47 69 76 65 20 74 68 65 20  base.  Give the 
194d0 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64  new cursor an id
194e0 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20  entifier of P1. 
194f0 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65   The P1.** value
19500 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f  s need not be co
19510 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c  ntiguous but all
19520 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c   P1 values shoul
19530 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67  d be small integ
19540 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e  ers..** It is an
19550 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f   error for P1 to
19560 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a   be negative..**
19570 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65  .** If P5!=0 the
19580 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e  n use the conten
19590 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  t of register P2
195a0 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67   as the root pag
195b0 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61  e, not.** the va
195c0 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c 66  lue of P2 itself
195d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69  ..**.** There wi
195e0 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f 63  ll be a read loc
195f0 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  k on the databas
19600 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 72 65  e whenever there
19610 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63   is an.** open c
19620 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20 64  ursor.  If the d
19630 61 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c 6f  atabase was unlo
19640 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68  cked prior to th
19650 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  is instruction.*
19660 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c 6f  * then a read lo
19670 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 20 61  ck is acquired a
19680 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 69  s part of this i
19690 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20 72  nstruction.  A r
196a0 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f  ead.** lock allo
196b0 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73  ws other process
196c0 65 73 20 74 6f 20 72 65 61 64 20 74 68 65 20 64  es to read the d
196d0 61 74 61 62 61 73 65 20 62 75 74 20 70 72 6f 68  atabase but proh
196e0 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68  ibits.** any oth
196f0 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d 20  er process from 
19700 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64 61  modifying the da
19710 74 61 62 61 73 65 2e 20 20 54 68 65 20 72 65 61  tabase.  The rea
19720 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c  d lock is.** rel
19730 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20 63  eased when all c
19740 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73 65  ursors are close
19750 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73 74  d.  If this inst
19760 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74 73  ruction attempts
19770 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65 61  .** to get a rea
19780 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c 73  d lock but fails
19790 2c 20 74 68 65 20 73 63 72 69 70 74 20 74 65 72  , the script ter
197a0 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e 0a  minates with an.
197b0 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65  ** SQLITE_BUSY e
197c0 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  rror code..**.**
197d0 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61   The P4 value ma
197e0 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69  y be either an i
197f0 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32  nteger (P4_INT32
19800 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74  ) or a pointer t
19810 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73  o.** a KeyInfo s
19820 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59  tructure (P4_KEY
19830 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20  INFO). If it is 
19840 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b  a pointer to a K
19850 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63  eyInfo .** struc
19860 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20  ture, then said 
19870 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65  structure define
19880 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e  s the content an
19890 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20  d collating .** 
198a0 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20  sequence of the 
198b0 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e  index being open
198c0 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  ed. Otherwise, i
198d0 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67  f P4 is an integ
198e0 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74  er .** value, it
198f0 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e   is set to the n
19900 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
19910 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a   in the table..*
19920 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70  *.** See also Op
19930 65 6e 57 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f  enWrite..*/./* O
19940 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65  pcode: OpenWrite
19950 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
19960 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f  ** Synopsis: roo
19970 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a  t=P2 iDb=P3.**.*
19980 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72  * Open a read/wr
19990 69 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64  ite cursor named
199a0 20 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65   P1 on the table
199b0 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20   or index whose 
199c0 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20  root.** page is 
199d0 50 32 2e 20 20 4f 72 20 69 66 20 50 35 21 3d 30  P2.  Or if P5!=0
199e0 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74   use the content
199f0 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20   of register P2 
19a00 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72  to find the.** r
19a10 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20  oot page..**.** 
19a20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79  The P4 value may
19a30 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e   be either an in
19a40 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29  teger (P4_INT32)
19a50 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   or a pointer to
19a60 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74  .** a KeyInfo st
19a70 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49  ructure (P4_KEYI
19a80 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61  NFO). If it is a
19a90 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65   pointer to a Ke
19aa0 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74  yInfo .** struct
19ab0 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73  ure, then said s
19ac0 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73  tructure defines
19ad0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64   the content and
19ae0 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73   collating .** s
19af0 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69  equence of the i
19b00 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65  ndex being opene
19b10 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  d. Otherwise, if
19b20 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65   P4 is an intege
19b30 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20  r .** value, it 
19b40 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75  is set to the nu
19b50 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
19b60 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 6f 72  in the table, or
19b70 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65   to the.** large
19b80 73 74 20 69 6e 64 65 78 20 6f 66 20 61 6e 79 20  st index of any 
19b90 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74 61  column of the ta
19ba0 62 6c 65 20 74 68 61 74 20 69 73 20 61 63 74 75  ble that is actu
19bb0 61 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a  ally used..**.**
19bc0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
19bd0 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  n works just lik
19be0 65 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70  e OpenRead excep
19bf0 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20  t that it opens 
19c00 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e  the cursor.** in
19c10 20 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65   read/write mode
19c20 2e 20 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74  .  For a given t
19c30 61 62 6c 65 2c 20 74 68 65 72 65 20 63 61 6e 20  able, there can 
19c40 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72  be one or more r
19c50 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73  ead-only.** curs
19c60 6f 72 73 20 6f 72 20 61 20 73 69 6e 67 6c 65 20  ors or a single 
19c70 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f  read/write curso
19c80 72 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a  r but not both..
19c90 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f  **.** See also O
19ca0 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65  penRead..*/.case
19cb0 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61   OP_OpenRead:.ca
19cc0 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a  se OP_OpenWrite:
19cd0 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b   {.  int nField;
19ce0 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
19cf0 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a  Info;.  int p2;.
19d00 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74    int iDb;.  int
19d10 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65   wrFlag;.  Btree
19d20 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73   *pX;.  VdbeCurs
19d30 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a  or *pCur;.  Db *
19d40 70 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pDb;..  assert( 
19d50 28 70 4f 70 2d 3e 70 35 26 28 4f 50 46 4c 41 47  (pOp->p5&(OPFLAG
19d60 5f 50 32 49 53 52 45 47 7c 4f 50 46 4c 41 47 5f  _P2ISREG|OPFLAG_
19d70 42 55 4c 4b 43 53 52 29 29 3d 3d 70 4f 70 2d 3e  BULKCSR))==pOp->
19d80 70 35 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  p5 );.  assert( 
19d90 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
19da0 4f 70 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70  OpenWrite || pOp
19db0 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 61 73 73  ->p5==0 );.  ass
19dc0 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
19dd0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
19de0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
19df0 70 65 6e 52 65 61 64 20 7c 7c 20 70 2d 3e 72 65  penRead || p->re
19e00 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20  adOnly==0 );..  
19e10 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29  if( p->expired )
19e20 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
19e30 45 5f 41 42 4f 52 54 3b 0a 20 20 20 20 62 72 65  E_ABORT;.    bre
19e40 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c  ak;.  }..  nFiel
19e50 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66  d = 0;.  pKeyInf
19e60 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f  o = 0;.  p2 = pO
19e70 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70  p->p2;.  iDb = p
19e80 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
19e90 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
19ea0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
19eb0 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
19ec0 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
19ed0 31 29 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a  1)<<iDb))!=0 );.
19ee0 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
19ef0 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44  [iDb];.  pX = pD
19f00 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74  b->pBt;.  assert
19f10 28 20 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pX!=0 );.  if(
19f20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
19f30 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20  _OpenWrite ){.  
19f40 20 20 77 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20    wrFlag = 1;.  
19f50 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
19f60 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
19f70 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a  (db, iDb, 0) );.
19f80 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63      if( pDb->pSc
19f90 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
19fa0 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46  t < p->minWriteF
19fb0 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20  ileFormat ){.   
19fc0 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69     p->minWriteFi
19fd0 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e  leFormat = pDb->
19fe0 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f  pSchema->file_fo
19ff0 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  rmat;.    }.  }e
1a000 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20  lse{.    wrFlag 
1a010 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  = 0;.  }.  if( p
1a020 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
1a030 50 32 49 53 52 45 47 20 29 7b 0a 20 20 20 20 61  P2ISREG ){.    a
1a040 73 73 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20  ssert( p2>0 );. 
1a050 20 20 20 61 73 73 65 72 74 28 20 70 32 3c 3d 28     assert( p2<=(
1a060 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
1a070 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 32 20  or) );.    pIn2 
1a080 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20  = &aMem[p2];.   
1a090 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1a0a0 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a 20 20 20  lid(pIn2) );.   
1a0b0 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e   assert( (pIn2->
1a0c0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
1a0d0 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  !=0 );.    sqlit
1a0e0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
1a0f0 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70  ify(pIn2);.    p
1a100 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75  2 = (int)pIn2->u
1a110 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70  .i;.    /* The p
1a120 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63  2 value always c
1a130 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f  omes from a prio
1a140 72 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  r OP_CreateTable
1a150 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20   opcode and.    
1a160 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77  ** that opcode w
1a170 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74  ill always set t
1a180 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32  he p2 value to 2
1a190 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65   or more or else
1a1a0 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66   fail..    ** If
1a1b0 20 74 68 65 72 65 20 77 65 72 65 20 61 20 66 61   there were a fa
1a1c0 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70 61  ilure, the prepa
1a1d0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f  red statement wo
1a1e0 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a  uld have halted.
1a1f0 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65      ** before re
1a200 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74  aching this inst
1a210 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20  ruction. */.    
1a220 69 66 28 20 4e 45 56 45 52 28 70 32 3c 32 29 20  if( NEVER(p2<2) 
1a230 29 20 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  ) {.      rc = S
1a240 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
1a250 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61  PT;.      goto a
1a260 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1a270 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  r;.    }.  }.  i
1a280 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
1a290 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20  P4_KEYINFO ){.  
1a2a0 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70    pKeyInfo = pOp
1a2b0 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
1a2c0 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49     assert( pKeyI
1a2d0 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62  nfo->enc==ENC(db
1a2e0 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
1a2f0 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64   pKeyInfo->db==d
1a300 62 20 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20  b );.    nField 
1a310 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  = pKeyInfo->nFie
1a320 6c 64 2b 70 4b 65 79 49 6e 66 6f 2d 3e 6e 58 46  ld+pKeyInfo->nXF
1a330 69 65 6c 64 3b 0a 20 20 7d 65 6c 73 65 20 69 66  ield;.  }else if
1a340 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1a350 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e  4_INT32 ){.    n
1a360 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e  Field = pOp->p4.
1a370 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  i;.  }.  assert(
1a380 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20   pOp->p1>=0 );. 
1a390 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e   assert( nField>
1a3a0 3d 30 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  =0 );.  testcase
1a3b0 28 20 6e 46 69 65 6c 64 3d 3d 30 20 29 3b 20 20  ( nField==0 );  
1a3c0 2f 2a 20 54 61 62 6c 65 20 77 69 74 68 20 49 4e  /* Table with IN
1a3d0 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
1a3e0 59 20 61 6e 64 20 6e 6f 74 68 69 6e 67 20 65 6c  Y and nothing el
1a3f0 73 65 20 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61  se */.  pCur = a
1a400 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
1a410 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64   pOp->p1, nField
1a420 2c 20 69 44 62 2c 20 31 29 3b 0a 20 20 69 66 28  , iDb, 1);.  if(
1a430 20 70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20   pCur==0 ) goto 
1a440 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e  no_mem;.  pCur->
1a450 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
1a460 43 75 72 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d  Cur->isOrdered =
1a470 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   1;.  rc = sqlit
1a480 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 58  e3BtreeCursor(pX
1a490 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b  , p2, wrFlag, pK
1a4a0 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 70 43  eyInfo, pCur->pC
1a4b0 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e  ursor);.  pCur->
1a4c0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49  pKeyInfo = pKeyI
1a4d0 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  nfo;.  assert( O
1a4e0 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42  PFLAG_BULKCSR==B
1a4f0 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b  TREE_BULKLOAD );
1a500 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  .  sqlite3BtreeC
1a510 75 72 73 6f 72 48 69 6e 74 73 28 70 43 75 72 2d  ursorHints(pCur-
1a520 3e 70 43 75 72 73 6f 72 2c 20 28 70 4f 70 2d 3e  >pCursor, (pOp->
1a530 70 35 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  p5 & OPFLAG_BULK
1a540 43 53 52 29 29 3b 0a 0a 20 20 2f 2a 20 53 69 6e  CSR));..  /* Sin
1a550 63 65 20 69 74 20 70 65 72 66 6f 72 6d 73 20 6e  ce it performs n
1a560 6f 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  o memory allocat
1a570 69 6f 6e 20 6f 72 20 49 4f 2c 20 74 68 65 20 6f  ion or IO, the o
1a580 6e 6c 79 20 76 61 6c 75 65 20 74 68 61 74 0a 20  nly value that. 
1a590 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65   ** sqlite3Btree
1a5a0 43 75 72 73 6f 72 28 29 20 6d 61 79 20 72 65 74  Cursor() may ret
1a5b0 75 72 6e 20 69 73 20 53 51 4c 49 54 45 5f 4f 4b  urn is SQLITE_OK
1a5c0 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 72  . */.  assert( r
1a5d0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
1a5e0 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56 64  .  /* Set the Vd
1a5f0 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c 65  beCursor.isTable
1a600 20 76 61 72 69 61 62 6c 65 2e 20 50 72 65 76 69   variable. Previ
1a610 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a  ous versions of.
1a620 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73 65 64    ** SQLite used
1a630 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68 65   to check if the
1a640 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67 73   root-page flags
1a650 20 77 65 72 65 20 73 61 6e 65 20 61 74 20 74 68   were sane at th
1a660 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e  is point.  ** an
1a670 64 20 72 65 70 6f 72 74 20 64 61 74 61 62 61 73  d report databas
1a680 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 66 20  e corruption if 
1a690 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c 20 62  they were not, b
1a6a0 75 74 20 74 68 69 73 20 63 68 65 63 6b 20 68 61  ut this check ha
1a6b0 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76  s.  ** since mov
1a6c0 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74 72 65  ed into the btre
1a6d0 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20  e layer.  */  . 
1a6e0 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d   pCur->isTable =
1a6f0 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50 34   pOp->p4type!=P4
1a700 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20 62 72 65 61  _KEYINFO;.  brea
1a710 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1a720 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50   OpenEphemeral P
1a730 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 20  1 P2 * P4 P5.** 
1a740 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d  Synopsis: nColum
1a750 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  n=P2.**.** Open 
1a760 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20  a new cursor P1 
1a770 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74  to a transient t
1a780 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72  able..** The cur
1a790 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70  sor is always op
1a7a0 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65 20  ened read/write 
1a7b0 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20  even if .** the 
1a7c0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73  main database is
1a7d0 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65   read-only.  The
1a7e0 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61   ephemeral.** ta
1a7f0 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20 61  ble is deleted a
1a800 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65  utomatically whe
1a810 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
1a820 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32  closed..**.** P2
1a830 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
1a840 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
1a850 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   ephemeral table
1a860 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20  ..** The cursor 
1a870 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65  points to a BTre
1a880 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30  e table if P4==0
1a890 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20   and to a BTree 
1a8a0 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69  index.** if P4 i
1a8b0 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20  s not 0.  If P4 
1a8c0 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20  is not NULL, it 
1a8d0 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49  points to a KeyI
1a8e0 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  nfo structure.**
1a8f0 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68   that defines th
1a900 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73  e format of keys
1a910 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a   in the index..*
1a920 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61  *.** The P5 para
1a930 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61 20 6d  meter can be a m
1a940 61 73 6b 20 6f 66 20 74 68 65 20 42 54 52 45 45  ask of the BTREE
1a950 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64  _* flags defined
1a960 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e 20  .** in btree.h. 
1a970 20 54 68 65 73 65 20 66 6c 61 67 73 20 63 6f 6e   These flags con
1a980 74 72 6f 6c 20 61 73 70 65 63 74 73 20 6f 66 20  trol aspects of 
1a990 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66  the operation of
1a9a0 0a 2a 2a 20 74 68 65 20 62 74 72 65 65 2e 20 20  .** the btree.  
1a9b0 54 68 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a  The BTREE_OMIT_J
1a9c0 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54 52 45 45  OURNAL and BTREE
1a9d0 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73 20 61 72  _SINGLE flags ar
1a9e0 65 0a 2a 2a 20 61 64 64 65 64 20 61 75 74 6f 6d  e.** added autom
1a9f0 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20  atically..*/./* 
1aa00 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f  Opcode: OpenAuto
1aa10 69 6e 64 65 78 20 50 31 20 50 32 20 2a 20 50 34  index P1 P2 * P4
1aa20 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1aa30 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a  nColumn=P2.**.**
1aa40 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72   This opcode wor
1aa50 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 4f  ks the same as O
1aa60 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e  P_OpenEphemeral.
1aa70 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64 69    It has a.** di
1aa80 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20  fferent name to 
1aa90 64 69 73 74 69 6e 67 75 69 73 68 20 69 74 73 20  distinguish its 
1aaa0 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72 65  use.  Tables cre
1aab0 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79  ated using.** by
1aac0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c   this opcode wil
1aad0 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 61 75  l be used for au
1aae0 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61  tomatically crea
1aaf0 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a  ted transient.**
1ab00 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e   indices in join
1ab10 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  s..*/.case OP_Op
1ab20 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61  enAutoindex: .ca
1ab30 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  se OP_OpenEpheme
1ab40 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ral: {.  VdbeCur
1ab50 73 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79 49  sor *pCx;.  KeyI
1ab60 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a  nfo *pKeyInfo;..
1ab70 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69    static const i
1ab80 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a 20  nt vfsFlags = . 
1ab90 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1aba0 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20  _READWRITE |.   
1abb0 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43     SQLITE_OPEN_C
1abc0 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51  REATE |.      SQ
1abd0 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53  LITE_OPEN_EXCLUS
1abe0 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  IVE |.      SQLI
1abf0 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e  TE_OPEN_DELETEON
1ac00 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51  CLOSE |.      SQ
1ac10 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49  LITE_OPEN_TRANSI
1ac20 45 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65 72 74  ENT_DB;.  assert
1ac30 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
1ac40 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1ac50 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  2>=0 );.  pCx = 
1ac60 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1ac70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
1ac80 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66  p2, -1, 1);.  if
1ac90 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
1aca0 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e  no_mem;.  pCx->n
1acb0 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 72 63  ullRow = 1;.  rc
1acc0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f   = sqlite3BtreeO
1acd0 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c  pen(db->pVfs, 0,
1ace0 20 64 62 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20   db, &pCx->pBt, 
1acf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ad00 20 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 4f           BTREE_O
1ad10 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54  MIT_JOURNAL | BT
1ad20 52 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70  REE_SINGLE | pOp
1ad30 2d 3e 70 35 2c 20 76 66 73 46 6c 61 67 73 29 3b  ->p5, vfsFlags);
1ad40 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
1ad50 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d  E_OK ){.    rc =
1ad60 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
1ad70 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74  inTrans(pCx->pBt
1ad80 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  , 1);.  }.  if( 
1ad90 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
1ada0 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61  .    /* If a tra
1adb0 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20  nsient index is 
1adc0 72 65 71 75 69 72 65 64 2c 20 63 72 65 61 74 65  required, create
1add0 20 69 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20   it by calling. 
1ade0 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72     ** sqlite3Btr
1adf0 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 29 20  eeCreateTable() 
1ae00 77 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 42  with the BTREE_B
1ae10 4c 4f 42 4b 45 59 20 66 6c 61 67 20 62 65 66 6f  LOBKEY flag befo
1ae20 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e  re.    ** openin
1ae30 67 20 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73  g it. If a trans
1ae40 69 65 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65  ient table is re
1ae50 71 75 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65  quired, just use
1ae60 20 74 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f   the.    ** auto
1ae70 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65  matically create
1ae80 64 20 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f  d table with roo
1ae90 74 2d 70 61 67 65 20 31 20 28 61 6e 20 42 4c 4f  t-page 1 (an BLO
1aea0 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e  B_INTKEY table).
1aeb0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
1aec0 28 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d  (pKeyInfo = pOp-
1aed0 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 29 21 3d 30  >p4.pKeyInfo)!=0
1aee0 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67   ){.      int pg
1aef0 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  no;.      assert
1af00 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1af10 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20  4_KEYINFO );.   
1af20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1af30 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
1af40 70 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c  pCx->pBt, &pgno,
1af50 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c   BTREE_BLOBKEY |
1af60 20 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20   pOp->p5); .    
1af70 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1af80 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61  _OK ){.        a
1af90 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53  ssert( pgno==MAS
1afa0 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20  TER_ROOT+1 );.  
1afb0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b        assert( pK
1afc0 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29  eyInfo->db==db )
1afd0 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1afe0 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d  ( pKeyInfo->enc=
1aff0 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20  =ENC(db) );.    
1b000 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66      pCx->pKeyInf
1b010 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  o = pKeyInfo;.  
1b020 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1b030 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43  e3BtreeCursor(pC
1b040 78 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c  x->pBt, pgno, 1,
1b050 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e   pKeyInfo, pCx->
1b060 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
1b070 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54  }.      pCx->isT
1b080 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65  able = 0;.    }e
1b090 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
1b0a0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1b0b0 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53  or(pCx->pBt, MAS
1b0c0 54 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20  TER_ROOT, 1, 0, 
1b0d0 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  pCx->pCursor);. 
1b0e0 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c       pCx->isTabl
1b0f0 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  e = 1;.    }.  }
1b100 0a 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72 65  .  pCx->isOrdere
1b110 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54  d = (pOp->p5!=BT
1b120 52 45 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a  REE_UNORDERED);.
1b130 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1b140 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70 65  pcode: SorterOpe
1b150 6e 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  n P1 P2 * P4 *.*
1b160 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1b170 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f   works like OP_O
1b180 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 65 78 63  penEphemeral exc
1b190 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e  ept that it open
1b1a0 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e 74  s.** a transient
1b1b0 20 69 6e 64 65 78 20 74 68 61 74 20 69 73 20 73   index that is s
1b1c0 70 65 63 69 66 69 63 61 6c 6c 79 20 64 65 73 69  pecifically desi
1b1d0 67 6e 65 64 20 74 6f 20 73 6f 72 74 20 6c 61 72  gned to sort lar
1b1e0 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73 69  ge.** tables usi
1b1f0 6e 67 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d  ng an external m
1b200 65 72 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69  erge-sort algori
1b210 74 68 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  thm..*/.case OP_
1b220 53 6f 72 74 65 72 4f 70 65 6e 3a 20 7b 0a 20 20  SorterOpen: {.  
1b230 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1b240 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1b250 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1b260 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29  rt( pOp->p2>=0 )
1b270 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
1b280 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1b290 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31  >p1, pOp->p2, -1
1b2a0 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  , 1);.  if( pCx=
1b2b0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1b2c0 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  ;.  pCx->pKeyInf
1b2d0 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
1b2e0 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20  Info;.  assert( 
1b2f0 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64  pCx->pKeyInfo->d
1b300 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73 73 65 72  b==db );.  asser
1b310 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  t( pCx->pKeyInfo
1b320 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29  ->enc==ENC(db) )
1b330 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1b340 56 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28 64  VdbeSorterInit(d
1b350 62 2c 20 70 43 78 29 3b 0a 20 20 62 72 65 61 6b  b, pCx);.  break
1b360 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1b370 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32  OpenPseudo P1 P2
1b380 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
1b390 73 69 73 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20  sis: P3 columns 
1b3a0 69 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f  in r[P2].**.** O
1b3b0 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72  pen a new cursor
1b3c0 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20   that points to 
1b3d0 61 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61  a fake table tha
1b3e0 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e  t contains a sin
1b3f0 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61  gle.** row of da
1b400 74 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74  ta.  The content
1b410 20 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77   of that one row
1b420 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   is the content 
1b430 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67  of memory.** reg
1b440 69 73 74 65 72 20 50 32 2e 20 20 49 6e 20 6f 74  ister P2.  In ot
1b450 68 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f  her words, curso
1b460 72 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20  r P1 becomes an 
1b470 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a  alias for the .*
1b480 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65  * MEM_Blob conte
1b490 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  nt contained in 
1b4a0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
1b4b0 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c  ** A pseudo-tabl
1b4c0 65 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69  e created by thi
1b4d0 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
1b4e0 20 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c   to hold a singl
1b4f0 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20  e.** row output 
1b500 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20  from the sorter 
1b510 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77 20  so that the row 
1b520 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65  can be decompose
1b530 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69  d into.** indivi
1b540 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69  dual columns usi
1b550 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  ng the OP_Column
1b560 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50   opcode.  The OP
1b570 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a  _Column opcode.*
1b580 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75  * is the only cu
1b590 72 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74  rsor opcode that
1b5a0 20 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73   works with a ps
1b5b0 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  eudo-table..**.*
1b5c0 2a 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62  * P3 is the numb
1b5d0 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20  er of fields in 
1b5e0 74 68 65 20 72 65 63 6f 72 64 73 20 74 68 61 74  the records that
1b5f0 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
1b600 62 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f  by.** the pseudo
1b610 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20  -table..*/.case 
1b620 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b  OP_OpenPseudo: {
1b630 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1b640 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Cx;..  assert( p
1b650 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
1b660 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d  ssert( pOp->p3>=
1b670 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c  0 );.  pCx = all
1b680 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1b690 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c  Op->p1, pOp->p3,
1b6a0 20 2d 31 2c 20 30 29 3b 0a 20 20 69 66 28 20 70   -1, 0);.  if( p
1b6b0 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1b6c0 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c  mem;.  pCx->null
1b6d0 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e  Row = 1;.  pCx->
1b6e0 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 20 3d  pseudoTableReg =
1b6f0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d   pOp->p2;.  pCx-
1b700 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20  >isTable = 1;.  
1b710 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
1b720 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  =0 );.  break;.}
1b730 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f  ../* Opcode: Clo
1b740 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  se P1 * * * *.**
1b750 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73  .** Close a curs
1b760 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70  or previously op
1b770 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66 20  ened as P1.  If 
1b780 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72  P1 is not.** cur
1b790 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69  rently open, thi
1b7a0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
1b7b0 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73   a no-op..*/.cas
1b7c0 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20  e OP_Close: {.  
1b7d0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1b7e0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1b7f0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71  >nCursor );.  sq
1b800 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72  lite3VdbeFreeCur
1b810 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b  sor(p, p->apCsr[
1b820 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e  pOp->p1]);.  p->
1b830 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d  apCsr[pOp->p1] =
1b840 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
1b850 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47  /* Opcode: SeekG
1b860 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
1b870 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1b880 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1b890 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1b8a0 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1b8b0 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1b8c0 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1b8d0 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1b8e0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1b8f0 65 72 20 50 33 20 61 73 20 74 68 65 20 6b 65 79  er P3 as the key
1b900 2e 20 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  .  If cursor P1 
1b910 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
1b920 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
1b930 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1b940 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
1b950 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
1b960 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
1b970 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
1b980 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
1b990 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
1b9a0 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
1b9b0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73   points to the s
1b9c0 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68  mallest entry th
1b9d0 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65  at .** is greate
1b9e0 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
1b9f0 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
1ba00 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1ba10 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72  o records .** gr
1ba20 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
1ba30 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61  ual to the key a
1ba40 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
1ba50 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
1ba60 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
1ba70 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1ba80 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53  und, Distinct, S
1ba90 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53  eekLt, SeekGt, S
1baa0 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
1bab0 64 65 3a 20 53 65 65 6b 47 74 20 50 31 20 50 32  de: SeekGt P1 P2
1bac0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1bad0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1bae0 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
1baf0 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1bb00 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1bb10 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1bb20 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1bb30 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1bb40 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1bb50 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
1bb60 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1bb70 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1bb80 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1bb90 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1bba0 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1bbb0 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1bbc0 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1bbd0 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1bbe0 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1bbf0 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1bc00 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
1bc10 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e   the smallest en
1bc20 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1bc30 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
1bc40 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
1bc50 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
1bc60 72 64 73 20 67 72 65 61 74 65 72 20 74 68 61 6e  rds greater than
1bc70 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64   .** the key and
1bc80 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1bc90 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1bca0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1bcb0 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1bcc0 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65  d, Distinct, See
1bcd0 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kLt, SeekGe, See
1bce0 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
1bcf0 3a 20 53 65 65 6b 4c 74 20 50 31 20 50 32 20 50  : SeekLt P1 P2 P
1bd00 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70  3 P4 * .** Synop
1bd10 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1bd20 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1bd30 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1bd40 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1bd50 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1bd60 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1bd70 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1bd80 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1bd90 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1bda0 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1bdb0 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1bdc0 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1bdd0 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1bde0 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1bdf0 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1be00 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1be10 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1be20 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1be30 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1be40 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
1be50 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72  the largest entr
1be60 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65  y that .** is le
1be70 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  ss than the key 
1be80 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
1be90 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c  are no records l
1bea0 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65  ess than .** the
1beb0 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1bec0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1bed0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1bee0 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1bef0 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69   NotFound, Disti
1bf00 6e 63 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  nct, SeekGt, See
1bf10 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f  kGe, SeekLe.*/./
1bf20 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 65  * Opcode: SeekLe
1bf30 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1bf40 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1bf50 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
1bf60 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1bf70 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1bf80 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1bf90 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1bfa0 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1bfb0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1bfc0 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49  r P3 as a key. I
1bfd0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1bfe0 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1bff0 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1c000 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1c010 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1c020 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1c030 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1c040 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1c050 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1c060 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1c070 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
1c080 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73  ts to the larges
1c090 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
1c0a0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
1c0b0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
1c0c0 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
1c0d0 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
1c0e0 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f   .** less than o
1c0f0 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1c100 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1c110 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1c120 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65   to P2..**.** Se
1c130 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1c140 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63  otFound, Distinc
1c150 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47  t, SeekGt, SeekG
1c160 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73  e, SeekLt.*/.cas
1c170 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20 20 20  e OP_SeekLT:    
1c180 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1c190 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
1c1a0 6b 4c 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20  kLE:         /* 
1c1b0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1c1c0 65 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20 20 20  e OP_SeekGE:    
1c1d0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1c1e0 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
1c1f0 6b 47 54 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  kGT: {       /* 
1c200 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69  jump, in3 */.  i
1c210 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6f 63  nt res;.  int oc
1c220 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
1c230 70 43 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  pC;.  UnpackedRe
1c240 63 6f 72 64 20 72 3b 0a 20 20 69 6e 74 20 6e 46  cord r;.  int nF
1c250 69 65 6c 64 3b 0a 20 20 69 36 34 20 69 4b 65 79  ield;.  i64 iKey
1c260 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 6f  ;      /* The ro
1c270 77 69 64 20 77 65 20 61 72 65 20 74 6f 20 73 65  wid we are to se
1c280 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65  ek to */..  asse
1c290 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1c2a0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1c2b0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
1c2c0 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a  ( pOp->p2!=0 );.
1c2d0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1c2e0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1c2f0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
1c300 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
1c310 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a  oTableReg==0 );.
1c320 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1c330 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54  kLE == OP_SeekLT
1c340 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +1 );.  assert( 
1c350 4f 50 5f 53 65 65 6b 47 45 20 3d 3d 20 4f 50 5f  OP_SeekGE == OP_
1c360 53 65 65 6b 4c 54 2b 32 20 29 3b 0a 20 20 61 73  SeekLT+2 );.  as
1c370 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 20  sert( OP_SeekGT 
1c380 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 33 20 29  == OP_SeekLT+3 )
1c390 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1c3a0 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61  isOrdered );.  a
1c3b0 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
1c3c0 6f 72 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20  or!=0 );.  oc = 
1c3d0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 70  pOp->opcode;.  p
1c3e0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
1c3f0 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c    if( pC->isTabl
1c400 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  e ){.    /* The 
1c410 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20 50  input value in P
1c420 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61 6e  3 might be of an
1c430 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72 2c  y type: integer,
1c440 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20   real, string,. 
1c450 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e     ** blob, or N
1c460 55 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e 65 65  ULL.  But it nee
1c470 64 73 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  ds to be an inte
1c480 67 65 72 20 62 65 66 6f 72 65 20 77 65 20 63 61  ger before we ca
1c490 6e 20 64 6f 0a 20 20 20 20 2a 2a 20 74 68 65 20  n do.    ** the 
1c4a0 73 65 65 6b 2c 20 73 6f 20 63 6f 76 65 72 74 20  seek, so covert 
1c4b0 69 74 2e 20 2a 2f 0a 20 20 20 20 70 49 6e 33 20  it. */.    pIn3 
1c4c0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
1c4d0 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72  ;.    applyNumer
1c4e0 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 29  icAffinity(pIn3)
1c4f0 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c  ;.    iKey = sql
1c500 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
1c510 28 70 49 6e 33 29 3b 0a 20 20 20 20 70 43 2d 3e  (pIn3);.    pC->
1c520 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1c530 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ;..    /* If the
1c540 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20   P3 value could 
1c550 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64  not be converted
1c560 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72   into an integer
1c570 20 77 69 74 68 6f 75 74 0a 20 20 20 20 2a 2a 20   without.    ** 
1c580 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74  loss of informat
1c590 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69 61  ion, then specia
1c5a0 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20  l processing is 
1c5b0 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20  required... */. 
1c5c0 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
1c5d0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d  ags & MEM_Int)==
1c5e0 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28  0 ){.      if( (
1c5f0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
1c600 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Real)==0 ){.  
1c610 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
1c620 50 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20  P3 value cannot 
1c630 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
1c640 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20  o any kind of a 
1c650 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20 20 20 20  number,.        
1c660 2a 2a 20 74 68 65 6e 20 74 68 65 20 73 65 65 6b  ** then the seek
1c670 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
1c680 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20  , so jump to P2 
1c690 2a 2f 0a 20 20 20 20 20 20 20 20 70 63 20 3d 20  */.        pc = 
1c6a0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 20 20 56 64  pOp->p2 - 1;  Vd
1c6b0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c  beBranchTaken(1,
1c6c0 32 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  2);.        brea
1c6d0 6b 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  k;.      }..    
1c6e0 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72    /* If the appr
1c6f0 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69  oximation iKey i
1c700 73 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68  s larger than th
1c710 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65  e actual real se
1c720 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65  arch.      ** te
1c730 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20 3e  rm, substitute >
1c740 3d 20 66 6f 72 20 3e 20 61 6e 64 20 3c 20 66 6f  = for > and < fo
1c750 72 20 3c 3d 2e 20 65 2e 67 2e 20 69 66 20 74 68  r <=. e.g. if th
1c760 65 20 73 65 61 72 63 68 20 74 65 72 6d 0a 20 20  e search term.  
1c770 20 20 20 20 2a 2a 20 69 73 20 34 2e 39 20 61 6e      ** is 4.9 an
1c780 64 20 74 68 65 20 69 6e 74 65 67 65 72 20 61 70  d the integer ap
1c790 70 72 6f 78 69 6d 61 74 69 6f 6e 20 35 3a 0a 20  proximation 5:. 
1c7a0 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a       **.      **
1c7b0 20 20 20 20 20 20 20 20 28 78 20 3e 20 20 34 2e          (x >  4.
1c7c0 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20  9)    ->     (x 
1c7d0 3e 3d 20 35 29 0a 20 20 20 20 20 20 2a 2a 20 20  >= 5).      **  
1c7e0 20 20 20 20 20 20 28 78 20 3c 3d 20 34 2e 39 29        (x <= 4.9)
1c7f0 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3c 20      ->     (x < 
1c800 20 35 29 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20   5).      */.   
1c810 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 3c 28     if( pIn3->r<(
1c820 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20  double)iKey ){. 
1c830 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f         assert( O
1c840 50 5f 53 65 65 6b 47 45 3d 3d 28 4f 50 5f 53 65  P_SeekGE==(OP_Se
1c850 65 6b 47 54 2d 31 29 20 29 3b 0a 20 20 20 20 20  ekGT-1) );.     
1c860 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65     assert( OP_Se
1c870 65 6b 4c 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45  ekLT==(OP_SeekLE
1c880 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  -1) );.        a
1c890 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c  ssert( (OP_SeekL
1c8a0 45 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50  E & 0x0001)==(OP
1c8b0 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30 30 31  _SeekGT & 0x0001
1c8c0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ) );.        if(
1c8d0 20 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d   (oc & 0x0001)==
1c8e0 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30  (OP_SeekGT & 0x0
1c8f0 30 30 31 29 20 29 20 6f 63 2d 2d 3b 0a 20 20 20  001) ) oc--;.   
1c900 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49     }..      /* I
1c910 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74  f the approximat
1c920 69 6f 6e 20 69 4b 65 79 20 69 73 20 73 6d 61 6c  ion iKey is smal
1c930 6c 65 72 20 74 68 61 6e 20 74 68 65 20 61 63 74  ler than the act
1c940 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a  ual real search.
1c950 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73        ** term, s
1c960 75 62 73 74 69 74 75 74 65 20 3c 3d 20 66 6f 72  ubstitute <= for
1c970 20 3c 20 61 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e   < and > for >=.
1c980 20 20 2a 2f 0a 20 20 20 20 20 20 65 6c 73 65 20    */.      else 
1c990 69 66 28 20 70 49 6e 33 2d 3e 72 3e 28 64 6f 75  if( pIn3->r>(dou
1c9a0 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20  ble)iKey ){.    
1c9b0 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
1c9c0 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c  eekLE==(OP_SeekL
1c9d0 54 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  T+1) );.        
1c9e0 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
1c9f0 54 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 2b 31 29  T==(OP_SeekGE+1)
1ca00 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1ca10 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 54 20 26  rt( (OP_SeekLT &
1ca20 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
1ca30 65 6b 47 45 20 26 20 30 78 30 30 30 31 29 20 29  ekGE & 0x0001) )
1ca40 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f  ;.        if( (o
1ca50 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50  c & 0x0001)==(OP
1ca60 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31  _SeekLT & 0x0001
1ca70 29 20 29 20 6f 63 2b 2b 3b 0a 20 20 20 20 20 20  ) ) oc++;.      
1ca80 7d 0a 20 20 20 20 7d 20 0a 20 20 20 20 72 63 20  }.    } .    rc 
1ca90 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1caa0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1cab0 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36  >pCursor, 0, (u6
1cac0 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29  4)iKey, 0, &res)
1cad0 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ;.    if( rc!=SQ
1cae0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1caf0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1cb00 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
1cb10 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29      if( res==0 )
1cb20 7b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69  {.      pC->rowi
1cb30 64 49 73 56 61 6c 69 64 20 3d 20 31 3b 0a 20 20  dIsValid = 1;.  
1cb40 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69      pC->lastRowi
1cb50 64 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20 7d 0a  d = iKey;.    }.
1cb60 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 46 69    }else{.    nFi
1cb70 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
1cb80 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
1cb90 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1cba0 33 32 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  32 );.    assert
1cbb0 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20  ( nField>0 );.  
1cbc0 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
1cbd0 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
1cbe0 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
1cbf0 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a  )nField;..    /*
1cc00 20 54 68 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f   The next line o
1cc10 66 20 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20  f code computes 
1cc20 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79  as follows, only
1cc30 20 66 61 73 74 65 72 3a 0a 20 20 20 20 2a 2a 20   faster:.    ** 
1cc40 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65    if( oc==OP_See
1cc50 6b 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGT || oc==OP_Se
1cc60 65 6b 4c 45 20 29 7b 0a 20 20 20 20 2a 2a 20 20  ekLE ){.    **  
1cc70 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50     r.flags = UNP
1cc80 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 3b 0a 20  ACKED_INCRKEY;. 
1cc90 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20     **   }else{. 
1cca0 20 20 20 2a 2a 20 20 20 20 20 72 2e 66 6c 61 67     **     r.flag
1ccb0 73 20 3d 20 30 3b 0a 20 20 20 20 2a 2a 20 20 20  s = 0;.    **   
1ccc0 7d 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72 2e 66  }.    */.    r.f
1ccd0 6c 61 67 73 20 3d 20 28 75 38 29 28 55 4e 50 41  lags = (u8)(UNPA
1cce0 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 2a 20 28  CKED_INCRKEY * (
1ccf0 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65  1 & (oc - OP_See
1cd00 6b 4c 54 29 29 29 3b 0a 20 20 20 20 61 73 73 65  kLT)));.    asse
1cd10 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47  rt( oc!=OP_SeekG
1cd20 54 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 55 4e  T || r.flags==UN
1cd30 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 29  PACKED_INCRKEY )
1cd40 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63  ;.    assert( oc
1cd50 21 3d 4f 50 5f 53 65 65 6b 4c 45 20 7c 7c 20 72  !=OP_SeekLE || r
1cd60 2e 66 6c 61 67 73 3d 3d 55 4e 50 41 43 4b 45 44  .flags==UNPACKED
1cd70 5f 49 4e 43 52 4b 45 59 20 29 3b 0a 20 20 20 20  _INCRKEY );.    
1cd80 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
1cd90 65 65 6b 47 45 20 7c 7c 20 72 2e 66 6c 61 67 73  eekGE || r.flags
1cda0 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ==0 );.    asser
1cdb0 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 54  t( oc!=OP_SeekLT
1cdc0 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 30 20 29   || r.flags==0 )
1cdd0 3b 0a 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20  ;..    r.aMem = 
1cde0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1cdf0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1ce00 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b  BUG.    { int i;
1ce10 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46   for(i=0; i<r.nF
1ce20 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72  ield; i++) asser
1ce30 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
1ce40 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23  .aMem[i]) ); }.#
1ce50 65 6e 64 69 66 0a 20 20 20 20 45 78 70 61 6e 64  endif.    Expand
1ce60 42 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a 20 20  Blob(r.aMem);.  
1ce70 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1ce80 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
1ce90 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  d(pC->pCursor, &
1cea0 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  r, 0, 0, &res);.
1ceb0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1cec0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
1ced0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1cee0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
1cef0 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1cf00 69 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 43  id = 0;.  }.  pC
1cf10 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1cf20 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
1cf30 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1cf40 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51  STALE;.#ifdef SQ
1cf50 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69  LITE_TEST.  sqli
1cf60 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74  te3_search_count
1cf70 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  ++;.#endif.  if(
1cf80 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 45 20 29   oc>=OP_SeekGE )
1cf90 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f  {  assert( oc==O
1cfa0 50 5f 53 65 65 6b 47 45 20 7c 7c 20 6f 63 3d 3d  P_SeekGE || oc==
1cfb0 4f 50 5f 53 65 65 6b 47 54 20 29 3b 0a 20 20 20  OP_SeekGT );.   
1cfc0 20 69 66 28 20 72 65 73 3c 30 20 7c 7c 20 28 72   if( res<0 || (r
1cfd0 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f  es==0 && oc==OP_
1cfe0 53 65 65 6b 47 54 29 20 29 7b 0a 20 20 20 20 20  SeekGT) ){.     
1cff0 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20   res = 0;.      
1d000 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1d010 65 4e 65 78 74 28 70 43 2d 3e 70 43 75 72 73 6f  eNext(pC->pCurso
1d020 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
1d030 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1d040 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
1d050 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1d060 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1d070 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  lid = 0;.    }el
1d080 73 65 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20  se{.      res = 
1d090 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  0;.    }.  }else
1d0a0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63  {.    assert( oc
1d0b0 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 6f  ==OP_SeekLT || o
1d0c0 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a  c==OP_SeekLE );.
1d0d0 20 20 20 20 69 66 28 20 72 65 73 3e 30 20 7c 7c      if( res>0 ||
1d0e0 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d   (res==0 && oc==
1d0f0 4f 50 5f 53 65 65 6b 4c 54 29 20 29 7b 0a 20 20  OP_SeekLT) ){.  
1d100 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
1d110 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1d120 74 72 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d  treePrevious(pC-
1d130 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  >pCursor, &res);
1d140 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
1d150 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
1d160 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1d170 6f 72 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f  or;.      pC->ro
1d180 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
1d190 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1d1a0 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65   /* res might be
1d1b0 20 6e 65 67 61 74 69 76 65 20 62 65 63 61 75 73   negative becaus
1d1c0 65 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 65  e the table is e
1d1d0 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a  mpty.  Check to.
1d1e0 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66 20        ** see if 
1d1f0 74 68 69 73 20 69 73 20 74 68 65 20 63 61 73 65  this is the case
1d200 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
1d210 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42 74   res = sqlite3Bt
1d220 72 65 65 45 6f 66 28 70 43 2d 3e 70 43 75 72 73  reeEof(pC->pCurs
1d230 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  or);.    }.  }. 
1d240 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
1d250 3e 30 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  >0 );.  VdbeBran
1d260 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
1d270 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a  );.  if( res ){.
1d280 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1d290 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
1d2a0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1d2b0 20 53 65 65 6b 20 50 31 20 50 32 20 2a 20 2a 20   Seek P1 P2 * * 
1d2c0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
1d2d0 69 6e 74 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a  intkey=r[P2].**.
1d2e0 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e  ** P1 is an open
1d2f0 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 61 6e   table cursor an
1d300 64 20 50 32 20 69 73 20 61 20 72 6f 77 69 64 20  d P2 is a rowid 
1d310 69 6e 74 65 67 65 72 2e 20 20 41 72 72 61 6e 67  integer.  Arrang
1d320 65 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d  e.** for P1 to m
1d330 6f 76 65 20 73 6f 20 74 68 61 74 20 69 74 20 70  ove so that it p
1d340 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 72 6f 77  oints to the row
1d350 69 64 20 67 69 76 65 6e 20 62 79 20 50 32 2e 0a  id given by P2..
1d360 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 63  **.** This is ac
1d370 74 75 61 6c 6c 79 20 61 20 64 65 66 65 72 72 65  tually a deferre
1d380 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67  d seek.  Nothing
1d390 20 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e   actually happen
1d3a0 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63  s until.** the c
1d3b0 75 72 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f  ursor is used to
1d3c0 20 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20   read a record. 
1d3d0 20 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f   That way, if no
1d3e0 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c   reads.** occur,
1d3f0 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20   no unnecessary 
1d400 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a  I/O happens..*/.
1d410 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20  case OP_Seek: { 
1d420 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56     /* in2 */.  V
1d430 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
1d440 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1d450 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1d460 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1d470 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1d480 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1d490 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
1d4a0 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
1d4b0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1d4c0 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
1d4d0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
1d4e0 30 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  0;.  pIn2 = &aMe
1d4f0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43  m[pOp->p2];.  pC
1d500 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d  ->movetoTarget =
1d510 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
1d520 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 70 43  alue(pIn2);.  pC
1d530 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1d540 20 30 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72   0;.  pC->deferr
1d550 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20  edMoveto = 1;.  
1d560 62 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20  break;.}.  ../* 
1d570 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31  Opcode: Found P1
1d580 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1d590 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1d5a0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50  3@P4].**.** If P
1d5b0 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74  4==0 then regist
1d5c0 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
1d5d0 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
1d5e0 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49  y MakeRecord.  I
1d5f0 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72  f.** P4>0 then r
1d600 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
1d610 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65  e first of P4 re
1d620 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72  gisters that for
1d630 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a  m an unpacked.**
1d640 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43   record..**.** C
1d650 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
1d660 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
1d670 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
1d680 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
1d690 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61 20 70 72  nd P4.** is a pr
1d6a0 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72  efix of any entr
1d6b0 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a  y in P1 then a j
1d6c0 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50  ump is made to P
1d6d0 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c  2 and.** P1 is l
1d6e0 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
1d6f0 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74  the matching ent
1d700 72 79 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ry..**.** See al
1d710 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f  so: NotFound, No
1d720 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45 78 69  Conflict, NotExi
1d730 73 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f  sts. SeekGe.*/./
1d740 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75  * Opcode: NotFou
1d750 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  nd P1 P2 P3 P4 *
1d760 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1d770 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1d780 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
1d790 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
1d7a0 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
1d7b0 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
1d7c0 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
1d7d0 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1d7e0 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
1d7f0 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
1d800 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
1d810 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
1d820 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69   .** Cursor P1 i
1d830 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74  s on an index bt
1d840 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63  ree.  If the rec
1d850 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62  ord identified b
1d860 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69  y P3 and P4.** i
1d870 73 20 6e 6f 74 20 74 68 65 20 70 72 65 66 69 78  s not the prefix
1d880 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e   of any entry in
1d890 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20   P1 then a jump 
1d8a0 69 73 20 6d 61 64 65 20 74 6f 20 50 32 2e 20 20  is made to P2.  
1d8b0 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63  If P1 .** does c
1d8c0 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72 79 20  ontain an entry 
1d8d0 77 68 6f 73 65 20 70 72 65 66 69 78 20 6d 61 74  whose prefix mat
1d8e0 63 68 65 73 20 74 68 65 20 50 33 2f 50 34 20 72  ches the P3/P4 r
1d8f0 65 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74 72  ecord then contr
1d900 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f  ol.** falls thro
1d910 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
1d920 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e 64 20  instruction and 
1d930 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  P1 is left point
1d940 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61  ing at the.** ma
1d950 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a  tching entry..**
1d960 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1d970 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20  und, NotExists, 
1d980 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a  NoConflict.*/./*
1d990 20 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c   Opcode: NoConfl
1d9a0 69 63 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ict P1 P2 P3 P4 
1d9b0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
1d9c0 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
1d9d0 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20  * If P4==0 then 
1d9e0 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64  register P3 hold
1d9f0 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75  s a blob constru
1da00 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f  cted by MakeReco
1da10 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20  rd.  If.** P4>0 
1da20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
1da30 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66   is the first of
1da40 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68   P4 registers th
1da50 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  at form an unpac
1da60 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a  ked.** record..*
1da70 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  * .** Cursor P1 
1da80 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  is on an index b
1da90 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65  tree.  If the re
1daa0 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20  cord identified 
1dab0 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20  by P3 and P4.** 
1dac0 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 4e 55 4c  contains any NUL
1dad0 4c 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d  L value, jump im
1dae0 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
1daf0 20 20 49 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f    If all terms o
1db00 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20  f the.** record 
1db10 61 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65  are not-NULL the
1db20 6e 20 61 20 63 68 65 63 6b 20 69 73 20 64 6f 6e  n a check is don
1db30 65 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69  e to determine i
1db40 66 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68 65  f any row in the
1db50 0a 2a 2a 20 50 31 20 69 6e 64 65 78 20 62 74 72  .** P1 index btr
1db60 65 65 20 68 61 73 20 61 20 6d 61 74 63 68 69 6e  ee has a matchin
1db70 67 20 6b 65 79 20 70 72 65 66 69 78 2e 20 20 49  g key prefix.  I
1db80 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d  f there are no m
1db90 61 74 63 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20  atches, jump.** 
1dba0 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
1dbb0 32 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  2.  If there is 
1dbc0 61 20 6d 61 74 63 68 2c 20 66 61 6c 6c 20 74 68  a match, fall th
1dbd0 72 6f 75 67 68 20 61 6e 64 20 6c 65 61 76 65 20  rough and leave 
1dbe0 74 68 65 20 50 31 0a 2a 2a 20 63 75 72 73 6f 72  the P1.** cursor
1dbf0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65   pointing to the
1dc00 20 6d 61 74 63 68 69 6e 67 20 72 6f 77 2e 0a 2a   matching row..*
1dc10 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1dc20 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4f   is similar to O
1dc30 50 5f 4e 6f 74 46 6f 75 6e 64 20 77 69 74 68 20  P_NotFound with 
1dc40 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20 74  the exceptions t
1dc50 68 61 74 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63  hat the.** branc
1dc60 68 20 69 73 20 61 6c 77 61 79 73 20 74 61 6b 65  h is always take
1dc70 6e 20 69 66 20 61 6e 79 20 70 61 72 74 20 6f 66  n if any part of
1dc80 20 74 68 65 20 73 65 61 72 63 68 20 6b 65 79 20   the search key 
1dc90 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  input is NULL..*
1dca0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e  *.** See also: N
1dcb0 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c 20  otFound, Found, 
1dcc0 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63 61 73  NotExists.*/.cas
1dcd0 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 3a  e OP_NoConflict:
1dce0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1dcf0 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  3 */.case OP_Not
1dd00 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20  Found:       /* 
1dd10 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1dd20 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20  e OP_Found: {   
1dd30 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1dd40 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61  3 */.  int alrea
1dd50 64 79 45 78 69 73 74 73 3b 0a 20 20 69 6e 74 20  dyExists;.  int 
1dd60 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ii;.  VdbeCursor
1dd70 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
1dd80 0a 20 20 63 68 61 72 20 2a 70 46 72 65 65 3b 0a  .  char *pFree;.
1dd90 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
1dda0 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70   *pIdxKey;.  Unp
1ddb0 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20  ackedRecord r;. 
1ddc0 20 63 68 61 72 20 61 54 65 6d 70 52 65 63 5b 52   char aTempRec[R
1ddd0 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e 70  OUND8(sizeof(Unp
1dde0 61 63 6b 65 64 52 65 63 6f 72 64 29 29 20 2b 20  ackedRecord)) + 
1ddf0 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 34 20 2b 20  sizeof(Mem)*4 + 
1de00 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  7];..#ifdef SQLI
1de10 54 45 5f 54 45 53 54 0a 20 20 69 66 28 20 70 4f  TE_TEST.  if( pO
1de20 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f  p->opcode!=OP_No
1de30 43 6f 6e 66 6c 69 63 74 20 29 20 73 71 6c 69 74  Conflict ) sqlit
1de40 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b  e3_found_count++
1de50 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73 73 65  ;.#endif..  asse
1de60 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1de70 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1de80 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
1de90 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1dea0 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 43 20  4_INT32 );.  pC 
1deb0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1dec0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1ded0 43 21 3d 30 20 29 3b 0a 20 20 70 49 6e 33 20 3d  C!=0 );.  pIn3 =
1dee0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1def0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
1df00 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61  Cursor!=0 );.  a
1df10 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1df20 6c 65 3d 3d 30 20 29 3b 0a 20 20 70 46 72 65 65  le==0 );.  pFree
1df30 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
1df40 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64  eded.  Only used
1df50 20 74 6f 20 73 75 70 70 72 65 73 73 20 61 20 63   to suppress a c
1df60 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e  ompiler warning.
1df70 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
1df80 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70  4.i>0 ){.    r.p
1df90 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
1dfa0 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
1dfb0 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d  ield = (u16)pOp-
1dfc0 3e 70 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65  >p4.i;.    r.aMe
1dfd0 6d 20 3d 20 70 49 6e 33 3b 0a 20 20 20 20 66 6f  m = pIn3;.    fo
1dfe0 72 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e 46 69  r(ii=0; ii<r.nFi
1dff0 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  eld; ii++){.    
1e000 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
1e010 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 69 5d  alid(&r.aMem[ii]
1e020 29 20 29 3b 0a 20 20 20 20 20 20 45 78 70 61 6e  ) );.      Expan
1e030 64 42 6c 6f 62 28 26 72 2e 61 4d 65 6d 5b 69 69  dBlob(&r.aMem[ii
1e040 5d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  ]);.#ifdef SQLIT
1e050 45 5f 44 45 42 55 47 0a 20 20 20 20 20 20 69 66  E_DEBUG.      if
1e060 28 20 69 69 20 29 20 52 45 47 49 53 54 45 52 5f  ( ii ) REGISTER_
1e070 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2b 69 69  TRACE(pOp->p3+ii
1e080 2c 20 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a  , &r.aMem[ii]);.
1e090 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 20 20 20  #endif.    }.   
1e0a0 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43   r.flags = UNPAC
1e0b0 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48  KED_PREFIX_MATCH
1e0c0 3b 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20  ;.    pIdxKey = 
1e0d0 26 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  &r;.  }else{.   
1e0e0 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74   pIdxKey = sqlit
1e0f0 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70 61 63  e3VdbeAllocUnpac
1e100 6b 65 64 52 65 63 6f 72 64 28 0a 20 20 20 20 20  kedRecord(.     
1e110 20 20 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c     pC->pKeyInfo,
1e120 20 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f   aTempRec, sizeo
1e130 66 28 61 54 65 6d 70 52 65 63 29 2c 20 26 70 46  f(aTempRec), &pF
1e140 72 65 65 0a 20 20 20 20 29 3b 20 0a 20 20 20 20  ree.    ); .    
1e150 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29  if( pIdxKey==0 )
1e160 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1e170 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
1e180 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
1e190 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1e1a0 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
1e1b0 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20 29 3b 20 20  EM_Zero)==0 );  
1e1c0 2f 2a 20 7a 65 72 6f 62 6c 6f 62 73 20 61 6c 72  /* zeroblobs alr
1e1d0 65 61 64 79 20 65 78 70 61 6e 64 65 64 20 2a 2f  eady expanded */
1e1e0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
1e1f0 52 65 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d  RecordUnpack(pC-
1e200 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d  >pKeyInfo, pIn3-
1e210 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64  >n, pIn3->z, pId
1e220 78 4b 65 79 29 3b 0a 20 20 20 20 70 49 64 78 4b  xKey);.    pIdxK
1e230 65 79 2d 3e 66 6c 61 67 73 20 7c 3d 20 55 4e 50  ey->flags |= UNP
1e240 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54  ACKED_PREFIX_MAT
1e250 43 48 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f  CH;.  }.  if( pO
1e260 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f  p->opcode==OP_No
1e270 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20 20  Conflict ){.    
1e280 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f 4e 6f  /* For the OP_No
1e290 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64 65 2c  Conflict opcode,
1e2a0 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69   take the jump i
1e2b0 66 20 61 6e 79 20 6f 66 20 74 68 65 0a 20 20 20  f any of the.   
1e2c0 20 2a 2a 20 69 6e 70 75 74 20 66 69 65 6c 64 73   ** input fields
1e2d0 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69 6e 63 65   are NULL, since
1e2e0 20 61 6e 79 20 6b 65 79 20 77 69 74 68 20 61 20   any key with a 
1e2f0 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20 20  NULL will not.  
1e300 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74 20 2a 2f    ** conflict */
1e310 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69  .    for(ii=0; i
1e320 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b  i<r.nField; ii++
1e330 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72 2e 61  ){.      if( r.a
1e340 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20  Mem[ii].flags & 
1e350 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
1e360 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1e370 20 2d 20 31 3b 20 56 64 62 65 42 72 61 6e 63 68   - 1; VdbeBranch
1e380 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20  Taken(1,2);.    
1e390 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
1e3a0 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72   }.    }.  }.  r
1e3b0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1e3c0 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1e3d0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70 49 64 78  C->pCursor, pIdx
1e3e0 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29  Key, 0, 0, &res)
1e3f0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e  ;.  if( pOp->p4.
1e400 69 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  i==0 ){.    sqli
1e410 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 46  te3DbFree(db, pF
1e420 72 65 65 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  ree);.  }.  if( 
1e430 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
1e440 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
1e450 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
1e460 20 3d 20 72 65 73 3b 0a 20 20 61 6c 72 65 61 64   = res;.  alread
1e470 79 45 78 69 73 74 73 20 3d 20 28 72 65 73 3d 3d  yExists = (res==
1e480 30 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  0);.  pC->nullRo
1e490 77 20 3d 20 31 2d 61 6c 72 65 61 64 79 45 78 69  w = 1-alreadyExi
1e4a0 73 74 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72  sts;.  pC->defer
1e4b0 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
1e4c0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1e4d0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1e4e0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
1e4f0 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20  e==OP_Found ){. 
1e500 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
1e510 65 6e 28 61 6c 72 65 61 64 79 45 78 69 73 74 73  en(alreadyExists
1e520 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20  !=0,2);.    if( 
1e530 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20  alreadyExists ) 
1e540 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1e550 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56  ;.  }else{.    V
1e560 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 61  dbeBranchTaken(a
1e570 6c 72 65 61 64 79 45 78 69 73 74 73 3d 3d 30 2c  lreadyExists==0,
1e580 32 29 3b 0a 20 20 20 20 69 66 28 20 21 61 6c 72  2);.    if( !alr
1e590 65 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20  eadyExists ) pc 
1e5a0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1e5b0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1e5c0 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69  * Opcode: NotExi
1e5d0 73 74 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a  sts P1 P2 P3 * *
1e5e0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e  .** Synopsis: in
1e5f0 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a  tkey=r[P3].**.**
1e600 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
1e610 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65   of a cursor ope
1e620 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c  n on an SQL tabl
1e630 65 20 62 74 72 65 65 20 28 77 69 74 68 20 69 6e  e btree (with in
1e640 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20  teger.** keys). 
1e650 20 50 33 20 69 73 20 61 6e 20 69 6e 74 65 67 65   P3 is an intege
1e660 72 20 72 6f 77 69 64 2e 20 20 49 66 20 50 31 20  r rowid.  If P1 
1e670 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  does not contain
1e680 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 0a 2a   a record with.*
1e690 2a 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20  * rowid P3 then 
1e6a0 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
1e6b0 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20 64   to P2.  If P1 d
1e6c0 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 20 72 65  oes contain a re
1e6d0 63 6f 72 64 0a 2a 2a 20 77 69 74 68 20 72 6f 77  cord.** with row
1e6e0 69 64 20 50 33 20 74 68 65 6e 20 6c 65 61 76 65  id P3 then leave
1e6f0 20 74 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e   the cursor poin
1e700 74 69 6e 67 20 61 74 20 74 68 61 74 20 72 65 63  ting at that rec
1e710 6f 72 64 20 61 6e 64 20 66 61 6c 6c 0a 2a 2a 20  ord and fall.** 
1e720 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
1e730 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
1e740 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f  .**.** The OP_No
1e750 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65  tFound opcode pe
1e760 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20  rforms the same 
1e770 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64  operation on ind
1e780 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69  ex btrees.** (wi
1e790 74 68 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c  th arbitrary mul
1e7a0 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a  ti-value keys)..
1e7b0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1e7c0 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1e7d0 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 63   NoConflict.*/.c
1e7e0 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  ase OP_NotExists
1e7f0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
1e800 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62  mp, in3 */.  Vdb
1e810 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
1e820 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
1e830 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34    int res;.  u64
1e840 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d   iKey;..  pIn3 =
1e850 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1e860 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
1e870 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
1e880 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1e890 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1e8a0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1e8b0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1e8c0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1e8d0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
1e8e0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
1e8f0 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74  able );.  assert
1e900 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
1e910 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 70 43 72  eReg==0 );.  pCr
1e920 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
1e930 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
1e940 72 21 3d 30 20 29 3b 0a 20 20 72 65 73 20 3d 20  r!=0 );.  res = 
1e950 30 3b 0a 20 20 69 4b 65 79 20 3d 20 70 49 6e 33  0;.  iKey = pIn3
1e960 2d 3e 75 2e 69 3b 0a 20 20 72 63 20 3d 20 73 71  ->u.i;.  rc = sq
1e970 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1e980 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20  Unpacked(pCrsr, 
1e990 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72 65 73  0, iKey, 0, &res
1e9a0 29 3b 0a 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77  );.  pC->lastRow
1e9b0 69 64 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a  id = pIn3->u.i;.
1e9c0 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1e9d0 69 64 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30  id = res==0 ?1:0
1e9e0 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
1e9f0 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
1ea00 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1ea10 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65  TALE;.  pC->defe
1ea20 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
1ea30 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
1ea40 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69  n(res!=0,2);.  i
1ea50 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20  f( res!=0 ){.   
1ea60 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1ea70 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  1;.    assert( p
1ea80 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 3d  C->rowidIsValid=
1ea90 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e  =0 );.  }.  pC->
1eaa0 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73  seekResult = res
1eab0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1eac0 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63   Opcode: Sequenc
1ead0 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
1eae0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
1eaf0 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 46 69 6e  =rowid.**.** Fin
1eb00 64 20 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c  d the next avail
1eb10 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75  able sequence nu
1eb20 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20  mber for cursor 
1eb30 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  P1..** Write the
1eb40 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
1eb50 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
1eb60 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e  2..** The sequen
1eb70 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65  ce number on the
1eb80 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65   cursor is incre
1eb90 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74 68 69  mented after thi
1eba0 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e  s.** instruction
1ebb0 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  .  .*/.case OP_S
1ebc0 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20  equence: {      
1ebd0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
1ebe0 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
1ebf0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1ec00 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1ec10 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
1ec20 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  t( p->apCsr[pOp-
1ec30 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20 70 4f 75  >p1]!=0 );.  pOu
1ec40 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73  t->u.i = p->apCs
1ec50 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43  r[pOp->p1]->seqC
1ec60 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b  ount++;.  break;
1ec70 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
1ec80 4e 65 77 52 6f 77 69 64 20 50 31 20 50 32 20 50  NewRowid P1 P2 P
1ec90 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
1eca0 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a  s: r[P2]=rowid.*
1ecb0 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69  *.** Get a new i
1ecc0 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75  nteger record nu
1ecd0 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77  mber (a.k.a "row
1ece0 69 64 22 29 20 75 73 65 64 20 61 73 20 74 68 65  id") used as the
1ecf0 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e   key to a table.
1ed00 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e  .** The record n
1ed10 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65  umber is not pre
1ed20 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20  viously used as 
1ed30 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74  a key in the dat
1ed40 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74  abase.** table t
1ed50 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f  hat cursor P1 po
1ed60 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65  ints to.  The ne
1ed70 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  w record number 
1ed80 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72  is written.** wr
1ed90 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65  itten to registe
1eda0 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  r P2..**.** If P
1edb0 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73 20 61  3>0 then P3 is a
1edc0 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65   register in the
1edd0 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74   root frame of t
1ede0 68 69 73 20 56 44 42 45 20 74 68 61 74 20 68 6f  his VDBE that ho
1edf0 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67  lds .** the larg
1ee00 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67  est previously g
1ee10 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20  enerated record 
1ee20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72  number. No new r
1ee30 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72  ecord numbers ar
1ee40 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20  e.** allowed to 
1ee50 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  be less than thi
1ee60 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68  s value. When th
1ee70 69 73 20 76 61 6c 75 65 20 72 65 61 63 68 65 73  is value reaches
1ee80 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a   its maximum, .*
1ee90 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c  * an SQLITE_FULL
1eea0 20 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61   error is genera
1eeb0 74 65 64 2e 20 54 68 65 20 50 33 20 72 65 67 69  ted. The P3 regi
1eec0 73 74 65 72 20 69 73 20 75 70 64 61 74 65 64 20  ster is updated 
1eed0 77 69 74 68 20 74 68 65 20 27 0a 2a 2a 20 67 65  with the '.** ge
1eee0 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e  nerated record n
1eef0 75 6d 62 65 72 2e 20 54 68 69 73 20 50 33 20 6d  umber. This P3 m
1ef00 65 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64  echanism is used
1ef10 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65   to help impleme
1ef20 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e  nt the.** AUTOIN
1ef30 43 52 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e  CREMENT feature.
1ef40 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52  .*/.case OP_NewR
1ef50 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
1ef60 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
1ef70 65 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 76 3b  ease */.  i64 v;
1ef80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef90 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77 69   /* The new rowi
1efa0 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  d */.  VdbeCurso
1efb0 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f 2a  r *pC;        /*
1efc0 20 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c 65   Cursor of table
1efd0 20 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77 20   to get the new 
1efe0 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72  rowid */.  int r
1eff0 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  es;             
1f000 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 61    /* Result of a
1f010 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  n sqlite3BtreeLa
1f020 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e  st() */.  int cn
1f030 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1f040 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c   /* Counter to l
1f050 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20  imit the number 
1f060 6f 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a 20  of searches */. 
1f070 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
1f080 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
1f090 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67  ter holding larg
1f0a0 65 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41 55  est rowid for AU
1f0b0 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20  TOINCREMENT */. 
1f0c0 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
1f0d0 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20  me;     /* Root 
1f0e0 66 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f  frame of VDBE */
1f0f0 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65 73  ..  v = 0;.  res
1f100 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
1f110 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1f120 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1f130 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1f140 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1f150 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1f160 0a 20 20 69 66 28 20 4e 45 56 45 52 28 70 43 2d  .  if( NEVER(pC-
1f170 3e 70 43 75 72 73 6f 72 3d 3d 30 29 20 29 7b 0a  >pCursor==0) ){.
1f180 20 20 20 20 2f 2a 20 54 68 65 20 7a 65 72 6f 20      /* The zero 
1f190 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 61  initialization a
1f1a0 62 6f 76 65 20 69 73 20 61 6c 6c 20 74 68 61 74  bove is all that
1f1b0 20 69 73 20 6e 65 65 64 65 64 20 2a 2f 0a 20 20   is needed */.  
1f1c0 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68  }else{.    /* Th
1f1d0 65 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72 20  e next rowid or 
1f1e0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 64  record number (d
1f1f0 69 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20 66  ifferent terms f
1f200 6f 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20 20  or the same.    
1f210 2a 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62 74  ** thing) is obt
1f220 61 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d 73  ained in a two-s
1f230 74 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20  tep algorithm.. 
1f240 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72     **.    ** Fir
1f250 73 74 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f  st we attempt to
1f260 20 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65 73   find the larges
1f270 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64  t existing rowid
1f280 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20 20   and add one.   
1f290 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42 75   ** to that.  Bu
1f2a0 74 20 69 66 20 74 68 65 20 6c 61 72 67 65 73 74  t if the largest
1f2b0 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20   existing rowid 
1f2c0 69 73 20 61 6c 72 65 61 64 79 20 74 68 65 20 6d  is already the m
1f2d0 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f  aximum.    ** po
1f2e0 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c 20  sitive integer, 
1f2f0 77 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c 20  we have to fall 
1f300 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 73  through to the s
1f310 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f  econd.    ** pro
1f320 62 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f 72  babilistic algor
1f330 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ithm.    **.    
1f340 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61 6c  ** The second al
1f350 67 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73 65  gorithm is to se
1f360 6c 65 63 74 20 61 20 72 6f 77 69 64 20 61 74 20  lect a rowid at 
1f370 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20 69  random and see i
1f380 66 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72 65  f.    ** it alre
1f390 61 64 79 20 65 78 69 73 74 73 20 69 6e 20 74 68  ady exists in th
1f3a0 65 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74 20  e table.  If it 
1f3b0 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20  does not exist, 
1f3c0 77 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 73  we have.    ** s
1f3d0 75 63 63 65 65 64 65 64 2e 20 20 49 66 20 74 68  ucceeded.  If th
1f3e0 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64  e random rowid d
1f3f0 6f 65 73 20 65 78 69 73 74 2c 20 77 65 20 73 65  oes exist, we se
1f400 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20  lect a new one. 
1f410 20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61 67     ** and try ag
1f420 61 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20 74  ain, up to 100 t
1f430 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  imes..    */.   
1f440 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
1f450 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66 20  able );..#ifdef 
1f460 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57  SQLITE_32BIT_ROW
1f470 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41  ID.#   define MA
1f480 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66 66  X_ROWID 0x7fffff
1f490 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20  ff.#else.    /* 
1f4a0 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63  Some compilers c
1f4b0 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f  omplain about co
1f4c0 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66  nstants of the f
1f4d0 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66 66 66  orm 0x7fffffffff
1f4e0 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f  ffffff..    ** O
1f4f0 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61  thers complain a
1f500 62 6f 75 74 20 30 78 37 66 66 66 66 66 66 66 66  bout 0x7ffffffff
1f510 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65  ffffffffLL.  The
1f520 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
1f530 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f   seems.    ** to
1f540 20 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e   provide the con
1f550 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69  stant while maki
1f560 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73  ng all compilers
1f570 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23   happy..    */.#
1f580 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f     define MAX_RO
1f590 57 49 44 20 20 28 69 36 34 29 28 20 28 28 28 75  WID  (i64)( (((u
1f5a0 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c  64)0x7fffffff)<<
1f5b0 33 32 29 20 7c 20 28 75 36 34 29 30 78 66 66 66  32) | (u64)0xfff
1f5c0 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a  fffff ).#endif..
1f5d0 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65      if( !pC->use
1f5e0 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
1f5f0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1f600 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70  3BtreeLast(pC->p
1f610 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
1f620 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1f630 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1f640 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1f650 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
1f660 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65 73   }.      if( res
1f670 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20   ){.        v = 
1f680 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36  1;   /* IMP: R-6
1f690 31 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20  1914-48074 */.  
1f6a0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1f6b0 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
1f6c0 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
1f6d0 61 6c 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  alid(pC->pCursor
1f6e0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  ) );.        rc 
1f6f0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
1f700 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f  ySize(pC->pCurso
1f710 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20  r, &v);.        
1f720 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
1f730 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 43 61  TE_OK );   /* Ca
1f740 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c 6c 6f 77  nnot fail follow
1f750 69 6e 67 20 42 74 72 65 65 4c 61 73 74 28 29 20  ing BtreeLast() 
1f760 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 76  */.        if( v
1f770 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20  >=MAX_ROWID ){. 
1f780 20 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65           pC->use
1f790 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b  RandomRowid = 1;
1f7a0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
1f7b0 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 20            v++;  
1f7c0 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33 38   /* IMP: R-29538
1f7d0 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20 20 20 20  -34987 */.      
1f7e0 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
1f7f0 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
1f800 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
1f810 4d 45 4e 54 0a 20 20 20 20 69 66 28 20 70 4f 70  MENT.    if( pOp
1f820 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 2f 2a  ->p3 ){.      /*
1f830 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20   Assert that P3 
1f840 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72  is a valid memor
1f850 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20  y cell. */.     
1f860 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
1f870 3e 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  >0 );.      if( 
1f880 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  p->pFrame ){.   
1f890 20 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d       for(pFrame=
1f8a0 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
1f8b0 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61  e->pParent; pFra
1f8c0 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
1f8d0 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20  nt);.        /* 
1f8e0 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
1f8f0 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
1f900 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
1f910 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1f920 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20  3<=pFrame->nMem 
1f930 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20  );.        pMem 
1f940 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
1f950 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
1f960 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f  }else{.        /
1f970 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33  * Assert that P3
1f980 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f   is a valid memo
1f990 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20  ry cell. */.    
1f9a0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1f9b0 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
1f9c0 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
1f9d0 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65       pMem = &aMe
1f9e0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
1f9f0 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
1fa00 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20  ange(p, pMem);. 
1fa10 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
1fa20 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
1fa30 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20  pMem) );..      
1fa40 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
1fa50 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20  Op->p3, pMem);. 
1fa60 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
1fa70 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d  MemIntegerify(pM
1fa80 65 6d 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  em);.      asser
1fa90 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
1faa0 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
1fab0 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c    /* mem(P3) hol
1fac0 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f  ds an integer */
1fad0 0a 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d  .      if( pMem-
1fae0 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20  >u.i==MAX_ROWID 
1faf0 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  || pC->useRandom
1fb00 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20  Rowid ){.       
1fb10 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c   rc = SQLITE_FUL
1fb20 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31  L;   /* IMP: R-1
1fb30 32 32 37 35 2d 36 31 33 33 38 20 2a 2f 0a 20 20  2275-61338 */.  
1fb40 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1fb50 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1fb60 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
1fb70 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29   v<pMem->u.i+1 )
1fb80 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d  {.        v = pM
1fb90 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20  em->u.i + 1;.   
1fba0 20 20 20 7d 0a 20 20 20 20 20 20 70 4d 65 6d 2d     }.      pMem-
1fbb0 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 7d 0a  >u.i = v;.    }.
1fbc0 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70  #endif.    if( p
1fbd0 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
1fbe0 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d  d ){.      /* IM
1fbf0 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a  PLEMENTATION-OF:
1fc00 20 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49   R-07677-41881 I
1fc10 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f  f the largest RO
1fc20 57 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20  WID is equal to 
1fc30 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72  the.      ** lar
1fc40 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e  gest possible in
1fc50 74 65 67 65 72 20 28 39 32 32 33 33 37 32 30 33  teger (922337203
1fc60 36 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e  6854775807) then
1fc70 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20   the database.  
1fc80 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74      ** engine st
1fc90 61 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73  arts picking pos
1fca0 69 74 69 76 65 20 63 61 6e 64 69 64 61 74 65 20  itive candidate 
1fcb0 52 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d  ROWIDs at random
1fcc0 20 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20   until.      ** 
1fcd0 69 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61  it finds one tha
1fce0 74 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75  t is not previou
1fcf0 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20  sly used. */.   
1fd00 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1fd10 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20  p3==0 );  /* We 
1fd20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e  cannot be in ran
1fd30 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69  dom rowid mode i
1fd40 66 20 74 68 69 73 20 69 73 0a 20 20 20 20 20 20  f this is.      
1fd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd60 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54         ** an AUT
1fd70 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65  OINCREMENT table
1fd80 2e 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 6f 6e  . */.      /* on
1fd90 20 74 68 65 20 66 69 72 73 74 20 61 74 74 65 6d   the first attem
1fda0 70 74 2c 20 73 69 6d 70 6c 79 20 64 6f 20 6f 6e  pt, simply do on
1fdb0 65 20 6d 6f 72 65 20 74 68 61 6e 20 70 72 65 76  e more than prev
1fdc0 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 76 20  ious */.      v 
1fdd0 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20  = lastRowid;.   
1fde0 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57     v &= (MAX_ROW
1fdf0 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72  ID>>1); /* ensur
1fe00 65 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67  e doesn't go neg
1fe10 61 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20 76  ative */.      v
1fe20 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f  ++; /* ensure no
1fe30 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20  n-zero */.      
1fe40 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 77  cnt = 0;.      w
1fe50 68 69 6c 65 28 20 20 20 28 28 72 63 20 3d 20 73  hile(   ((rc = s
1fe60 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1fe70 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43  oUnpacked(pC->pC
1fe80 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76  ursor, 0, (u64)v
1fe90 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1fea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1feb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fec0 20 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51     0, &res))==SQ
1fed0 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20  LITE_OK).       
1fee0 20 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29       && (res==0)
1fef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20  .            && 
1ff00 28 2b 2b 63 6e 74 3c 31 30 30 29 29 7b 0a 20 20  (++cnt<100)){.  
1ff10 20 20 20 20 20 20 2f 2a 20 63 6f 6c 6c 69 73 69        /* collisi
1ff20 6f 6e 20 2d 20 74 72 79 20 61 6e 6f 74 68 65 72  on - try another
1ff30 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 2a 2f   random rowid */
1ff40 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
1ff50 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65  _randomness(size
1ff60 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20  of(v), &v);.    
1ff70 20 20 20 20 69 66 28 20 63 6e 74 3c 35 20 29 7b      if( cnt<5 ){
1ff80 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72  .          /* tr
1ff90 79 20 22 73 6d 61 6c 6c 22 20 72 61 6e 64 6f 6d  y "small" random
1ffa0 20 72 6f 77 69 64 73 20 66 6f 72 20 74 68 65 20   rowids for the 
1ffb0 69 6e 69 74 69 61 6c 20 61 74 74 65 6d 70 74 73  initial attempts
1ffc0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 76 20   */.          v 
1ffd0 26 3d 20 30 78 66 66 66 66 66 66 3b 0a 20 20 20  &= 0xffffff;.   
1ffe0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1fff0 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f        v &= (MAX_
20000 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e  ROWID>>1); /* en
20010 73 75 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20  sure doesn't go 
20020 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20  negative */.    
20030 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 76 2b      }.        v+
20040 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e  +; /* ensure non
20050 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d  -zero */.      }
20060 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
20070 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d  QLITE_OK && res=
20080 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =0 ){.        rc
20090 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20   = SQLITE_FULL; 
200a0 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31    /* IMP: R-3821
200b0 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20  9-53002 */.     
200c0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
200d0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
200e0 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74    }.      assert
200f0 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a  ( v>0 );  /* EV:
20100 20 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a   R-40812-03570 *
20110 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  /.    }.    pC->
20120 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
20130 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
20140 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
20150 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
20160 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
20170 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
20180 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = v;.  break;.}
20190 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73  ../* Opcode: Ins
201a0 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ert P1 P2 P3 P4 
201b0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
201c0 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61 74  intkey=r[P3] dat
201d0 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72  a=r[P2].**.** Wr
201e0 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74  ite an entry int
201f0 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63  o the table of c
20200 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77  ursor P1.  A new
20210 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65   entry is.** cre
20220 61 74 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e  ated if it doesn
20230 27 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  't already exist
20240 20 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f 72   or the data for
20250 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20   an existing.** 
20260 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72 69  entry is overwri
20270 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20  tten.  The data 
20280 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d  is the value MEM
20290 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20  _Blob stored in 
202a0 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62  register.** numb
202b0 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69  er P2. The key i
202c0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
202d0 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79  ster P3. The key
202e0 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45   must.** be a ME
202f0 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  M_Int..**.** If 
20300 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
20310 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  GE flag of P5 is
20320 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
20330 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20  ow change count 
20340 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
20350 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
20360 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41  ).  If the OPFLA
20370 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67  G_LASTROWID flag
20380 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a   of P5 is set,.*
20390 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20  * then rowid is 
203a0 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65  stored for subse
203b0 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20  quent return by 
203c0 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c  the.** sqlite3_l
203d0 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
203e0 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68  () function (oth
203f0 65 72 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d  erwise it is unm
20400 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20  odified)..**.** 
20410 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53  If the OPFLAG_US
20420 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
20430 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e   of P5 is set an
20440 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  d if the result 
20450 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73  of.** the last s
20460 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f  eek operation (O
20470 50 5f 4e 6f 74 45 78 69 73 74 73 29 20 77 61 73  P_NotExists) was
20480 20 61 20 73 75 63 63 65 73 73 2c 20 74 68 65 6e   a success, then
20490 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69   this.** operati
204a0 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65  on will not atte
204b0 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20  mpt to find the 
204c0 61 70 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20  appropriate row 
204d0 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20  before doing.** 
204e0 74 68 65 20 69 6e 73 65 72 74 20 62 75 74 20 77  the insert but w
204f0 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72  ill instead over
20500 77 72 69 74 65 20 74 68 65 20 72 6f 77 20 74 68  write the row th
20510 61 74 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  at the cursor is
20520 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f  .** currently po
20530 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73  inting to.  Pres
20540 75 6d 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f  umably, the prio
20550 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  r OP_NotExists o
20560 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72  pcode.** has alr
20570 65 61 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20  eady positioned 
20580 74 68 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65  the cursor corre
20590 63 74 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61  ctly.  This is a
205a0 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a  n optimization.*
205b0 2a 20 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65  * that boosts pe
205c0 72 66 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f  rformance by avo
205d0 69 64 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20  iding redundant 
205e0 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  seeks..**.** If 
205f0 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  the OPFLAG_ISUPD
20600 41 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c  ATE flag is set,
20610 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   then this opcod
20620 65 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a  e is part of an.
20630 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61 74  ** UPDATE operat
20640 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20  ion.  Otherwise 
20650 28 69 66 20 74 68 65 20 66 6c 61 67 20 69 73 20  (if the flag is 
20660 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69 73  clear) then this
20670 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61   opcode.** is pa
20680 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20  rt of an INSERT 
20690 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20  operation.  The 
206a0 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e  difference is on
206b0 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a  ly important to.
206c0 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 68 6f  ** the update ho
206d0 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65  ok..**.** Parame
206e0 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74  ter P4 may point
206f0 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e   to a string con
20700 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c  taining the tabl
20710 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61  e-name, or.** ma
20720 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74  y be NULL. If it
20730 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68   is not NULL, th
20740 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  en the update-ho
20750 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e  ok .** (sqlite3.
20760 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29  xUpdateCallback)
20770 20 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c   is invoked foll
20780 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73 73 66  owing a successf
20790 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a  ul insert..**.**
207a0 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20   (WARNING/TODO: 
207b0 49 66 20 50 31 20 69 73 20 61 20 70 73 65 75 64  If P1 is a pseud
207c0 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20  o-cursor and P2 
207d0 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a  is dynamically.*
207e0 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  * allocated, the
207f0 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50  n ownership of P
20800 32 20 69 73 20 74 72 61 6e 73 66 65 72 72 65 64  2 is transferred
20810 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63   to the pseudo-c
20820 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67  ursor.** and reg
20830 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73  ister P2 becomes
20840 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20   ephemeral.  If 
20850 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 68  the cursor is ch
20860 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61  anged, the.** va
20870 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
20880 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61  P2 will then cha
20890 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20  nge.  Make sure 
208a0 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a  this does not.**
208b0 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c   cause any probl
208c0 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ems.).**.** This
208d0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c   instruction onl
208e0 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65  y works on table
208f0 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65  s.  The equivale
20900 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  nt instruction.*
20910 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73  * for indices is
20920 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a   OP_IdxInsert..*
20930 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73  /./* Opcode: Ins
20940 65 72 74 49 6e 74 20 50 31 20 50 32 20 50 33 20  ertInt P1 P2 P3 
20950 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
20960 73 3a 20 20 69 6e 74 6b 65 79 3d 50 33 20 64 61  s:  intkey=P3 da
20970 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  ta=r[P2].**.** T
20980 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74 6c  his works exactl
20990 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74  y like OP_Insert
209a0 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
209b0 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20 69   key is the.** i
209c0 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 33 2c  nteger value P3,
209d0 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f   not the value o
209e0 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 73 74  f the integer st
209f0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
20a00 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P3..*/.case OP_
20a10 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f 50  Insert: .case OP
20a20 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20  _InsertInt: {.  
20a30 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20  Mem *pData;     
20a40 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f    /* MEM cell ho
20a50 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74  lding data for t
20a60 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20  he record to be 
20a70 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65  inserted */.  Me
20a80 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20  m *pKey;        
20a90 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64  /* MEM cell hold
20aa0 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65  ing key  for the
20ab0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34   record */.  i64
20ac0 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f   iKey;         /
20ad0 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20 52 4f  * The integer RO
20ae0 57 49 44 20 6f 72 20 6b 65 79 20 66 6f 72 20 74  WID or key for t
20af0 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20  he record to be 
20b00 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 56 64  inserted */.  Vd
20b10 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
20b20 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62  /* Cursor to tab
20b30 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e  le into which in
20b40 73 65 72 74 20 69 73 20 77 72 69 74 74 65 6e 20  sert is written 
20b50 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20  */.  int nZero; 
20b60 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
20b70 20 6f 66 20 7a 65 72 6f 2d 62 79 74 65 73 20 74   of zero-bytes t
20b80 6f 20 61 70 70 65 6e 64 20 2a 2f 0a 20 20 69 6e  o append */.  in
20b90 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20  t seekResult;   
20ba0 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69  /* Result of pri
20bb0 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20  or seek or 0 if 
20bc0 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54  no USESEEKRESULT
20bd0 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74   flag */.  const
20be0 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20   char *zDb;  /* 
20bf0 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20  database name - 
20c00 75 73 65 64 20 62 79 20 74 68 65 20 75 70 64 61  used by the upda
20c10 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e  te hook */.  con
20c20 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 3b 20 2f  st char *zTbl; /
20c30 2a 20 54 61 62 6c 65 20 6e 61 6d 65 20 2d 20 75  * Table name - u
20c40 73 65 64 20 62 79 20 74 68 65 20 6f 70 64 61 74  sed by the opdat
20c50 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20  e hook */.  int 
20c60 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  op;           /*
20c70 20 4f 70 63 6f 64 65 20 66 6f 72 20 75 70 64 61   Opcode for upda
20c80 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f  te hook: SQLITE_
20c90 55 50 44 41 54 45 20 6f 72 20 53 51 4c 49 54 45  UPDATE or SQLITE
20ca0 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a 20 20 70 44  _INSERT */..  pD
20cb0 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  ata = &aMem[pOp-
20cc0 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
20cd0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
20ce0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
20cf0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65   );.  assert( me
20d00 6d 49 73 56 61 6c 69 64 28 70 44 61 74 61 29 20  mIsValid(pData) 
20d10 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
20d20 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
20d30 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
20d40 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
20d50 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
20d60 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
20d70 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20  TableReg==0 );. 
20d80 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
20d90 61 62 6c 65 20 29 3b 0a 20 20 52 45 47 49 53 54  able );.  REGIST
20da0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
20db0 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66 28  , pData);..  if(
20dc0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
20dd0 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 70  _Insert ){.    p
20de0 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Key = &aMem[pOp-
20df0 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  >p3];.    assert
20e00 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20  ( pKey->flags & 
20e10 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61  MEM_Int );.    a
20e20 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
20e30 64 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20 52  d(pKey) );.    R
20e40 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
20e50 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20  p->p3, pKey);.  
20e60 20 20 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75    iKey = pKey->u
20e70 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  .i;.  }else{.   
20e80 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
20e90 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49  code==OP_InsertI
20ea0 6e 74 20 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d  nt );.    iKey =
20eb0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20   pOp->p3;.  }.. 
20ec0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
20ed0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
20ee0 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
20ef0 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
20f00 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29  FLAG_LASTROWID )
20f10 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   db->lastRowid =
20f20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65   lastRowid = iKe
20f30 79 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e  y;.  if( pData->
20f40 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
20f50 20 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a   ){.    pData->z
20f60 20 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d   = 0;.    pData-
20f70 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  >n = 0;.  }else{
20f80 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61  .    assert( pDa
20f90 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  ta->flags & (MEM
20fa0 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29  _Blob|MEM_Str) )
20fb0 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75  ;.  }.  seekResu
20fc0 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26  lt = ((pOp->p5 &
20fd0 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
20fe0 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
20ff0 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20  kResult : 0);.  
21000 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  if( pData->flags
21010 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
21020 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61     nZero = pData
21030 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c  ->u.nZero;.  }el
21040 73 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20  se{.    nZero = 
21050 30 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  0;.  }.  rc = sq
21060 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74  lite3BtreeInsert
21070 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c  (pC->pCursor, 0,
21080 20 69 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20   iKey,.         
21090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210a0 20 70 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61   pData->z, pData
210b0 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20  ->n, nZero,.    
210c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210d0 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26        (pOp->p5 &
210e0 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 29 21   OPFLAG_APPEND)!
210f0 3d 30 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20  =0, seekResult. 
21100 20 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49   );.  pC->rowidI
21110 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43  sValid = 0;.  pC
21120 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
21130 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
21140 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
21150 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76  STALE;..  /* Inv
21160 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
21170 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
21180 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   */.  if( rc==SQ
21190 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78  LITE_OK && db->x
211a0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
211b0 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  & pOp->p4.z ){. 
211c0 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62     zDb = db->aDb
211d0 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b  [pC->iDb].zName;
211e0 0a 20 20 20 20 7a 54 62 6c 20 3d 20 70 4f 70 2d  .    zTbl = pOp-
211f0 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d 20  >p4.z;.    op = 
21200 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
21210 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53  AG_ISUPDATE) ? S
21220 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53  QLITE_UPDATE : S
21230 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20  QLITE_INSERT);. 
21240 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
21250 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 64 62  sTable );.    db
21260 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
21270 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67  k(db->pUpdateArg
21280 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c  , op, zDb, zTbl,
21290 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65   iKey);.    asse
212a0 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
212b0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
212c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c  ../* Opcode: Del
212d0 65 74 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ete P1 P2 * P4 *
212e0 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68  .**.** Delete th
212f0 65 20 72 65 63 6f 72 64 20 61 74 20 77 68 69 63  e record at whic
21300 68 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  h the P1 cursor 
21310 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
21320 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  nting..**.** The
21330 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20   cursor will be 
21340 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
21350 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78 74   either the next
21360 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 73   or the previous
21370 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68  .** record in th
21380 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69  e table. If it i
21390 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
213a0 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f  at the next reco
213b0 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  rd, then.** the 
213c0 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75  next Next instru
213d0 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20  ction will be a 
213e0 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69 74  no-op.  Hence it
213f0 20 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65   is OK to delete
21400 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 66 72 6f  .** a record fro
21410 6d 20 77 69 74 68 69 6e 20 61 6e 20 4e 65 78 74  m within an Next
21420 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   loop..**.** If 
21430 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
21440 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20 69 73  GE flag of P2 is
21450 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
21460 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20  ow change count 
21470 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
21480 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
21490 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74  )..**.** P1 must
214a0 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74   not be pseudo-t
214b0 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f  able.  It has to
214c0 20 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65   be a real table
214d0 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c   with.** multipl
214e0 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  e rows..**.** If
214f0 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P4 is not NULL,
21500 20 74 68 65 6e 20 69 74 20 69 73 20 74 68 65 20   then it is the 
21510 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
21520 65 20 74 68 61 74 20 50 31 20 69 73 0a 2a 2a 20  e that P1 is.** 
21530 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68  pointing to.  Th
21540 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 77 69  e update hook wi
21550 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69  ll be invoked, i
21560 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20  f it exists..** 
21570 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
21580 4c 20 74 68 65 6e 20 74 68 65 20 50 31 20 63 75  L then the P1 cu
21590 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62  rsor must have b
215a0 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a  een positioned.*
215b0 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f  * using OP_NotFo
215c0 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76  und prior to inv
215d0 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  oking this opcod
215e0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  e..*/.case OP_De
215f0 6c 65 74 65 3a 20 7b 0a 20 20 69 36 34 20 69 4b  lete: {.  i64 iK
21600 65 79 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ey;.  VdbeCursor
21610 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28   *pC;..  assert(
21620 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
21630 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
21640 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
21650 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
21660 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
21670 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
21680 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f  pCursor!=0 );  /
21690 2a 20 4f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72  * Only valid for
216a0 20 72 65 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f   real tables, no
216b0 20 70 73 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f   pseudotables */
216c0 0a 20 20 69 4b 65 79 20 3d 20 70 43 2d 3e 6c 61  .  iKey = pC->la
216d0 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20 2f 2a  stRowid;      /*
216e0 20 4f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74   Only used for t
216f0 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a  he update hook *
21700 2f 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 44  /..  /* The OP_D
21710 65 6c 65 74 65 20 6f 70 63 6f 64 65 20 61 6c 77  elete opcode alw
21720 61 79 73 20 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f  ays follows an O
21730 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 20 4f  P_NotExists or O
21740 50 5f 4c 61 73 74 20 6f 72 0a 20 20 2a 2a 20 4f  P_Last or.  ** O
21750 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 20 74 68 65 20  P_Column on the 
21760 73 61 6d 65 20 74 61 62 6c 65 20 77 69 74 68 6f  same table witho
21770 75 74 20 61 6e 79 20 69 6e 74 65 72 76 65 6e 69  ut any interveni
21780 6e 67 20 6f 70 65 72 61 74 69 6f 6e 73 20 74 68  ng operations th
21790 61 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 6d 6f  at.  ** might mo
217a0 76 65 20 6f 72 20 69 6e 76 61 6c 69 64 61 74 65  ve or invalidate
217b0 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65   the cursor.  He
217c0 6e 63 65 20 63 75 72 73 6f 72 20 70 43 20 69 73  nce cursor pC is
217d0 20 61 6c 77 61 79 73 20 70 6f 69 6e 74 69 6e 67   always pointing
217e0 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77  .  ** to the row
217f0 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64 20 61   to be deleted a
21800 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 56 64  nd the sqlite3Vd
21810 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  beCursorMoveto()
21820 20 6f 70 65 72 61 74 69 6f 6e 0a 20 20 2a 2a 20   operation.  ** 
21830 62 65 6c 6f 77 20 69 73 20 61 6c 77 61 79 73 20  below is always 
21840 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 6e  a no-op and cann
21850 6f 74 20 66 61 69 6c 2e 20 20 57 65 20 77 69 6c  ot fail.  We wil
21860 6c 20 72 75 6e 20 69 74 20 61 6e 79 68 6f 77 2c  l run it anyhow,
21870 20 74 68 6f 75 67 68 2c 0a 20 20 2a 2a 20 74 6f   though,.  ** to
21880 20 67 75 61 72 64 20 61 67 61 69 6e 73 74 20 66   guard against f
21890 75 74 75 72 65 20 63 68 61 6e 67 65 73 20 74 6f  uture changes to
218a0 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
218b0 74 6f 72 2e 0a 20 20 2a 2a 2f 0a 20 20 61 73 73  tor..  **/.  ass
218c0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
218d0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
218e0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
218f0 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
21900 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63  ;.  if( NEVER(rc
21910 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67  !=SQLITE_OK) ) g
21920 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
21930 5f 65 72 72 6f 72 3b 0a 0a 20 20 72 63 20 3d 20  _error;..  rc = 
21940 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65  sqlite3BtreeDele
21950 74 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b  te(pC->pCursor);
21960 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
21970 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
21980 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
21990 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  he update-hook i
219a0 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20  f required. */. 
219b0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
219c0 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74  OK && db->xUpdat
219d0 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70  eCallback && pOp
219e0 2d 3e 70 34 2e 7a 20 26 26 20 70 43 2d 3e 69 73  ->p4.z && pC->is
219f0 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 64 62 2d  Table ){.    db-
21a00 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
21a10 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c  (db->pUpdateArg,
21a20 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 0a   SQLITE_DELETE,.
21a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a40 20 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b          db->aDb[
21a50 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20  pC->iDb].zName, 
21a60 70 4f 70 2d 3e 70 34 2e 7a 2c 20 69 4b 65 79 29  pOp->p4.z, iKey)
21a70 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
21a80 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a  ->iDb>=0 );.  }.
21a90 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20    if( pOp->p2 & 
21aa0 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29  OPFLAG_NCHANGE )
21ab0 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
21ac0 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63   break;.}./* Opc
21ad0 6f 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20  ode: ResetCount 
21ae0 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  * * * * *.**.** 
21af0 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  The value of the
21b00 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
21b10 69 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65  is copied to the
21b20 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
21b30 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  .** change count
21b40 65 72 20 28 72 65 74 75 72 6e 65 64 20 62 79 20  er (returned by 
21b50 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73  subsequent calls
21b60 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e   to sqlite3_chan
21b70 67 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20  ges())..** Then 
21b80 74 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c  the VMs internal
21b90 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
21ba0 72 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20  resets to 0..** 
21bb0 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
21bc0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73  trigger programs
21bd0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73  ..*/.case OP_Res
21be0 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c  etCount: {.  sql
21bf0 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67  ite3VdbeSetChang
21c00 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67  es(db, p->nChang
21c10 65 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65  e);.  p->nChange
21c20 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
21c30 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
21c40 74 65 72 43 6f 6d 70 61 72 65 20 50 31 20 50 32  terCompare P1 P2
21c50 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73   P3 P4.** Synops
21c60 69 73 3a 20 20 69 66 20 6b 65 79 28 50 31 29 21  is:  if key(P1)!
21c70 3d 72 74 72 69 6d 28 72 5b 50 33 5d 2c 50 34 29  =rtrim(r[P3],P4)
21c80 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50   goto P2.**.** P
21c90 31 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75  1 is a sorter cu
21ca0 72 73 6f 72 2e 20 54 68 69 73 20 69 6e 73 74 72  rsor. This instr
21cb0 75 63 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20  uction compares 
21cc0 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 0a  a prefix of the.
21cd0 2a 2a 20 74 68 65 20 72 65 63 6f 72 64 20 62 6c  ** the record bl
21ce0 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ob in register P
21cf0 33 20 61 67 61 69 6e 73 74 20 61 20 70 72 65 66  3 against a pref
21d00 69 78 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20  ix of the entry 
21d10 74 68 61 74 20 0a 2a 2a 20 74 68 65 20 73 6f 72  that .** the sor
21d20 74 65 72 20 63 75 72 73 6f 72 20 63 75 72 72 65  ter cursor curre
21d30 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e 20  ntly points to. 
21d40 20 54 68 65 20 66 69 6e 61 6c 20 50 34 20 66 69   The final P4 fi
21d50 65 6c 64 73 20 6f 66 20 62 6f 74 68 0a 2a 2a 20  elds of both.** 
21d60 74 68 65 20 50 33 20 61 6e 64 20 73 6f 72 74 65  the P3 and sorte
21d70 72 20 72 65 63 6f 72 64 20 61 72 65 20 69 67 6e  r record are ign
21d80 6f 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  ored..**.** If e
21d90 69 74 68 65 72 20 50 33 20 6f 72 20 74 68 65 20  ither P3 or the 
21da0 73 6f 72 74 65 72 20 63 6f 6e 74 61 69 6e 73 20  sorter contains 
21db0 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66  a NULL in one of
21dc0 20 74 68 65 69 72 20 73 69 67 6e 69 66 69 63 61   their significa
21dd0 6e 74 0a 2a 2a 20 66 69 65 6c 64 73 20 28 6e 6f  nt.** fields (no
21de0 74 20 63 6f 75 6e 74 69 6e 67 20 74 68 65 20 50  t counting the P
21df0 34 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20  4 fields at the 
21e00 65 6e 64 20 77 68 69 63 68 20 61 72 65 20 69 67  end which are ig
21e10 6e 6f 72 65 64 29 20 74 68 65 6e 0a 2a 2a 20 74  nored) then.** t
21e20 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  he comparison is
21e30 20 61 73 73 75 6d 65 64 20 74 6f 20 62 65 20 65   assumed to be e
21e40 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c  qual..**.** Fall
21e50 20 74 68 72 6f 75 67 68 20 74 6f 20 6e 65 78 74   through to next
21e60 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 66 20   instruction if 
21e70 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64 73 20  the two records 
21e80 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 74 6f  compare equal to
21e90 0a 2a 2a 20 65 61 63 68 20 6f 74 68 65 72 2e 20  .** each other. 
21ea0 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
21eb0 68 65 79 20 61 72 65 20 64 69 66 66 65 72 65 6e  hey are differen
21ec0 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  t..*/.case OP_So
21ed0 72 74 65 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20  rterCompare: {. 
21ee0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
21ef0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e  .  int res;.  in
21f00 74 20 6e 49 67 6e 6f 72 65 3b 0a 0a 20 20 70 43  t nIgnore;..  pC
21f10 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
21f20 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
21f30 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
21f40 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
21f50 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
21f60 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  );.  pIn3 = &aMe
21f70 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e 49  m[pOp->p3];.  nI
21f80 67 6e 6f 72 65 20 3d 20 70 4f 70 2d 3e 70 34 2e  gnore = pOp->p4.
21f90 69 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  i;.  rc = sqlite
21fa0 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61  3VdbeSorterCompa
21fb0 72 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e 49 67  re(pC, pIn3, nIg
21fc0 6e 6f 72 65 2c 20 26 72 65 73 29 3b 0a 20 20 56  nore, &res);.  V
21fd0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
21fe0 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es!=0,2);.  if( 
21ff0 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  res ){.    pc = 
22000 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20  pOp->p2-1;.  }. 
22010 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f   break;.};../* O
22020 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 44 61 74  pcode: SorterDat
22030 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  a P1 P2 * * *.**
22040 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
22050 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74  =data.**.** Writ
22060 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
22070 50 32 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  P2 the current s
22080 6f 72 74 65 72 20 64 61 74 61 20 66 6f 72 20 73  orter data for s
22090 6f 72 74 65 72 20 63 75 72 73 6f 72 20 50 31 2e  orter cursor P1.
220a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
220b0 65 72 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65  erData: {.  Vdbe
220c0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70  Cursor *pC;..  p
220d0 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
220e0 3e 70 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  >p2];.  pC = p->
220f0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
22100 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
22110 65 72 28 70 43 29 20 29 3b 0a 20 20 72 63 20 3d  er(pC) );.  rc =
22120 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
22130 65 72 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75  erRowkey(pC, pOu
22140 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
22150 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61  /* Opcode: RowDa
22160 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ta P1 P2 * * *.*
22170 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
22180 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69  ]=data.**.** Wri
22190 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
221a0 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   P2 the complete
221b0 20 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75   row data for cu
221c0 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72  rsor P1..** Ther
221d0 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65  e is no interpre
221e0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61  tation of the da
221f0 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a  ta.  .** It is j
22200 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20  ust copied onto 
22210 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20  the P2 register 
22220 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69  exactly as .** i
22230 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  t is found in th
22240 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
22250 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
22260 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
22270 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61  pointing to a va
22280 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e  lid row (not a N
22290 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61  ULL row).** of a
222a0 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
222b0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
222c0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
222d0 6f 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20  owKey P1 P2 * * 
222e0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
222f0 5b 50 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20 57  [P2]=key.**.** W
22300 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
22310 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65  er P2 the comple
22320 74 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63  te row key for c
22330 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65  ursor P1..** The
22340 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72  re is no interpr
22350 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64  etation of the d
22360 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65  ata.  .** The ke
22370 79 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f  y is copied onto
22380 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72   the P2 register
22390 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20   exactly as .** 
223a0 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74  it is found in t
223b0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
223c0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
223d0 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
223e0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76   pointing to a v
223f0 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20  alid row (not a 
22400 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20  NULL row).** of 
22410 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
22420 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
22430 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
22440 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77  Key:.case OP_Row
22450 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75  Data: {.  VdbeCu
22460 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
22470 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75  rsor *pCrsr;.  u
22480 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b  32 n;.  i64 n64;
22490 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ..  pOut = &aMem
224a0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d  [pOp->p2];.  mem
224b0 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
224c0 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f   pOut);..  /* No
224d0 74 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61  te that RowKey a
224e0 6e 64 20 52 6f 77 44 61 74 61 20 61 72 65 20 72  nd RowData are r
224f0 65 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68  eally exactly th
22500 65 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69  e same instructi
22510 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  on */.  assert( 
22520 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
22530 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
22540 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
22550 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
22560 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
22570 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73  (pC)==0 );.  ass
22580 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
22590 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21   || pOp->opcode!
225a0 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20  =OP_RowData );. 
225b0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
225c0 61 62 6c 65 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  able==0 || pOp->
225d0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61  opcode==OP_RowDa
225e0 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ta );.  assert( 
225f0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
22600 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d  t( pC->nullRow==
22610 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
22620 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
22630 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  g==0 );.  assert
22640 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
22650 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
22660 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  ->pCursor;.  ass
22670 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
22680 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
22690 43 72 73 72 29 20 29 3b 0a 0a 20 20 2f 2a 20 54  Crsr) );..  /* T
226a0 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64  he OP_RowKey and
226b0 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f   OP_RowData opco
226c0 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f  des always follo
226d0 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  w OP_NotExists o
226e0 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64  r.  ** OP_Rewind
226f0 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f  /Op_Next with no
22700 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73   intervening ins
22710 74 72 75 63 74 69 6f 6e 73 20 74 68 61 74 20 6d  tructions that m
22720 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65 0a  ight invalidate.
22730 20 20 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e    ** the cursor.
22740 20 20 48 65 6e 63 65 20 74 68 65 20 66 6f 6c 6c    Hence the foll
22750 6f 77 69 6e 67 20 73 71 6c 69 74 65 33 56 64 62  owing sqlite3Vdb
22760 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20  eCursorMoveto() 
22770 63 61 6c 6c 20 69 73 20 61 6c 77 61 79 73 0a 20  call is always. 
22780 20 2a 2a 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20   ** a no-op and 
22790 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 20  can never fail. 
227a0 20 42 75 74 20 77 65 20 6c 65 61 76 65 20 69 74   But we leave it
227b0 20 69 6e 20 70 6c 61 63 65 20 61 73 20 61 20 73   in place as a s
227c0 61 66 65 74 79 2e 0a 20 20 2a 2f 0a 20 20 61 73  afety..  */.  as
227d0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
227e0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
227f0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
22800 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43  eCursorMoveto(pC
22810 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72  );.  if( NEVER(r
22820 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20  c!=SQLITE_OK) ) 
22830 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
22840 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20  o_error;..  if( 
22850 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
22860 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 70  {.    assert( !p
22870 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
22880 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29    VVA_ONLY(rc =)
22890 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
228a0 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 36 34  Size(pCrsr, &n64
228b0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
228c0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
228d0 20 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75     /* True becau
228e0 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65  se of CursorMove
228f0 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20  to() call above 
22900 2a 2f 0a 20 20 20 20 69 66 28 20 6e 36 34 3e 64  */.    if( n64>d
22910 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
22920 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
22930 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f  {.      goto too
22940 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _big;.    }.    
22950 6e 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20 20  n = (u32)n64;.  
22960 7d 65 6c 73 65 7b 0a 20 20 20 20 56 56 41 5f 4f  }else{.    VVA_O
22970 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65  NLY(rc =) sqlite
22980 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70  3BtreeDataSize(p
22990 43 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61  Crsr, &n);.    a
229a0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
229b0 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61  E_OK );    /* Da
229c0 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20  taSize() cannot 
229d0 66 61 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20  fail */.    if( 
229e0 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69  n>(u32)db->aLimi
229f0 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
22a00 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20  ENGTH] ){.      
22a10 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
22a20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71    }.  }.  if( sq
22a30 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77  lite3VdbeMemGrow
22a40 28 70 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a  (pOut, n, 0) ){.
22a50 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
22a60 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  .  }.  pOut->n =
22a70 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65   n;.  MemSetType
22a80 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42  Flag(pOut, MEM_B
22a90 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  lob);.  if( pC->
22aa0 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20  isTable==0 ){.  
22ab0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
22ac0 72 65 65 4b 65 79 28 70 43 72 73 72 2c 20 30 2c  reeKey(pCrsr, 0,
22ad0 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20   n, pOut->z);.  
22ae0 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20  }else{.    rc = 
22af0 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
22b00 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f  (pCrsr, 0, n, pO
22b10 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f  ut->z);.  }.  pO
22b20 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
22b30 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61  _UTF8;  /* In ca
22b40 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65  se the blob is e
22b50 76 65 72 20 63 61 73 74 20 74 6f 20 74 65 78 74  ver cast to text
22b60 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41 58   */.  UPDATE_MAX
22b70 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
22b80 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
22b90 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
22ba0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
22bb0 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50   Opcode: Rowid P
22bc0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
22bd0 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
22be0 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  wid.**.** Store 
22bf0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61  in register P2 a
22c00 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20  n integer which 
22c10 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68  is the key of th
22c20 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68  e table entry th
22c30 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72  at.** P1 is curr
22c40 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a  ently point to..
22c50 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20  **.** P1 can be 
22c60 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61  either an ordina
22c70 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69  ry table or a vi
22c80 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68  rtual table.  Th
22c90 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62  ere used to.** b
22ca0 65 20 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f  e a separate OP_
22cb0 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f  VRowid opcode fo
22cc0 72 20 75 73 65 20 77 69 74 68 20 76 69 72 74 75  r use with virtu
22cd0 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74  al tables, but t
22ce0 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64  his.** one opcod
22cf0 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20  e now works for 
22d00 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65 73  both table types
22d10 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
22d20 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
22d30 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
22d40 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64  erelease */.  Vd
22d50 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
22d60 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33  i64 v;.  sqlite3
22d70 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
22d80 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
22d90 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a  dule *pModule;..
22da0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
22db0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
22dc0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
22dd0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
22de0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
22df0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
22e00 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
22e10 61 62 6c 65 52 65 67 3d 3d 30 20 7c 7c 20 70 43  ableReg==0 || pC
22e20 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69  ->nullRow );.  i
22e30 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  f( pC->nullRow )
22e40 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
22e50 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
22e60 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65    break;.  }else
22e70 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65   if( pC->deferre
22e80 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76  dMoveto ){.    v
22e90 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72   = pC->movetoTar
22ea0 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  get;.#ifndef SQL
22eb0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
22ec0 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66  TABLE.  }else if
22ed0 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  ( pC->pVtabCurso
22ee0 72 20 29 7b 0a 20 20 20 20 70 56 74 61 62 20 3d  r ){.    pVtab =
22ef0 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72   pC->pVtabCursor
22f00 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f  ->pVtab;.    pMo
22f10 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
22f20 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72  odule;.    asser
22f30 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77  t( pModule->xRow
22f40 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70  id );.    rc = p
22f50 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70  Module->xRowid(p
22f60 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20  C->pVtabCursor, 
22f70 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  &v);.    sqlite3
22f80 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
22f90 28 70 2c 20 70 56 74 61 62 29 3b 0a 23 65 6e 64  (p, pVtab);.#end
22fa0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
22fb0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
22fc0 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  /.  }else{.    a
22fd0 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
22fe0 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20  or!=0 );.    rc 
22ff0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
23000 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
23010 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
23020 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
23030 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d  ror;.    if( pC-
23040 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29 7b  >rowidIsValid ){
23050 0a 20 20 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c  .      v = pC->l
23060 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65  astRowid;.    }e
23070 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
23080 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
23090 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ize(pC->pCursor,
230a0 20 26 76 29 3b 0a 20 20 20 20 20 20 61 73 73 65   &v);.      asse
230b0 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
230c0 4b 20 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20  K );  /* Always 
230d0 73 6f 20 62 65 63 61 75 73 65 20 6f 66 20 43 75  so because of Cu
230e0 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 61 62 6f  rsorMoveto() abo
230f0 76 65 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a  ve */.    }.  }.
23100 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b    pOut->u.i = v;
23110 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
23120 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20  Opcode: NullRow 
23130 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
23140 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72   Move the cursor
23150 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f   P1 to a null ro
23160 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d  w.  Any OP_Colum
23170 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20  n operations.** 
23180 74 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65  that occur while
23190 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f   the cursor is o
231a0 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77  n the null row w
231b0 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72  ill always.** wr
231c0 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  ite a NULL..*/.c
231d0 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20  ase OP_NullRow: 
231e0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
231f0 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  pC;..  assert( p
23200 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
23210 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
23220 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
23230 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
23240 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
23250 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
23260 31 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  1;.  pC->rowidIs
23270 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d  Valid = 0;.  pC-
23280 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
23290 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66  ACHE_STALE;.  if
232a0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b  ( pC->pCursor ){
232b0 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
232c0 65 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d  eClearCursor(pC-
232d0 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20  >pCursor);.  }. 
232e0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
232f0 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32  code: Last P1 P2
23300 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
23310 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
23320 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
23330 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63   or Next instruc
23340 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
23350 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
23360 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20  e last entry in 
23370 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
23380 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
23390 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
233a0 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61  index is empty a
233b0 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75  nd P2>0, then ju
233c0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
233d0 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69  o P2..** If P2 i
233e0 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61  s 0 or if the ta
233f0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
23400 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20  not empty, fall 
23410 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
23420 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
23430 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
23440 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20   OP_Last: {     
23450 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
23460 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
23470 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
23480 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  r;.  int res;.. 
23490 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
234a0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
234b0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
234c0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
234d0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
234e0 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73   pC!=0 );.  pCrs
234f0 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
23500 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73  .  res = 0;.  as
23510 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29  sert( pCrsr!=0 )
23520 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
23530 42 74 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c  BtreeLast(pCrsr,
23540 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75   &res);.  pC->nu
23550 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b  llRow = (u8)res;
23560 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
23570 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
23580 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
23590 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
235a0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
235b0 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  LE;.  if( pOp->p
235c0 32 3e 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42  2>0 ){.    VdbeB
235d0 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
235e0 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 72 65  0,2);.    if( re
235f0 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  s ) pc = pOp->p2
23600 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
23610 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
23620 3a 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a  : Sort P1 P2 * *
23630 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
23640 63 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74 6c  code does exactl
23650 79 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67  y the same thing
23660 20 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65 78   as OP_Rewind ex
23670 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74 20  cept that.** it 
23680 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e  increments an un
23690 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61  documented globa
236a0 6c 20 76 61 72 69 61 62 6c 65 20 75 73 65 64 20  l variable used 
236b0 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a  for testing..**.
236c0 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61 63  ** Sorting is ac
236d0 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77 72  complished by wr
236e0 69 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69 6e  iting records in
236f0 74 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e 64  to a sorting ind
23700 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69  ex,.** then rewi
23710 6e 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65 78  nding that index
23720 20 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74 20   and playing it 
23730 62 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e  back from beginn
23740 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20  ing to.** end.  
23750 57 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53 6f  We use the OP_So
23760 72 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65 61  rt opcode instea
23770 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20 74  d of OP_Rewind t
23780 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69  o do the.** rewi
23790 6e 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74 68  nding so that th
237a0 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  e global variabl
237b0 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d  e will be increm
237c0 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67  ented and.** reg
237d0 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63 61  ression tests ca
237e0 6e 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74  n determine whet
237f0 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f  her or not the o
23800 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63  ptimizer is.** c
23810 6f 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a  orrectly optimiz
23820 69 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a  ing out sorts..*
23830 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
23840 53 6f 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70  Sort:    /* jump
23850 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74   */.case OP_Sort
23860 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
23870 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  mp */.#ifdef SQL
23880 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74  ITE_TEST.  sqlit
23890 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b  e3_sort_count++;
238a0 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63  .  sqlite3_searc
238b0 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69  h_count--;.#endi
238c0 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b  f.  p->aCounter[
238d0 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
238e0 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a 20  S_SORT]++;.  /* 
238f0 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
23900 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d  o OP_Rewind */.}
23910 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77 69  ./* Opcode: Rewi
23920 6e 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nd P1 P2 * * *.*
23930 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73  *.** The next us
23940 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f  e of the Rowid o
23950 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74  r Column or Next
23960 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72   instruction for
23970 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66   P1 .** will ref
23980 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
23990 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74  entry in the dat
239a0 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
239b0 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20  ndex..** If the 
239c0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
239d0 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30  s empty and P2>0
239e0 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
239f0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
23a00 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20  * If P2 is 0 or 
23a10 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  if the table or 
23a20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70  index is not emp
23a30 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ty, fall through
23a40 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
23a50 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
23a60 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77  ..*/.case OP_Rew
23a70 69 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ind: {        /*
23a80 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
23a90 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
23aa0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
23ab0 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65  int res;..  asse
23ac0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
23ad0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
23ae0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
23af0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
23b00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
23b10 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  0 );.  assert( i
23b20 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f  sSorter(pC)==(pO
23b30 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f  p->opcode==OP_So
23b40 72 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72  rterSort) );.  r
23b50 65 73 20 3d 20 31 3b 0a 20 20 69 66 28 20 69 73  es = 1;.  if( is
23b60 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20  Sorter(pC) ){.  
23b70 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
23b80 62 65 53 6f 72 74 65 72 52 65 77 69 6e 64 28 64  beSorterRewind(d
23b90 62 2c 20 70 43 2c 20 26 72 65 73 29 3b 0a 20 20  b, pC, &res);.  
23ba0 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 72 73 72  }else{.    pCrsr
23bb0 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
23bc0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72 73      assert( pCrs
23bd0 72 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  r );.    rc = sq
23be0 6c 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28  lite3BtreeFirst(
23bf0 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
23c00 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
23c10 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
23c20 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
23c30 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20  CACHE_STALE;.   
23c40 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
23c50 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 43 2d  d = 0;.  }.  pC-
23c60 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72  >nullRow = (u8)r
23c70 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  es;.  assert( pO
23c80 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
23c90 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 56  p2<p->nOp );.  V
23ca0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
23cb0 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es!=0,2);.  if( 
23cc0 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  res ){.    pc = 
23cd0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
23ce0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
23cf0 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20  Opcode: Next P1 
23d00 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
23d10 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72  * Advance cursor
23d20 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
23d30 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78  oints to the nex
23d40 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  t key/data pair 
23d50 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
23d60 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
23d70 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20  ere are no more 
23d80 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20  key/value pairs 
23d90 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
23da0 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
23db0 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
23dc0 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63  n.  But if the c
23dd0 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61  ursor advance wa
23de0 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a  s successful,.**
23df0 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
23e00 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  y to P2..**.** T
23e10 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
23e20 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20  t be for a real 
23e30 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
23e40 75 64 6f 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d  udo-table.  P1 m
23e50 75 73 74 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e  ust have.** been
23e60 20 6f 70 65 6e 65 64 20 70 72 69 6f 72 20 74 6f   opened prior to
23e70 20 74 68 69 73 20 6f 70 63 6f 64 65 20 6f 72 20   this opcode or 
23e80 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c  the program will
23e90 20 73 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a   segfault..**.**
23ea0 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   The P3 value is
23eb0 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
23ec0 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tree implementat
23ed0 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74  ion. If P3==1, t
23ee0 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20  hat.** means P1 
23ef0 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20  is an SQL index 
23f00 61 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e  and that this in
23f10 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20  struction could 
23f20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69  have been.** omi
23f30 74 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64  tted if that ind
23f40 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71  ex had been uniq
23f50 75 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c  ue.  P3 is usual
23f60 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20  ly 0.  P3 is.** 
23f70 61 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20  always either 0 
23f80 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  or 1..**.** P4 i
23f90 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65  s always of type
23fa0 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65   P4_ADVANCE. The
23fb0 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
23fc0 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73  r points to.** s
23fd0 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28  qlite3BtreeNext(
23fe0 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  )..**.** If P5 i
23ff0 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74  s positive and t
24000 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
24010 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75  , then event cou
24020 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  nter.** number P
24030 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61  5-1 in the prepa
24040 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73  red statement is
24050 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a   incremented..**
24060 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72  .** See also: Pr
24070 65 76 2c 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a  ev, NextIfOpen.*
24080 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78  /./* Opcode: Nex
24090 74 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33  tIfOpen P1 P2 P3
240a0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
240b0 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a  s opcode works j
240c0 75 73 74 20 6c 69 6b 65 20 4f 50 5f 4e 65 78 74  ust like OP_Next
240d0 20 65 78 63 65 70 74 20 74 68 61 74 20 69 66 20   except that if 
240e0 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74  cursor P1 is not
240f0 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61  .** open it beha
24100 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a  ves a no-op..*/.
24110 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20  /* Opcode: Prev 
24120 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
24130 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72  *.** Back up cur
24140 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  sor P1 so that i
24150 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
24160 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74  previous key/dat
24170 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a  a pair in its.**
24180 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
24190 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f    If there is no
241a0 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61   previous key/va
241b0 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66  lue pairs then f
241c0 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
241d0 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
241e0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
241f0 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  t if the cursor 
24200 62 61 63 6b 75 70 20 77 61 73 20 73 75 63 63 65  backup was succe
24210 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69  ssful,.** jump i
24220 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
24230 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
24240 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
24250 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
24260 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
24270 6c 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a  le.  If P1 is.**
24280 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74   not open then t
24290 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75  he behavior is u
242a0 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20  ndefined..**.** 
242b0 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  The P3 value is 
242c0 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74  a hint to the bt
242d0 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ree implementati
242e0 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68  on. If P3==1, th
242f0 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69  at.** means P1 i
24300 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61  s an SQL index a
24310 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73  nd that this ins
24320 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68  truction could h
24330 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74  ave been.** omit
24340 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65  ted if that inde
24350 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75  x had been uniqu
24360 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c  e.  P3 is usuall
24370 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61  y 0.  P3 is.** a
24380 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f  lways either 0 o
24390 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  r 1..**.** P4 is
243a0 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20   always of type 
243b0 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20  P4_ADVANCE. The 
243c0 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
243d0 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71   points to.** sq
243e0 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
243f0 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  us()..**.** If P
24400 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e  5 is positive an
24410 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  d the jump is ta
24420 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20  ken, then event 
24430 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  counter.** numbe
24440 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72  r P5-1 in the pr
24450 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
24460 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
24470 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .*/./* Opcode: P
24480 72 65 76 49 66 4f 70 65 6e 20 50 31 20 50 32 20  revIfOpen P1 P2 
24490 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
244a0 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
244b0 20 6a 75 73 74 20 6c 69 6b 65 20 4f 50 5f 50 72   just like OP_Pr
244c0 65 76 20 65 78 63 65 70 74 20 74 68 61 74 20 69  ev except that i
244d0 66 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e  f cursor P1 is n
244e0 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65  ot.** open it be
244f0 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  haves a no-op..*
24500 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
24510 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70  Next: {  /* jump
24520 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
24530 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
24540 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ..  pC = p->apCs
24550 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
24560 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
24570 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  C) );.  rc = sql
24580 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 4e 65  ite3VdbeSorterNe
24590 78 74 28 64 62 2c 20 70 43 2c 20 26 72 65 73 29  xt(db, pC, &res)
245a0 3b 0a 20 20 67 6f 74 6f 20 6e 65 78 74 5f 74 61  ;.  goto next_ta
245b0 69 6c 3b 0a 63 61 73 65 20 4f 50 5f 50 72 65 76  il;.case OP_Prev
245c0 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75  IfOpen:    /* ju
245d0 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  mp */.case OP_Ne
245e0 78 74 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20  xtIfOpen:    /* 
245f0 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 2d  jump */.  if( p-
24600 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3d  >apCsr[pOp->p1]=
24610 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a  =0 ) break;.  /*
24620 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 2a 2f   Fall through */
24630 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20  .case OP_Prev:  
24640 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
24650 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a  */.case OP_Next:
24660 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
24670 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
24680 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
24690 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
246a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
246b0 2d 3e 70 35 3c 41 72 72 61 79 53 69 7a 65 28 70  ->p5<ArraySize(p
246c0 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20  ->aCounter) );. 
246d0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
246e0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 72 65 73 20 3d  Op->p1];.  res =
246f0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
24700 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
24710 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
24720 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
24730 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
24740 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
24750 74 28 20 72 65 73 3d 3d 30 20 7c 7c 20 28 72 65  t( res==0 || (re
24760 73 3d 3d 31 20 26 26 20 70 43 2d 3e 69 73 54 61  s==1 && pC->isTa
24770 62 6c 65 3d 3d 30 29 20 29 3b 0a 20 20 74 65 73  ble==0) );.  tes
24780 74 63 61 73 65 28 20 72 65 73 3d 3d 31 20 29 3b  tcase( res==1 );
24790 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
247a0 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20  opcode!=OP_Next 
247b0 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
247c0 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
247d0 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72  eNext );.  asser
247e0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
247f0 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e  OP_Prev || pOp->
24800 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
24810 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
24820 73 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  s );.  assert( p
24830 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
24840 65 78 74 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70  extIfOpen || pOp
24850 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73  ->p4.xAdvance==s
24860 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 20  qlite3BtreeNext 
24870 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
24880 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65  ->opcode!=OP_Pre
24890 76 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e  vIfOpen || pOp->
248a0 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
248b0 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
248c0 73 29 3b 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e  s);.  rc = pOp->
248d0 70 34 2e 78 41 64 76 61 6e 63 65 28 70 43 2d 3e  p4.xAdvance(pC->
248e0 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
248f0 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20 70 43 2d  next_tail:.  pC-
24900 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
24910 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 56 64  ACHE_STALE;.  Vd
24920 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
24930 73 3d 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s==0,2);.  if( r
24940 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70 43 2d  es==0 ){.    pC-
24950 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
24960 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
24970 20 31 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e   1;.    p->aCoun
24980 74 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a  ter[pOp->p5]++;.
24990 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
249a0 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ST.    sqlite3_s
249b0 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
249c0 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 7b 0a 20  endif.  }else{. 
249d0 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d     pC->nullRow =
249e0 20 31 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 72 6f   1;.  }.  pC->ro
249f0 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
24a00 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72    goto check_for
24a10 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f  _interrupt;.}../
24a20 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73  * Opcode: IdxIns
24a30 65 72 74 20 50 31 20 50 32 20 50 33 20 2a 20 50  ert P1 P2 P3 * P
24a40 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
24a50 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52  ey=r[P2].**.** R
24a60 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73  egister P2 holds
24a70 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65   an SQL index ke
24a80 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65  y made using the
24a90 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69  .** MakeRecord i
24aa0 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68  nstructions.  Th
24ab0 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73  is opcode writes
24ac0 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74   that key.** int
24ad0 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20  o the index P1. 
24ae0 20 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e   Data for the en
24af0 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a  try is nil..**.*
24b00 2a 20 50 33 20 69 73 20 61 20 66 6c 61 67 20 74  * P3 is a flag t
24b10 68 61 74 20 70 72 6f 76 69 64 65 73 20 61 20 68  hat provides a h
24b20 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65  int to the b-tre
24b30 65 20 6c 61 79 65 72 20 74 68 61 74 20 74 68 69  e layer that thi
24b40 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73 20 6c  s.** insert is l
24b50 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61  ikely to be an a
24b60 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ppend..**.** If 
24b70 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41  P5 has the OPFLA
24b80 47 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 73 65  G_NCHANGE bit se
24b90 74 2c 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e  t, then the chan
24ba0 67 65 20 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a  ge counter is.**
24bb0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
24bc0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
24bd0 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  .  If the OPFLAG
24be0 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 69 73 20  _NCHANGE bit is 
24bf0 63 6c 65 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74  clear,.** then t
24c00 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  he change counte
24c10 72 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a  r is unchanged..
24c20 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20  **.** If P5 has 
24c30 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  the OPFLAG_USESE
24c40 45 4b 52 45 53 55 4c 54 20 62 69 74 20 73 65 74  EKRESULT bit set
24c50 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f  , then the curso
24c60 72 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20 6a  r must have.** j
24c70 75 73 74 20 64 6f 6e 65 20 61 20 73 65 65 6b 20  ust done a seek 
24c80 74 6f 20 74 68 65 20 73 70 6f 74 20 77 68 65 72  to the spot wher
24c90 65 20 74 68 65 20 6e 65 77 20 65 6e 74 72 79 20  e the new entry 
24ca0 69 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  is to be inserte
24cb0 64 2e 0a 2a 2a 20 54 68 69 73 20 66 6c 61 67 20  d..** This flag 
24cc0 61 76 6f 69 64 73 20 64 6f 69 6e 67 20 61 6e 20  avoids doing an 
24cd0 65 78 74 72 61 20 73 65 65 6b 2e 0a 2a 2a 0a 2a  extra seek..**.*
24ce0 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
24cf0 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f  on only works fo
24d00 72 20 69 6e 64 69 63 65 73 2e 20 20 54 68 65 20  r indices.  The 
24d10 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72  equivalent instr
24d20 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61  uction.** for ta
24d30 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73 65 72  bles is OP_Inser
24d40 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  t..*/.case OP_So
24d50 72 74 65 72 49 6e 73 65 72 74 3a 20 20 20 20 20  rterInsert:     
24d60 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65    /* in2 */.case
24d70 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b   OP_IdxInsert: {
24d80 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a          /* in2 *
24d90 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
24da0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
24db0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 6e 4b 65  pCrsr;.  int nKe
24dc0 79 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  y;.  const char 
24dd0 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73 73 65 72 74  *zKey;..  assert
24de0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
24df0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
24e00 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
24e10 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
24e20 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
24e30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  );.  assert( isS
24e40 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d  orter(pC)==(pOp-
24e50 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74  >opcode==OP_Sort
24e60 65 72 49 6e 73 65 72 74 29 20 29 3b 0a 20 20 70  erInsert) );.  p
24e70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
24e80 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
24e90 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
24ea0 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 70 43 72 73  M_Blob );.  pCrs
24eb0 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
24ec0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
24ed0 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
24ee0 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a  ) p->nChange++;.
24ef0 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
24f00 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
24f10 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
24f20 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42  ;.  rc = ExpandB
24f30 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69 66 28  lob(pIn2);.  if(
24f40 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
24f50 7b 0a 20 20 20 20 69 66 28 20 69 73 53 6f 72 74  {.    if( isSort
24f60 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 20 20  er(pC) ){.      
24f70 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
24f80 53 6f 72 74 65 72 57 72 69 74 65 28 64 62 2c 20  SorterWrite(db, 
24f90 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20 7d  pC, pIn2);.    }
24fa0 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4b 65 79  else{.      nKey
24fb0 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20   = pIn2->n;.    
24fc0 20 20 7a 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a    zKey = pIn2->z
24fd0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
24fe0 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28  ite3BtreeInsert(
24ff0 70 43 72 73 72 2c 20 7a 4b 65 79 2c 20 6e 4b 65  pCrsr, zKey, nKe
25000 79 2c 20 22 22 2c 20 30 2c 20 30 2c 20 70 4f 70  y, "", 0, 0, pOp
25010 2d 3e 70 33 2c 20 0a 20 20 20 20 20 20 20 20 20  ->p3, .         
25020 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
25030 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
25040 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73  T) ? pC->seekRes
25050 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20 20  ult : 0).       
25060 20 20 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65     );.      asse
25070 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
25080 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20  Moveto==0 );.   
25090 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
250a0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
250b0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
250c0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
250d0 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50 31 20  e: IdxDelete P1 
250e0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
250f0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 40  opsis: key=r[P2@
25100 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  P3].**.** The co
25110 6e 74 65 6e 74 20 6f 66 20 50 33 20 72 65 67 69  ntent of P3 regi
25120 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 61  sters starting a
25130 74 20 72 65 67 69 73 74 65 72 20 50 32 20 66 6f  t register P2 fo
25140 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65  rm.** an unpacke
25150 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 54 68 69  d index key. Thi
25160 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65 73  s opcode removes
25170 20 74 68 61 74 20 65 6e 74 72 79 20 66 72 6f 6d   that entry from
25180 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f   the .** index o
25190 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20  pened by cursor 
251a0 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P1..*/.case OP_I
251b0 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64  dxDelete: {.  Vd
251c0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
251d0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
251e0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e  .  int res;.  Un
251f0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
25200 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
25210 70 33 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p3>0 );.  assert
25220 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
25230 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d  Op->p2+pOp->p3<=
25240 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
25250 73 6f 72 29 2b 31 20 29 3b 0a 20 20 61 73 73 65  sor)+1 );.  asse
25260 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
25270 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
25280 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
25290 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
252a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
252b0 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
252c0 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  C->pCursor;.  as
252d0 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29  sert( pCrsr!=0 )
252e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
252f0 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 72 2e 70 4b  >p5==0 );.  r.pK
25300 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
25310 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c  yInfo;.  r.nFiel
25320 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33  d = (u16)pOp->p3
25330 3b 0a 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e  ;.  r.flags = UN
25340 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41  PACKED_PREFIX_MA
25350 54 43 48 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20  TCH;.  r.aMem = 
25360 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
25370 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
25380 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66  BUG.  { int i; f
25390 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
253a0 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
253b0 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
253c0 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
253d0 64 69 66 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  dif.  rc = sqlit
253e0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
253f0 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c  acked(pCrsr, &r,
25400 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20   0, 0, &res);.  
25410 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
25420 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20  K && res==0 ){. 
25430 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
25440 74 72 65 65 44 65 6c 65 74 65 28 70 43 72 73 72  treeDelete(pCrsr
25450 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  );.  }.  assert(
25460 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
25470 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e  eto==0 );.  pC->
25480 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
25490 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65  CHE_STALE;.  bre
254a0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
254b0 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20 50 32  : IdxRowid P1 P2
254c0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
254d0 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a  is: r[P2]=rowid.
254e0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
254f0 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20   register P2 an 
25500 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
25510 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20   the last entry 
25520 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 74  in the record at
25530 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74  .** the end of t
25540 68 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69  he index key poi
25550 6e 74 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f  nted to by curso
25560 72 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65  r P1.  This inte
25570 67 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a  ger should be.**
25580 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
25590 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f  e table entry to
255a0 20 77 68 69 63 68 20 74 68 69 73 20 69 6e 64 65   which this inde
255b0 78 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a  x entry points..
255c0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
255d0 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72  Rowid, MakeRecor
255e0 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  d..*/.case OP_Id
255f0 78 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  xRowid: {       
25600 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
25610 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42  rerelease */.  B
25620 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
25630 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
25640 3b 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a  ;.  i64 rowid;..
25650 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25660 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
25670 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
25680 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
25690 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
256a0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72  ( pC!=0 );.  pCr
256b0 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
256c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
256d0 72 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  r!=0 );.  pOut->
256e0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
256f0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
25700 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
25710 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45  (pC);.  if( NEVE
25720 52 28 72 63 29 20 29 20 67 6f 74 6f 20 61 62 6f  R(rc) ) goto abo
25730 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
25740 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
25750 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
25760 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
25770 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
25780 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52    if( !pC->nullR
25790 6f 77 20 29 7b 0a 20 20 20 20 72 6f 77 69 64 20  ow ){.    rowid 
257a0 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
257b0 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20  ded.  Only used 
257c0 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72  to silence a war
257d0 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20  ning. */.    rc 
257e0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  = sqlite3VdbeIdx
257f0 52 6f 77 69 64 28 64 62 2c 20 70 43 72 73 72 2c  Rowid(db, pCrsr,
25800 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 69 66   &rowid);.    if
25810 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
25820 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
25830 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
25840 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  ;.    }.    pOut
25850 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20  ->u.i = rowid;. 
25860 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
25870 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20   MEM_Int;.  }.  
25880 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
25890 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20 50 32  ode: IdxGE P1 P2
258a0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
258b0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
258c0 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  P4].**.** The P4
258d0 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
258e0 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
258f0 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
25900 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
25910 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
25920 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43   PRIMARY KEY.  C
25930 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
25940 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
25950 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
25960 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
25970 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
25980 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
25990 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20  RY KEY or ROWID 
259a0 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68  .** fields at th
259b0 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  e end..**.** If 
259c0 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
259d0 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ry is greater th
259e0 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
259f0 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20  he key value.** 
25a00 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
25a10 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c    Otherwise fall
25a20 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
25a30 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
25a40 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
25a50 49 64 78 47 54 20 50 31 20 50 32 20 50 33 20 50  IdxGT P1 P2 P3 P
25a60 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
25a70 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
25a80 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
25a90 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
25aa0 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
25ab0 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
25ac0 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
25ad0 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
25ae0 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72  ARY KEY.  Compar
25af0 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
25b00 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64   against the ind
25b10 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69  ex .** that P1 i
25b20 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
25b30 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
25b40 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
25b50 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66  Y or ROWID .** f
25b60 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
25b70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
25b80 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
25b90 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
25ba0 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74  e key value.** t
25bb0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
25bc0 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
25bd0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
25be0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
25bf0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
25c00 64 78 4c 54 20 50 31 20 50 32 20 50 33 20 50 34  dxLT P1 P2 P3 P4
25c10 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
25c20 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
25c30 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
25c40 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
25c50 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
25c60 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
25c70 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
25c80 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
25c90 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e  RY KEY or ROWID.
25ca0 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
25cb0 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
25cc0 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68  .** the index th
25cd0 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
25ce0 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
25cf0 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
25d00 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52  MARY KEY or.** R
25d10 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
25d20 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
25d30 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
25d40 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
25d50 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65  he key value the
25d60 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
25d70 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
25d80 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
25d90 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
25da0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
25db0 64 78 4c 45 20 50 31 20 50 32 20 50 33 20 50 34  dxLE P1 P2 P3 P4
25dc0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
25dd0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
25de0 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
25df0 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
25e00 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
25e10 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
25e20 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
25e30 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
25e40 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e  RY KEY or ROWID.
25e50 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
25e60 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
25e70 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68  .** the index th
25e80 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
25e90 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
25ea0 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
25eb0 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52  MARY KEY or.** R
25ec0 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
25ed0 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
25ee0 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
25ef0 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  y is less than o
25f00 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
25f10 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
25f20 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68  mp.** to P2. Oth
25f30 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
25f40 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
25f50 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
25f60 63 61 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20  case OP_IdxLE:  
25f70 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
25f80 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 54  */.case OP_IdxGT
25f90 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
25fa0 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
25fb0 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  xLT:          /*
25fc0 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
25fd0 5f 49 64 78 47 45 3a 20 20 7b 20 20 20 20 20 20  _IdxGE:  {      
25fe0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
25ff0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
26000 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63  int res;.  Unpac
26010 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20  kedRecord r;..  
26020 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
26030 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
26040 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
26050 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
26060 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
26070 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
26080 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64  t( pC->isOrdered
26090 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
260a0 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 3b 0a 20  ->pCursor!=0);. 
260b0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
260c0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
260d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
260e0 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  >p5==0 || pOp->p
260f0 35 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74  5==1 );.  assert
26100 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
26110 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 72 2e 70  4_INT32 );.  r.p
26120 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
26130 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65  eyInfo;.  r.nFie
26140 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70  ld = (u16)pOp->p
26150 34 2e 69 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  4.i;.  if( pOp->
26160 6f 70 63 6f 64 65 3c 4f 50 5f 49 64 78 4c 54 20  opcode<OP_IdxLT 
26170 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
26180 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
26190 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  dxLE || pOp->opc
261a0 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b  ode==OP_IdxGT );
261b0 0a 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55  .    r.flags = U
261c0 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20  NPACKED_INCRKEY 
261d0 7c 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49  | UNPACKED_PREFI
261e0 58 5f 4d 41 54 43 48 3b 0a 20 20 7d 65 6c 73 65  X_MATCH;.  }else
261f0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
26200 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
26210 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  xGE || pOp->opco
26220 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a  de==OP_IdxLT );.
26230 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e      r.flags = UN
26240 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41  PACKED_PREFIX_MA
26250 54 43 48 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d 65  TCH;.  }.  r.aMe
26260 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
26270 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  3];.#ifdef SQLIT
26280 45 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e 74 20  E_DEBUG.  { int 
26290 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e  i; for(i=0; i<r.
262a0 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73  nField; i++) ass
262b0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
262c0 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d  &r.aMem[i]) ); }
262d0 0a 23 65 6e 64 69 66 0a 20 20 72 65 73 20 3d 20  .#endif.  res = 
262e0 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  0;  /* Not neede
262f0 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f  d.  Only used to
26300 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69   silence a warni
26310 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  ng. */.  rc = sq
26320 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79 43  lite3VdbeIdxKeyC
26330 6f 6d 70 61 72 65 28 70 43 2c 20 26 72 2c 20 26  ompare(pC, &r, &
26340 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20  res);.  assert( 
26350 28 4f 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f  (OP_IdxLE&1)==(O
26360 50 5f 49 64 78 4c 54 26 31 29 20 26 26 20 28 4f  P_IdxLT&1) && (O
26370 50 5f 49 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f  P_IdxGE&1)==(OP_
26380 49 64 78 47 54 26 31 29 20 29 3b 0a 20 20 69 66  IdxGT&1) );.  if
26390 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31  ( (pOp->opcode&1
263a0 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20  )==(OP_IdxLT&1) 
263b0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
263c0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
263d0 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  dxLE || pOp->opc
263e0 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b  ode==OP_IdxLT );
263f0 0a 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b  .    res = -res;
26400 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
26410 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
26420 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70  e==OP_IdxGE || p
26430 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
26440 64 78 47 54 20 29 3b 0a 20 20 20 20 72 65 73 2b  dxGT );.    res+
26450 2b 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61  +;.  }.  VdbeBra
26460 6e 63 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32  nchTaken(res>0,2
26470 29 3b 0a 20 20 69 66 28 20 72 65 73 3e 30 20 29  );.  if( res>0 )
26480 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
26490 70 32 20 2d 20 31 20 3b 0a 20 20 7d 0a 20 20 62  p2 - 1 ;.  }.  b
264a0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
264b0 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50  de: Destroy P1 P
264c0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44  2 P3 * *.**.** D
264d0 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20  elete an entire 
264e0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
264f0 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
26500 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65 20 64  ot page in the d
26510 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20  atabase.** file 
26520 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a  is given by P1..
26530 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20  **.** The table 
26540 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20  being destroyed 
26550 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  is in the main d
26560 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
26570 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33  P3==0.  If.** P3
26580 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62  ==1 then the tab
26590 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69  le to be clear i
265a0 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61  s in the auxilia
265b0 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
265c0 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64  .** that is used
265d0 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73   to store tables
265e0 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52   create using CR
265f0 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
26600 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41  ABLE..**.** If A
26610 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61  UTOVACUUM is ena
26620 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73 20  bled then it is 
26630 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e  possible that an
26640 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a  other root page.
26650 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65  ** might be move
26660 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79  d into the newly
26670 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61   deleted root pa
26680 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ge in order to k
26690 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20  eep all.** root 
266a0 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73  pages contiguous
266b0 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
266c0 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  g of the databas
266d0 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a  e.  The former.*
266e0 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72  * value of the r
266f0 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f  oot page that mo
26700 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20  ved - its value 
26710 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20  before the move 
26720 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73  occurred -.** is
26730 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
26740 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20 70  ter P2.  If no p
26750 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74  age .** movement
26760 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28 62   was required (b
26770 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65  ecause the table
26780 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77   being dropped w
26790 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74  as already .** t
267a0 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74  he last one in t
267b0 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68 65  he database) the
267c0 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72  n a zero is stor
267d0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
267e0 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43  2..** If AUTOVAC
267f0 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20  UUM is disabled 
26800 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73  then a zero is s
26810 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
26820 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  r P2..**.** See 
26830 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63  also: Clear.*/.c
26840 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20  ase OP_Destroy: 
26850 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72  {     /* out2-pr
26860 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
26870 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20  t iMoved;.  int 
26880 69 43 6e 74 3b 0a 20 20 56 64 62 65 20 2a 70 56  iCnt;.  Vdbe *pV
26890 64 62 65 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  dbe;.  int iDb;.
268a0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
268b0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 23 69 66  adOnly==0 );.#if
268c0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
268d0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
268e0 69 43 6e 74 20 3d 20 30 3b 0a 20 20 66 6f 72 28  iCnt = 0;.  for(
268f0 70 56 64 62 65 3d 64 62 2d 3e 70 56 64 62 65 3b  pVdbe=db->pVdbe;
26900 20 70 56 64 62 65 3b 20 70 56 64 62 65 20 3d 20   pVdbe; pVdbe = 
26910 70 56 64 62 65 2d 3e 70 4e 65 78 74 29 7b 0a 20  pVdbe->pNext){. 
26920 20 20 20 69 66 28 20 70 56 64 62 65 2d 3e 6d 61     if( pVdbe->ma
26930 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f  gic==VDBE_MAGIC_
26940 52 55 4e 20 26 26 20 70 56 64 62 65 2d 3e 62 49  RUN && pVdbe->bI
26950 73 52 65 61 64 65 72 20 0a 20 20 20 20 20 26 26  sReader .     &&
26960 20 70 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d 65   pVdbe->inVtabMe
26970 74 68 6f 64 3c 32 20 26 26 20 70 56 64 62 65 2d  thod<2 && pVdbe-
26980 3e 70 63 3e 3d 30 20 0a 20 20 20 20 29 7b 0a 20  >pc>=0 .    ){. 
26990 20 20 20 20 20 69 43 6e 74 2b 2b 3b 0a 20 20 20       iCnt++;.   
269a0 20 7d 0a 20 20 7d 0a 23 65 6c 73 65 0a 20 20 69   }.  }.#else.  i
269b0 43 6e 74 20 3d 20 64 62 2d 3e 6e 56 64 62 65 52  Cnt = db->nVdbeR
269c0 65 61 64 3b 0a 23 65 6e 64 69 66 0a 20 20 70 4f  ead;.#endif.  pO
269d0 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
269e0 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 69 43 6e 74  Null;.  if( iCnt
269f0 3e 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  >1 ){.    rc = S
26a00 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20  QLITE_LOCKED;.  
26a10 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e    p->errorAction
26a20 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 7d   = OE_Abort;.  }
26a30 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20  else{.    iDb = 
26a40 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73  pOp->p3;.    ass
26a50 65 72 74 28 20 69 43 6e 74 3d 3d 31 20 29 3b 0a  ert( iCnt==1 );.
26a60 20 20 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e      assert( (p->
26a70 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79  btreeMask & (((y
26a80 44 62 4d 61 73 6b 29 31 29 3c 3c 69 44 62 29 29  DbMask)1)<<iDb))
26a90 21 3d 30 20 29 3b 0a 20 20 20 20 69 4d 6f 76 65  !=0 );.    iMove
26aa0 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  d = 0;  /* Not n
26ab0 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f 20  eeded.  Only to 
26ac0 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e  silence a warnin
26ad0 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73  g. */.    rc = s
26ae0 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70 54  qlite3BtreeDropT
26af0 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62  able(db->aDb[iDb
26b00 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20  ].pBt, pOp->p1, 
26b10 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f  &iMoved);.    pO
26b20 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
26b30 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  Int;.    pOut->u
26b40 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66  .i = iMoved;.#if
26b50 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
26b60 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20  _AUTOVACUUM.    
26b70 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
26b80 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d 30 20 29  K && iMoved!=0 )
26b90 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  {.      sqlite3R
26ba0 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 64 62 2c  ootPageMoved(db,
26bb0 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f   iDb, iMoved, pO
26bc0 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a  p->p1);.      /*
26bd0 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20   All OP_Destroy 
26be0 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63 63 75 72  operations occur
26bf0 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 62 74 72   on the same btr
26c00 65 65 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  ee */.      asse
26c10 72 74 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f  rt( resetSchemaO
26c20 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73  nFault==0 || res
26c30 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d  etSchemaOnFault=
26c40 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20 20 20 20  =iDb+1 );.      
26c50 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
26c60 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20  lt = iDb+1;.    
26c70 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62  }.#endif.  }.  b
26c80 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
26c90 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20  de: Clear P1 P2 
26ca0 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20  P3.**.** Delete 
26cb0 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  all contents of 
26cc0 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
26cd0 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
26ce0 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69  e root page.** i
26cf0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
26d00 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20  ile is given by 
26d10 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65  P1.  But, unlike
26d20 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74   Destroy, do not
26d30 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74  .** remove the t
26d40 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72  able or index fr
26d50 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
26d60 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  file..**.** The 
26d70 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
26d80 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e  r is in the main
26d90 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
26da0 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20  f P2==0.  If.** 
26db0 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74  P2==1 then the t
26dc0 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72  able to be clear
26dd0 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c   is in the auxil
26de0 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
26df0 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73  le.** that is us
26e00 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c  ed to store tabl
26e10 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20  es create using 
26e20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59  CREATE TEMPORARY
26e30 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66   TABLE..**.** If
26e40 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   the P3 value is
26e50 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
26e60 74 68 65 20 74 61 62 6c 65 20 72 65 66 65 72 72  the table referr
26e70 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e  ed to must be an
26e80 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65  .** intkey table
26e90 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20   (an SQL table, 
26ea0 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49  not an index). I
26eb0 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20  n this case the 
26ec0 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63  row change .** c
26ed0 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ount is incremen
26ee0 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65  ted by the numbe
26ef0 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
26f00 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
26f10 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20  ared. .** If P3 
26f20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
26f30 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76  zero, then the v
26f40 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72  alue stored in r
26f50 65 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a  egister P3 is.**
26f60 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65   also incremente
26f70 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20  d by the number 
26f80 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74  of rows in the t
26f90 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
26fa0 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ed..**.** See al
26fb0 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63  so: Destroy.*/.c
26fc0 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a  ase OP_Clear: {.
26fd0 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20    int nChange;. 
26fe0 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a  .  nChange = 0;.
26ff0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
27000 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73  dOnly==0 );.  as
27010 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 21 3d 31  sert( pOp->p1!=1
27020 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
27030 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28  ->btreeMask & ((
27040 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70  (yDbMask)1)<<pOp
27050 2d 3e 70 32 29 29 21 3d 30 20 29 3b 0a 20 20 72  ->p2))!=0 );.  r
27060 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
27070 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20  ClearTable(.    
27080 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70    db->aDb[pOp->p
27090 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c  2].pBt, pOp->p1,
270a0 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68   (pOp->p3 ? &nCh
270b0 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20  ange : 0).  );. 
270c0 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
270d0 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b      p->nChange +
270e0 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69  = nChange;.    i
270f0 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a  f( pOp->p3>0 ){.
27100 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
27110 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
27120 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
27130 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
27140 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
27150 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65  >p3]);.      aMe
27160 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b  m[pOp->p3].u.i +
27170 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d  = nChange;.    }
27180 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
27190 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61  ./* Opcode: Crea
271a0 74 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20  teTable P1 P2 * 
271b0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
271c0 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d   r[P2]=root iDb=
271d0 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74  P1.**.** Allocat
271e0 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  e a new table in
271f0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
27200 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30  se file if P1==0
27210 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75   or in the.** au
27220 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
27230 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f   file if P1==1 o
27240 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64  r in an attached
27250 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20   database if.** 
27260 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65  P1>1.  Write the
27270 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
27280 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62  r of the new tab
27290 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  le into.** regis
272a0 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65  ter P2.**.** The
272b0 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77   difference betw
272c0 65 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64 20  een a table and 
272d0 61 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69 73  an index is this
272e0 3a 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74 0a  :  A table must.
272f0 2a 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74 65  ** have a 4-byte
27300 20 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e 64   integer key and
27310 20 63 61 6e 20 68 61 76 65 20 61 72 62 69 74 72   can have arbitr
27320 61 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69 6e  ary data.  An in
27330 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72  dex.** has an ar
27340 62 69 74 72 61 72 79 20 6b 65 79 20 62 75 74 20  bitrary key but 
27350 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53  no data..**.** S
27360 65 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65 49  ee also: CreateI
27370 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ndex.*/./* Opcod
27380 65 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20 50  e: CreateIndex P
27390 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
273a0 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
273b0 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20  ot iDb=P1.**.** 
273c0 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69  Allocate a new i
273d0 6e 64 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e  ndex in the main
273e0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
273f0 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68  f P1==0 or in th
27400 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64  e.** auxiliary d
27410 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
27420 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61  P1==1 or in an a
27430 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
27440 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72   if.** P1>1.  Wr
27450 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67  ite the root pag
27460 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
27470 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a  new table into.*
27480 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  * register P2..*
27490 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e  *.** See documen
274a0 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65  tation on OP_Cre
274b0 61 74 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64  ateTable for add
274c0 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
274d0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
274e0 43 72 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20  CreateIndex:    
274f0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
27500 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 63 61  prerelease */.ca
27510 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  se OP_CreateTabl
27520 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  e: {          /*
27530 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
27540 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a   */.  int pgno;.
27550 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44    int flags;.  D
27560 62 20 2a 70 44 62 3b 0a 0a 20 20 70 67 6e 6f 20  b *pDb;..  pgno 
27570 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
27580 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
27590 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
275a0 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
275b0 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62  reeMask & (((yDb
275c0 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31  Mask)1)<<pOp->p1
275d0 29 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ))!=0 );.  asser
275e0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
275f0 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
27600 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  ->aDb[pOp->p1];.
27610 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70    assert( pDb->p
27620 42 74 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  Bt!=0 );.  if( p
27630 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  Op->opcode==OP_C
27640 72 65 61 74 65 54 61 62 6c 65 20 29 7b 0a 20 20  reateTable ){.  
27650 20 20 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54 52    /* flags = BTR
27660 45 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20  EE_INTKEY; */.  
27670 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f    flags = BTREE_
27680 49 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65 7b  INTKEY;.  }else{
27690 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52  .    flags = BTR
276a0 45 45 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a  EE_BLOBKEY;.  }.
276b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
276c0 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70  reeCreateTable(p
276d0 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20  Db->pBt, &pgno, 
276e0 66 6c 61 67 73 29 3b 0a 20 20 70 4f 75 74 2d 3e  flags);.  pOut->
276f0 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72  u.i = pgno;.  br
27700 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
27710 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20 50  e: ParseSchema P
27720 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
27730 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20   Read and parse 
27740 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d  all entries from
27750 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54   the SQLITE_MAST
27760 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61  ER table of data
27770 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20  base P1.** that 
27780 6d 61 74 63 68 20 74 68 65 20 57 48 45 52 45 20  match the WHERE 
27790 63 6c 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a  clause P4. .**.*
277a0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
277b0 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65 72  vokes the parser
277c0 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77   to create a new
277d0 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
277e0 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74  ,.** then runs t
277f0 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d  he new virtual m
27800 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74  achine.  It is t
27810 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74  hus a re-entrant
27820 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65   opcode..*/.case
27830 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a   OP_ParseSchema:
27840 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20   {.  int iDb;.  
27850 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73  const char *zMas
27860 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71  ter;.  char *zSq
27870 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e  l;.  InitData in
27880 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e  itData;..  /* An
27890 79 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  y prepared state
278a0 6d 65 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65  ment that invoke
278b0 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69  s this opcode wi
278c0 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a  ll hold mutexes.
278d0 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74    ** on every bt
278e0 72 65 65 2e 20 20 54 68 69 73 20 69 73 20 61 20  ree.  This is a 
278f0 70 72 65 72 65 71 75 69 73 69 74 65 20 66 6f 72  prerequisite for
27900 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20   invoking .  ** 
27910 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
27920 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64  ack()..  */.#ifd
27930 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
27940 20 20 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62    for(iDb=0; iDb
27950 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29  <db->nDb; iDb++)
27960 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44  {.    assert( iD
27970 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42  b==1 || sqlite3B
27980 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64  treeHoldsMutex(d
27990 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29  b->aDb[iDb].pBt)
279a0 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a   );.  }.#endif..
279b0 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b    iDb = pOp->p1;
279c0 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
279d0 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
279e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
279f0 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20  HasProperty(db, 
27a00 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f  iDb, DB_SchemaLo
27a10 61 64 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73  aded) );.  /* Us
27a20 65 64 20 74 6f 20 62 65 20 61 20 63 6f 6e 64 69  ed to be a condi
27a30 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20  tional */ {.    
27a40 7a 4d 61 73 74 65 72 20 3d 20 53 43 48 45 4d 41  zMaster = SCHEMA
27a50 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a 20 20 20  _TABLE(iDb);.   
27a60 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64   initData.db = d
27a70 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  b;.    initData.
27a80 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
27a90 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72     initData.pzEr
27aa0 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d  rMsg = &p->zErrM
27ab0 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73  sg;.    zSql = s
27ac0 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
27ad0 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54  ,.       "SELECT
27ae0 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c   name, rootpage,
27af0 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25   sql FROM '%q'.%
27b00 73 20 57 48 45 52 45 20 25 73 20 4f 52 44 45 52  s WHERE %s ORDER
27b10 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20   BY rowid",.    
27b20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e     db->aDb[iDb].
27b30 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20  zName, zMaster, 
27b40 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
27b50 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20  if( zSql==0 ){. 
27b60 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
27b70 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73  _NOMEM;.    }els
27b80 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  e{.      assert(
27b90 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d   db->init.busy==
27ba0 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69  0 );.      db->i
27bb0 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20  nit.busy = 1;.  
27bc0 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20      initData.rc 
27bd0 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
27be0 20 20 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e     assert( !db->
27bf0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
27c00 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
27c10 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c  e3_exec(db, zSql
27c20 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  , sqlite3InitCal
27c30 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61  lback, &initData
27c40 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
27c50 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc==SQLITE_OK ) 
27c60 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63  rc = initData.rc
27c70 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  ;.      sqlite3D
27c80 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b  bFree(db, zSql);
27c90 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e  .      db->init.
27ca0 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  busy = 0;.    }.
27cb0 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 73    }.  if( rc ) s
27cc0 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63  qlite3ResetAllSc
27cd0 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f  hemasOfConnectio
27ce0 6e 28 64 62 29 3b 0a 20 20 69 66 28 20 72 63 3d  n(db);.  if( rc=
27cf0 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b  =SQLITE_NOMEM ){
27d00 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
27d10 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20  ;.  }.  break;  
27d20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .}..#if !defined
27d30 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
27d40 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  LYZE)./* Opcode:
27d50 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31   LoadAnalysis P1
27d60 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52   * * * *.**.** R
27d70 65 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73  ead the sqlite_s
27d80 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64  tat1 table for d
27d90 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c  atabase P1 and l
27da0 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a  oad the content.
27db0 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65  ** of that table
27dc0 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e   into the intern
27dd0 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74 61  al index hash ta
27de0 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20  ble.  This will 
27df0 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61  cause.** the ana
27e00 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73 65 64  lysis to be used
27e10 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20   when preparing 
27e20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71  all subsequent q
27e30 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20  ueries..*/.case 
27e40 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a  OP_LoadAnalysis:
27e50 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
27e60 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
27e70 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
27e80 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c  rc = sqlite3Anal
27e90 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70  ysisLoad(db, pOp
27ea0 2d 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b 20  ->p1);.  break; 
27eb0 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64   .}.#endif /* !d
27ec0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
27ed0 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a  IT_ANALYZE) */..
27ee0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54  /* Opcode: DropT
27ef0 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a  able P1 * * P4 *
27f00 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
27f10 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
27f20 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
27f30 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
27f40 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c  ribe.** the tabl
27f50 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  e named P4 in da
27f60 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
27f70 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
27f80 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64   a table.** is d
27f90 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20  ropped in order 
27fa0 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65  to keep the inte
27fb0 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
27fc0 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
27fd0 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
27fe0 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
27ff0 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
28000 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20  _DropTable: {.  
28010 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
28020 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20  DeleteTable(db, 
28030 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
28040 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .z);.  break;.}.
28050 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
28060 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20  Index P1 * * P4 
28070 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
28080 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
28090 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
280a0 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
280b0 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64  cribe.** the ind
280c0 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  ex named P4 in d
280d0 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
280e0 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
280f0 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73  r an index.** is
28100 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65   dropped in orde
28110 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e  r to keep the in
28120 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
28130 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
28140 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
28150 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
28160 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
28170 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a  OP_DropIndex: {.
28180 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
28190 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62  ndDeleteIndex(db
281a0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
281b0 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.z);.  break;.
281c0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72  }../* Opcode: Dr
281d0 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a  opTrigger P1 * *
281e0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f   P4 *.**.** Remo
281f0 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ve the internal 
28200 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61  (in-memory) data
28210 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
28220 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65   describe.** the
28230 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50   trigger named P
28240 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
28250 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
28260 64 20 61 66 74 65 72 20 61 20 74 72 69 67 67 65  d after a trigge
28270 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  r.** is dropped 
28280 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
28290 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
282a0 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
282b0 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
282c0 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
282d0 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
282e0 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72  /.case OP_DropTr
282f0 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74  igger: {.  sqlit
28300 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
28310 65 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70  eTrigger(db, pOp
28320 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
28330 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23  ;.  break;.}...#
28340 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
28350 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
28360 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  CK./* Opcode: In
28370 74 65 67 72 69 74 79 43 6b 20 50 31 20 50 32 20  tegrityCk P1 P2 
28380 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f  P3 * P5.**.** Do
28390 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20   an analysis of 
283a0 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  the currently op
283b0 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53 74  en database.  St
283c0 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  ore in.** regist
283d0 65 72 20 50 31 20 74 68 65 20 74 65 78 74 20 6f  er P1 the text o
283e0 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  f an error messa
283f0 67 65 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e  ge describing an
28400 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49  y problems..** I
28410 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72  f no problems ar
28420 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61  e found, store a
28430 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65   NULL in registe
28440 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  r P1..**.** The 
28450 72 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74  register P3 cont
28460 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  ains the maximum
28470 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77   number of allow
28480 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74  ed errors..** At
28490 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65 72   most reg(P3) er
284a0 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70  rors will be rep
284b0 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68  orted..** In oth
284c0 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e  er words, the an
284d0 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73 20  alysis stops as 
284e0 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20  soon as reg(P1) 
284f0 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73  errors are .** s
28500 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73  een.  Reg(P1) is
28510 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68   updated with th
28520 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  e number of erro
28530 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a  rs remaining..**
28540 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67  .** The root pag
28550 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c  e numbers of all
28560 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64   tables in the d
28570 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74 65  atabase are inte
28580 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e  ger.** stored in
28590 20 72 65 67 28 50 31 29 2c 20 72 65 67 28 50 31   reg(P1), reg(P1
285a0 2b 31 29 2c 20 72 65 67 28 50 31 2b 32 29 2c 20  +1), reg(P1+2), 
285b0 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61 72 65 20  ....  There are 
285c0 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f 74  P2 tables.** tot
285d0 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  al..**.** If P5 
285e0 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
285f0 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f   check is done o
28600 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
28610 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
28620 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64  , not the main d
28630 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
28640 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
28650 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  is used to imple
28660 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69  ment the integri
28670 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e  ty_check pragma.
28680 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65  .*/.case OP_Inte
28690 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74  grityCk: {.  int
286a0 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20   nRoot;      /* 
286b0 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
286c0 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d   to check.  (Num
286d0 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65  ber of root page
286e0 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52  s.) */.  int *aR
286f0 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61  oot;     /* Arra
28700 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75  y of rootpage nu
28710 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73  mbers for tables
28720 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a   to be checked *
28730 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20  /.  int j;      
28740 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
28750 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ter */.  int nEr
28760 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  r;       /* Numb
28770 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70  er of errors rep
28780 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  orted */.  char 
28790 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65  *z;        /* Te
287a0 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20  xt of the error 
287b0 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20  report */.  Mem 
287c0 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52  *pnErr;     /* R
287d0 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20  egister keeping 
287e0 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20  track of errors 
287f0 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20  remaining */..  
28800 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
28810 61 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20  ader );.  nRoot 
28820 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
28830 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a  ert( nRoot>0 );.
28840 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74 65    aRoot = sqlite
28850 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c  3DbMallocRaw(db,
28860 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e 52   sizeof(int)*(nR
28870 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66 28 20  oot+1) );.  if( 
28880 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f 20  aRoot==0 ) goto 
28890 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72 74  no_mem;.  assert
288a0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
288b0 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
288c0 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
288d0 20 20 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b    pnErr = &aMem[
288e0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
288f0 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67  rt( (pnErr->flag
28900 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
28910 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e  );.  assert( (pn
28920 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Err->flags & (ME
28930 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29  M_Str|MEM_Blob))
28940 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  ==0 );.  pIn1 = 
28950 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
28960 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f    for(j=0; j<nRo
28970 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 61 52  ot; j++){.    aR
28980 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74 29 73 71  oot[j] = (int)sq
28990 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
289a0 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d  e(&pIn1[j]);.  }
289b0 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b  .  aRoot[j] = 0;
289c0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
289d0 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p5<db->nDb );.  
289e0 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
289f0 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61  eMask & (((yDbMa
28a00 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 35 29 29  sk)1)<<pOp->p5))
28a10 21 3d 30 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c  !=0 );.  z = sql
28a20 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 72 69  ite3BtreeIntegri
28a30 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b  tyCheck(db->aDb[
28a40 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52  pOp->p5].pBt, aR
28a50 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20  oot, nRoot,.    
28a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a70 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e               (in
28a80 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e  t)pnErr->u.i, &n
28a90 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 44  Err);.  sqlite3D
28aa0 62 46 72 65 65 28 64 62 2c 20 61 52 6f 6f 74 29  bFree(db, aRoot)
28ab0 3b 0a 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d  ;.  pnErr->u.i -
28ac0 3d 20 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74 65  = nErr;.  sqlite
28ad0 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
28ae0 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72  pIn1);.  if( nEr
28af0 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  r==0 ){.    asse
28b00 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65  rt( z==0 );.  }e
28b10 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a  lse if( z==0 ){.
28b20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
28b30 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
28b40 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
28b50 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20  tr(pIn1, z, -1, 
28b60 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c  SQLITE_UTF8, sql
28b70 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a  ite3_free);.  }.
28b80 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
28b90 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73  BSIZE(pIn1);.  s
28ba0 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
28bb0 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65  Encoding(pIn1, e
28bc0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61  ncoding);.  brea
28bd0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
28be0 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
28bf0 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f  RITY_CHECK */../
28c00 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
28c10 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Add P1 P2 * * *.
28c20 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 6f  ** Synopsis:  ro
28c30 77 73 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a  wset(P1)=r[P2].*
28c40 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20  *.** Insert the 
28c50 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68 65  integer value he
28c60 6c 64 20 62 79 20 72 65 67 69 73 74 65 72 20 50  ld by register P
28c70 32 20 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e  2 into a boolean
28c80 20 69 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69   index.** held i
28c90 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
28ca0 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f  *.** An assertio
28cb0 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20 69 73  n fails if P2 is
28cc0 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e   not an integer.
28cd0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
28ce0 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f  etAdd: {       /
28cf0 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20  * in1, in2 */.  
28d00 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
28d10 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
28d20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
28d30 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d    assert( (pIn2-
28d40 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
28d50 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70  )!=0 );.  if( (p
28d60 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
28d70 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20  _RowSet)==0 ){. 
28d80 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
28d90 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29  mSetRowSet(pIn1)
28da0 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d  ;.    if( (pIn1-
28db0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
28dc0 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  Set)==0 ) goto n
28dd0 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c  o_mem;.  }.  sql
28de0 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
28df0 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
28e00 2c 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn2->u.i);.  
28e10 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
28e20 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20  ode: RowSetRead 
28e30 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
28e40 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
28e50 3d 72 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a  =rowset(P1).**.*
28e60 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 73 6d  * Extract the sm
28e70 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f  allest value fro
28e80 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  m boolean index 
28e90 50 31 20 61 6e 64 20 70 75 74 20 74 68 61 74 20  P1 and put that 
28ea0 76 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65  value into.** re
28eb0 67 69 73 74 65 72 20 50 33 2e 20 20 4f 72 2c 20  gister P3.  Or, 
28ec0 69 66 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78  if boolean index
28ed0 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79   P1 is initially
28ee0 20 65 6d 70 74 79 2c 20 6c 65 61 76 65 20 50 33   empty, leave P3
28ef0 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20 61 6e  .** unchanged an
28f00 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  d jump to instru
28f10 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  ction P2..*/.cas
28f20 65 20 4f 50 5f 52 6f 77 53 65 74 52 65 61 64 3a  e OP_RowSetRead:
28f30 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70   {       /* jump
28f40 2c 20 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in1, out3 */. 
28f50 20 69 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49 6e   i64 val;..  pIn
28f60 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
28f70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
28f80 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
28f90 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73  Set)==0 .   || s
28fa0 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
28fb0 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
28fc0 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a  , &val)==0.  ){.
28fd0 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65      /* The boole
28fe0 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74  an index is empt
28ff0 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  y */.    sqlite3
29000 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
29010 49 6e 31 29 3b 0a 20 20 20 20 70 63 20 3d 20 70  In1);.    pc = p
29020 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
29030 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
29040 31 2c 32 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  1,2);.  }else{. 
29050 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20 77 61     /* A value wa
29060 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68  s pulled from th
29070 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 73  e index */.    s
29080 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
29090 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
290a0 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 20 20  >p3], val);.    
290b0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
290c0 30 2c 32 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f  0,2);.  }.  goto
290d0 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72   check_for_inter
290e0 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  rupt;.}../* Opco
290f0 64 65 3a 20 52 6f 77 53 65 74 54 65 73 74 20 50  de: RowSetTest P
29100 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79  1 P2 P3 P4.** Sy
29110 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d  nopsis: if r[P3]
29120 20 69 6e 20 72 6f 77 73 65 74 28 50 31 29 20 67   in rowset(P1) g
29130 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67  oto P2.**.** Reg
29140 69 73 74 65 72 20 50 33 20 69 73 20 61 73 73 75  ister P3 is assu
29150 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34  med to hold a 64
29160 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
29170 75 65 2e 20 49 66 20 72 65 67 69 73 74 65 72 20  ue. If register 
29180 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61  P1.** contains a
29190 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61   RowSet object a
291a0 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f  nd that RowSet o
291b0 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a  bject contains.*
291c0 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64  * the value held
291d0 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20   in P3, jump to 
291e0 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68  register P2. Oth
291f0 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74  erwise, insert t
29200 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e  he.** integer in
29210 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77   P3 into the Row
29220 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65  Set and continue
29230 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65   on to the.** ne
29240 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  xt opcode..**.**
29250 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65   The RowSet obje
29260 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20  ct is optimized 
29270 66 6f 72 20 74 68 65 20 63 61 73 65 20 77 68 65  for the case whe
29280 72 65 20 73 75 63 63 65 73 73 69 76 65 20 73 65  re successive se
29290 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72  ts.** of integer
292a0 73 2c 20 77 68 65 72 65 20 65 61 63 68 20 73 65  s, where each se
292b0 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75  t contains no du
292c0 70 6c 69 63 61 74 65 73 2e 20 45 61 63 68 20 73  plicates. Each s
292d0 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20  et.** of values 
292e0 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  is identified by
292f0 20 61 20 75 6e 69 71 75 65 20 50 34 20 76 61 6c   a unique P4 val
29300 75 65 2e 20 54 68 65 20 66 69 72 73 74 20 73 65  ue. The first se
29310 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50  t.** must have P
29320 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c 20  4==0, the final 
29330 73 65 74 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d  set P4=-1.  P4 m
29340 75 73 74 20 62 65 20 65 69 74 68 65 72 20 2d 31  ust be either -1
29350 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74   or.** non-negat
29360 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65  ive.  For non-ne
29370 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 6f 66  gative values of
29380 20 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77   P4 only the low
29390 65 72 20 34 0a 2a 2a 20 62 69 74 73 20 61 72 65  er 4.** bits are
293a0 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a   significant..**
293b0 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  .** This allows 
293c0 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28  optimizations: (
293d0 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74 68  a) when P4==0 th
293e0 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74  ere is no need t
293f0 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f  o test.** the ro
29400 77 73 65 74 20 6f 62 6a 65 63 74 20 66 6f 72 20  wset object for 
29410 50 33 2c 20 61 73 20 69 74 20 69 73 20 67 75 61  P3, as it is gua
29420 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 63  ranteed not to c
29430 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62  ontain it,.** (b
29440 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68  ) when P4==-1 th
29450 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74  ere is no need t
29460 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76 61 6c  o insert the val
29470 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a  ue, as it will.*
29480 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73 74 65  * never be teste
29490 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20 77  d for, and (c) w
294a0 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61 74  hen a value that
294b0 20 69 73 20 70 61 72 74 20 6f 66 20 73 65 74 20   is part of set 
294c0 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64  X is.** inserted
294d0 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65  , there is no ne
294e0 65 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f 20  ed to search to 
294f0 73 65 65 20 69 66 20 74 68 65 20 73 61 6d 65 20  see if the same 
29500 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72 65  value was.** pre
29510 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65 64  viously inserted
29520 20 61 73 20 70 61 72 74 20 6f 66 20 73 65 74 20   as part of set 
29530 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77 61  X (only if it wa
29540 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20  s previously.** 
29550 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74  inserted as part
29560 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20 73   of some other s
29570 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  et)..*/.case OP_
29580 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20 20  RowSetTest: {   
29590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
295a0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20    /* jump, in1, 
295b0 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65  in3 */.  int iSe
295c0 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73 3b  t;.  int exists;
295d0 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
295e0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
295f0 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
29600 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f 70  3];.  iSet = pOp
29610 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74  ->p4.i;.  assert
29620 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn3->flags&ME
29630 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49  M_Int );..  /* I
29640 66 20 74 68 65 72 65 20 69 73 20 61 6e 79 74 68  f there is anyth
29650 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61  ing other than a
29660 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69   rowset object i
29670 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31  n memory cell P1
29680 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74  ,.  ** delete it
29690 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c   now and initial
296a0 69 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20 65  ize P1 with an e
296b0 6d 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f  mpty rowset.  */
296c0 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
296d0 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
296e0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
296f0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77  te3VdbeMemSetRow
29700 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69  Set(pIn1);.    i
29710 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
29720 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
29730 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
29740 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70    }..  assert( p
29750 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
29760 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74  NT32 );.  assert
29770 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53  ( iSet==-1 || iS
29780 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69  et>=0 );.  if( i
29790 53 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74  Set ){.    exist
297a0 73 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65  s = sqlite3RowSe
297b0 74 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52  tTest(pIn1->u.pR
297c0 6f 77 53 65 74 2c 20 0a 20 20 20 20 20 20 20 20  owSet, .        
297d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297e0 20 20 20 20 20 20 20 28 75 38 29 28 69 53 65 74         (u8)(iSet
297f0 3e 3d 30 20 3f 20 69 53 65 74 20 26 20 30 78 66  >=0 ? iSet & 0xf
29800 20 3a 20 30 78 66 66 29 2c 0a 20 20 20 20 20 20   : 0xff),.      
29810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29820 20 20 20 20 20 20 20 20 20 70 49 6e 33 2d 3e 75           pIn3->u
29830 2e 69 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61  .i);.    VdbeBra
29840 6e 63 68 54 61 6b 65 6e 28 65 78 69 73 74 73 21  nchTaken(exists!
29850 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 65  =0,2);.    if( e
29860 78 69 73 74 73 20 29 7b 0a 20 20 20 20 20 20 70  xists ){.      p
29870 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
29880 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
29890 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69 53    }.  }.  if( iS
298a0 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  et>=0 ){.    sql
298b0 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
298c0 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
298d0 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn3->u.i);.  
298e0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23  }.  break;.}...#
298f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
29900 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f  IT_TRIGGER../* O
29910 70 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50  pcode: Program P
29920 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
29930 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
29940 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
29950 70 61 73 73 65 64 20 61 73 20 50 34 20 28 74 79  passed as P4 (ty
29960 70 65 20 50 34 5f 53 55 42 50 52 4f 47 52 41 4d  pe P4_SUBPROGRAM
29970 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e  ). .**.** P1 con
29980 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73  tains the addres
29990 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  s of the memory 
299a0 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69  cell that contai
299b0 6e 73 20 74 68 65 20 66 69 72 73 74 20 6d 65 6d  ns the first mem
299c0 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20  ory .** cell in 
299d0 61 6e 20 61 72 72 61 79 20 6f 66 20 76 61 6c 75  an array of valu
299e0 65 73 20 75 73 65 64 20 61 73 20 61 72 67 75 6d  es used as argum
299f0 65 6e 74 73 20 74 6f 20 74 68 65 20 73 75 62 2d  ents to the sub-
29a00 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20  program. P2 .** 
29a10 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
29a20 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
29a30 69 66 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  if the sub-progr
29a40 61 6d 20 74 68 72 6f 77 73 20 61 6e 20 49 47 4e  am throws an IGN
29a50 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f  ORE .** exceptio
29a60 6e 20 75 73 69 6e 67 20 74 68 65 20 52 41 49 53  n using the RAIS
29a70 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65  E() function. Re
29a80 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69  gister P3 contai
29a90 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 0a  ns the address .
29aa0 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63  ** of a memory c
29ab0 65 6c 6c 20 69 6e 20 74 68 69 73 20 28 74 68 65  ell in this (the
29ac0 20 70 61 72 65 6e 74 29 20 56 4d 20 74 68 61 74   parent) VM that
29ad0 20 69 73 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f   is used to allo
29ae0 63 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d  cate the .** mem
29af0 6f 72 79 20 72 65 71 75 69 72 65 64 20 62 79 20  ory required by 
29b00 74 68 65 20 73 75 62 2d 76 64 62 65 20 61 74 20  the sub-vdbe at 
29b10 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50  runtime..**.** P
29b20 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
29b30 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e  o the VM contain
29b40 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
29b50 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
29b60 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P5 is non-zero
29b70 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65  , then recursive
29b80 20 70 72 6f 67 72 61 6d 20 69 6e 76 6f 63 61 74   program invocat
29b90 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a  ion is enabled..
29ba0 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72  */.case OP_Progr
29bb0 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  am: {        /* 
29bc0 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  jump */.  int nM
29bd0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
29be0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d    /* Number of m
29bf0 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20  emory registers 
29c00 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
29c10 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20  */.  int nByte; 
29c20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
29c30 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65  Bytes of runtime
29c40 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20   space required 
29c50 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
29c60 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20  */.  Mem *pRt;  
29c70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
29c80 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f  Register to allo
29c90 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61  cate runtime spa
29ca0 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  ce */.  Mem *pMe
29cb0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
29cc0 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72 61  /* Used to itera
29cd0 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72  te through memor
29ce0 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d  y cells */.  Mem
29cf0 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
29d00 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d       /* Last mem
29d10 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20  ory cell in new 
29d20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46  array */.  VdbeF
29d30 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20  rame *pFrame;   
29d40 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66     /* New vdbe f
29d50 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20  rame to execute 
29d60 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72  in */.  SubProgr
29d70 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20  am *pProgram;   
29d80 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74  /* Sub-program t
29d90 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76  o execute */.  v
29da0 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20  oid *t;         
29db0 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
29dc0 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67  identifying trig
29dd0 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72  ger */..  pProgr
29de0 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72  am = pOp->p4.pPr
29df0 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26  ogram;.  pRt = &
29e00 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
29e10 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
29e20 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20  m->nOp>0 );.  . 
29e30 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c   /* If the p5 fl
29e40 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65  ag is clear, the
29e50 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f  n recursive invo
29e60 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65  cation of trigge
29e70 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61  rs is .  ** disa
29e80 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72  bled for backwar
29e90 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  ds compatibility
29ea0 20 28 70 35 20 69 73 20 73 65 74 20 69 66 20 74   (p5 is set if t
29eb0 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a  his sub-program.
29ec0 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61    ** is really a
29ed0 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20   trigger, not a 
29ee0 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69  foreign key acti
29ef0 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67  on, and the flag
29f00 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c   set.  ** and cl
29f10 65 61 72 65 64 20 62 79 20 74 68 65 20 22 50 52  eared by the "PR
29f20 41 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74  AGMA recursive_t
29f30 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64  riggers" command
29f40 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a   is clear)..  **
29f50 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63   .  ** It is rec
29f60 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f  ursive invocatio
29f70 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61  n of triggers, a
29f80 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c  t the SQL level,
29f90 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64   that is .  ** d
29fa0 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65  isabled. In some
29fb0 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20   cases a single 
29fc0 74 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65  trigger may gene
29fd0 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f  rate more than o
29fe0 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67  ne .  ** SubProg
29ff0 72 61 6d 20 28 69 66 20 74 68 65 20 74 72 69 67  ram (if the trig
2a000 67 65 72 20 6d 61 79 20 62 65 20 65 78 65 63 75  ger may be execu
2a010 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68  ted with more th
2a020 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74  an one different
2a030 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49   .  ** ON CONFLI
2a040 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53  CT algorithm). S
2a050 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74  ubProgram struct
2a060 75 72 65 73 20 61 73 73 6f 63 69 61 74 65 64 20  ures associated 
2a070 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67  with a.  ** sing
2a080 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68  le trigger all h
2a090 61 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c  ave the same val
2a0a0 75 65 20 66 6f 72 20 74 68 65 20 53 75 62 50 72  ue for the SubPr
2a0b0 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a  ogram.token .  *
2a0c0 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a  * variable.  */.
2a0d0 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
2a0e0 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61  .    t = pProgra
2a0f0 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f  m->token;.    fo
2a100 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61  r(pFrame=p->pFra
2a110 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46  me; pFrame && pF
2a120 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20  rame->token!=t; 
2a130 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
2a140 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28  Parent);.    if(
2a150 20 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b   pFrame ) break;
2a160 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e  .  }..  if( p->n
2a170 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69  Frame>=db->aLimi
2a180 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54  t[SQLITE_LIMIT_T
2a190 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b  RIGGER_DEPTH] ){
2a1a0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
2a1b0 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69  _ERROR;.    sqli
2a1c0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
2a1d0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 74  >zErrMsg, db, "t
2a1e0 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f  oo many levels o
2a1f0 66 20 74 72 69 67 67 65 72 20 72 65 63 75 72 73  f trigger recurs
2a200 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72 65 61 6b  ion");.    break
2a210 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69  ;.  }..  /* Regi
2a220 73 74 65 72 20 70 52 74 20 69 73 20 75 73 65 64  ster pRt is used
2a230 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65   to store the me
2a240 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 74 6f  mory required to
2a250 20 73 61 76 65 20 74 68 65 20 73 74 61 74 65 0a   save the state.
2a260 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72    ** of the curr
2a270 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64  ent program, and
2a280 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75   the memory requ
2a290 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20  ired at runtime 
2a2a0 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20  to execute.  ** 
2a2b0 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
2a2c0 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69  ram. If this tri
2a2d0 67 67 65 72 20 68 61 73 20 62 65 65 6e 20 66 69  gger has been fi
2a2e0 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e  red before, then
2a2f0 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c   pRt .  ** is al
2a300 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e  ready allocated.
2a310 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d   Otherwise, it m
2a320 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ust be initializ
2a330 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70  ed.  */.  if( (p
2a340 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72  Rt->flags&MEM_Fr
2a350 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f  ame)==0 ){.    /
2a360 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65  * SubProgram.nMe
2a370 6d 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  m is set to the 
2a380 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  number of memory
2a390 20 63 65 6c 6c 73 20 75 73 65 64 20 62 79 20 74   cells used by t
2a3a0 68 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72  he .    ** progr
2a3b0 61 6d 20 73 74 6f 72 65 64 20 69 6e 20 53 75 62  am stored in Sub
2a3c0 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20  Program.aOp. As 
2a3d0 77 65 6c 6c 20 61 73 20 74 68 65 73 65 2c 20 6f  well as these, o
2a3e0 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a  ne memory.    **
2a3f0 20 63 65 6c 6c 20 69 73 20 72 65 71 75 69 72 65   cell is require
2a400 64 20 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f  d for each curso
2a410 72 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72  r used by the pr
2a420 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c  ogram. Set local
2a430 0a 20 20 20 20 2a 2a 20 76 61 72 69 61 62 6c 65  .    ** variable
2a440 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65 72   nMem (and later
2a450 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e 43 68 69  , VdbeFrame.nChi
2a460 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69 73 20 76  ldMem) to this v
2a470 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  alue..    */.   
2a480 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d   nMem = pProgram
2a490 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61  ->nMem + pProgra
2a4a0 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79  m->nCsr;.    nBy
2a4b0 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65  te = ROUND8(size
2a4c0 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20  of(VdbeFrame)). 
2a4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e               + n
2a4e0 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d  Mem * sizeof(Mem
2a4f0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
2a500 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  + pProgram->nCsr
2a510 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75   * sizeof(VdbeCu
2a520 72 73 6f 72 20 2a 29 0a 20 20 20 20 20 20 20 20  rsor *).        
2a530 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d        + pProgram
2a540 2d 3e 6e 4f 6e 63 65 20 2a 20 73 69 7a 65 6f 66  ->nOnce * sizeof
2a550 28 75 38 29 3b 0a 20 20 20 20 70 46 72 61 6d 65  (u8);.    pFrame
2a560 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
2a570 6f 63 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65  ocZero(db, nByte
2a580 29 3b 0a 20 20 20 20 69 66 28 20 21 70 46 72 61  );.    if( !pFra
2a590 6d 65 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  me ){.      goto
2a5a0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20   no_mem;.    }. 
2a5b0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2a5c0 6d 52 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20  mRelease(pRt);. 
2a5d0 20 20 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20     pRt->flags = 
2a5e0 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70  MEM_Frame;.    p
2a5f0 52 74 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70  Rt->u.pFrame = p
2a600 46 72 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61  Frame;..    pFra
2a610 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70  me->v = p;.    p
2a620 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
2a630 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72   = nMem;.    pFr
2a640 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d  ame->nChildCsr =
2a650 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b   pProgram->nCsr;
2a660 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20  .    pFrame->pc 
2a670 3d 20 70 63 3b 0a 20 20 20 20 70 46 72 61 6d 65  = pc;.    pFrame
2a680 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d  ->aMem = p->aMem
2a690 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d  ;.    pFrame->nM
2a6a0 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20  em = p->nMem;.  
2a6b0 20 20 70 46 72 61 6d 65 2d 3e 61 70 43 73 72 20    pFrame->apCsr 
2a6c0 3d 20 70 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20  = p->apCsr;.    
2a6d0 70 46 72 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20  pFrame->nCursor 
2a6e0 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20  = p->nCursor;.  
2a6f0 20 20 70 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20    pFrame->aOp = 
2a700 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 70 46 72 61  p->aOp;.    pFra
2a710 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70  me->nOp = p->nOp
2a720 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f  ;.    pFrame->to
2a730 6b 65 6e 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  ken = pProgram->
2a740 74 6f 6b 65 6e 3b 0a 20 20 20 20 70 46 72 61 6d  token;.    pFram
2a750 65 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 70  e->aOnceFlag = p
2a760 2d 3e 61 4f 6e 63 65 46 6c 61 67 3b 0a 20 20 20  ->aOnceFlag;.   
2a770 20 70 46 72 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c   pFrame->nOnceFl
2a780 61 67 20 3d 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61  ag = p->nOnceFla
2a790 67 3b 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26  g;..    pEnd = &
2a7a0 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
2a7b0 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68  ame)[pFrame->nCh
2a7c0 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72  ildMem];.    for
2a7d0 28 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d  (pMem=VdbeFrameM
2a7e0 65 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d  em(pFrame); pMem
2a7f0 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b  !=pEnd; pMem++){
2a800 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61  .      pMem->fla
2a810 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs = MEM_Undefin
2a820 65 64 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e  ed;.      pMem->
2a830 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20  db = db;.    }. 
2a840 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46 72 61   }else{.    pFra
2a850 6d 65 20 3d 20 70 52 74 2d 3e 75 2e 70 46 72 61  me = pRt->u.pFra
2a860 6d 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  me;.    assert( 
2a870 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70  pProgram->nMem+p
2a880 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70  Program->nCsr==p
2a890 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
2a8a0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2a8b0 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d  pProgram->nCsr==
2a8c0 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73  pFrame->nChildCs
2a8d0 72 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  r );.    assert(
2a8e0 20 70 63 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20   pc==pFrame->pc 
2a8f0 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72  );.  }..  p->nFr
2a900 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d  ame++;.  pFrame-
2a910 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46  >pParent = p->pF
2a920 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  rame;.  pFrame->
2a930 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74  lastRowid = last
2a940 52 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d  Rowid;.  pFrame-
2a950 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43  >nChange = p->nC
2a960 68 61 6e 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61  hange;.  p->nCha
2a970 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46  nge = 0;.  p->pF
2a980 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20  rame = pFrame;. 
2a990 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20   p->aMem = aMem 
2a9a0 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28  = &VdbeFrameMem(
2a9b0 70 46 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70  pFrame)[-1];.  p
2a9c0 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d  ->nMem = pFrame-
2a9d0 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d  >nChildMem;.  p-
2a9e0 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75 31 36 29  >nCursor = (u16)
2a9f0 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73  pFrame->nChildCs
2aa00 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d 20  r;.  p->apCsr = 
2aa10 28 56 64 62 65 43 75 72 73 6f 72 20 2a 2a 29 26  (VdbeCursor **)&
2aa20 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b  aMem[p->nMem+1];
2aa30 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20  .  p->aOp = aOp 
2aa40 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b  = pProgram->aOp;
2aa50 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f  .  p->nOp = pPro
2aa60 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e  gram->nOp;.  p->
2aa70 61 4f 6e 63 65 46 6c 61 67 20 3d 20 28 75 38 20  aOnceFlag = (u8 
2aa80 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e  *)&p->apCsr[p->n
2aa90 43 75 72 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f  Cursor];.  p->nO
2aaa0 6e 63 65 46 6c 61 67 20 3d 20 70 50 72 6f 67 72  nceFlag = pProgr
2aab0 61 6d 2d 3e 6e 4f 6e 63 65 3b 0a 20 20 70 63 20  am->nOnce;.  pc 
2aac0 3d 20 2d 31 3b 0a 20 20 6d 65 6d 73 65 74 28 70  = -1;.  memset(p
2aad0 2d 3e 61 4f 6e 63 65 46 6c 61 67 2c 20 30 2c 20  ->aOnceFlag, 0, 
2aae0 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a  p->nOnceFlag);..
2aaf0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2ab00 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20  pcode: Param P1 
2ab10 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
2ab20 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  his opcode is on
2ab30 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e 74 20  ly ever present 
2ab40 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20  in sub-programs 
2ab50 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a  called via the .
2ab60 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e  ** OP_Program in
2ab70 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20  struction. Copy 
2ab80 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c  a value currentl
2ab90 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65  y stored in a me
2aba0 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66  mory .** cell of
2abb0 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61   the calling (pa
2abc0 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63  rent) frame to c
2abd0 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75  ell P2 in the cu
2abe0 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a  rrent frames .**
2abf0 20 61 64 64 72 65 73 73 20 73 70 61 63 65 2e 20   address space. 
2ac00 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
2ac10 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73  trigger programs
2ac20 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e   to access the n
2ac30 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64  ew.* .** and old
2ac40 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a  .* values..**.**
2ac50 20 54 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   The address of 
2ac60 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20  the cell in the 
2ac70 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20  parent frame is 
2ac80 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64  determined by ad
2ac90 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75  ding.** the valu
2aca0 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
2acb0 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75  ment to the valu
2acc0 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
2acd0 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ment to the.** c
2ace0 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61  alling OP_Progra
2acf0 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  m instruction..*
2ad00 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a  /.case OP_Param:
2ad10 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
2ad20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
2ad30 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
2ad40 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70  pFrame;.  Mem *p
2ad50 49 6e 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70  In;.  pFrame = p
2ad60 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20  ->pFrame;.  pIn 
2ad70 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
2ad80 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65  pOp->p1 + pFrame
2ad90 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63  ->aOp[pFrame->pc
2ada0 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69  ].p1];   .  sqli
2adb0 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
2adc0 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c  wCopy(pOut, pIn,
2add0 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62   MEM_Ephem);.  b
2ade0 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20  reak;.}..#endif 
2adf0 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /* #ifndef SQLIT
2ae00 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a  E_OMIT_TRIGGER *
2ae10 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
2ae20 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
2ae30 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b  EY./* Opcode: Fk
2ae40 43 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20  Counter P1 P2 * 
2ae50 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2ae60 20 66 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a   fkctr[P1]+=P2.*
2ae70 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61  *.** Increment a
2ae80 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75   "constraint cou
2ae90 6e 74 65 72 22 20 62 79 20 50 32 20 28 50 32 20  nter" by P2 (P2 
2aea0 6d 61 79 20 62 65 20 6e 65 67 61 74 69 76 65 20  may be negative 
2aeb0 6f 72 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a  or positive)..**
2aec0 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65   If P1 is non-ze
2aed0 72 6f 2c 20 74 68 65 20 64 61 74 61 62 61 73 65  ro, the database
2aee0 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e   constraint coun
2aef0 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ter is increment
2af00 65 64 20 0a 2a 2a 20 28 64 65 66 65 72 72 65 64  ed .** (deferred
2af10 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
2af20 73 74 72 61 69 6e 74 73 29 2e 20 4f 74 68 65 72  straints). Other
2af30 77 69 73 65 2c 20 69 66 20 50 31 20 69 73 20 7a  wise, if P1 is z
2af40 65 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61  ero, the .** sta
2af50 74 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20 69  tement counter i
2af60 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 69  s incremented (i
2af70 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
2af80 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
2af90 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b  )..*/.case OP_Fk
2afa0 43 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28  Counter: {.  if(
2afb0 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c   db->flags & SQL
2afc0 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a  ITE_DeferFKs ){.
2afd0 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
2afe0 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d  dImmCons += pOp-
2aff0 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  >p2;.  }else if(
2b000 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
2b010 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
2b020 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  s += pOp->p2;.  
2b030 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46  }else{.    p->nF
2b040 6b 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70  kConstraint += p
2b050 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72  Op->p2;.  }.  br
2b060 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2b070 65 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31 20 50  e: FkIfZero P1 P
2b080 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2b090 73 69 73 3a 20 69 66 20 66 6b 63 74 72 5b 50 31  sis: if fkctr[P1
2b0a0 5d 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  ]==0 goto P2.**.
2b0b0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74  ** This opcode t
2b0c0 65 73 74 73 20 69 66 20 61 20 66 6f 72 65 69 67  ests if a foreig
2b0d0 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
2b0e0 2d 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72  -counter is curr
2b0f0 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49  ently zero..** I
2b100 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  f so, jump to in
2b110 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74  struction P2. Ot
2b120 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68  herwise, fall th
2b130 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2b140 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  t .** instructio
2b150 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69  n..**.** If P1 i
2b160 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
2b170 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
2b180 65 6e 20 69 66 20 74 68 65 20 64 61 74 61 62 61  en if the databa
2b190 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f  se constraint-co
2b1a0 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f  unter.** is zero
2b1b0 20 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63   (the one that c
2b1c0 6f 75 6e 74 73 20 64 65 66 65 72 72 65 64 20 63  ounts deferred c
2b1d0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
2b1e0 69 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a  ions). If P1 is.
2b1f0 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d  ** zero, the jum
2b200 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
2b210 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73  e statement cons
2b220 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69  traint-counter i
2b230 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64  s zero.** (immed
2b240 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
2b250 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
2b260 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65  ations)..*/.case
2b270 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20   OP_FkIfZero: { 
2b280 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2b290 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  */.  if( pOp->p1
2b2a0 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e   ){.    VdbeBran
2b2b0 63 68 54 61 6b 65 6e 28 64 62 2d 3e 6e 44 65 66  chTaken(db->nDef
2b2c0 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20  erredCons==0 && 
2b2d0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
2b2e0 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20  Cons==0, 2);.   
2b2f0 20 69 66 28 20 64 62 2d 3e 6e 44 65 66 65 72 72   if( db->nDeferr
2b300 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d  edCons==0 && db-
2b310 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
2b320 73 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f 70 2d  s==0 ) pc = pOp-
2b330 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a  >p2-1;.  }else{.
2b340 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
2b350 6b 65 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72  ken(p->nFkConstr
2b360 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e  aint==0 && db->n
2b370 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d  DeferredImmCons=
2b380 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20  =0, 2);.    if( 
2b390 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74  p->nFkConstraint
2b3a0 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65  ==0 && db->nDefe
2b3b0 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29  rredImmCons==0 )
2b3c0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
2b3d0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2b3e0 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65  #endif /* #ifnde
2b3f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
2b400 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69  REIGN_KEY */..#i
2b410 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2b420 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
2b430 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61  /* Opcode: MemMa
2b440 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  x P1 P2 * * *.**
2b450 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d   Synopsis: r[P1]
2b460 3d 6d 61 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d  =max(r[P1],r[P2]
2b470 29 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ).**.** P1 is a 
2b480 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20  register in the 
2b490 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68  root frame of th
2b4a0 69 73 20 56 4d 20 28 74 68 65 20 72 6f 6f 74 20  is VM (the root 
2b4b0 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66  frame is.** diff
2b4c0 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63  erent from the c
2b4d0 75 72 72 65 6e 74 20 66 72 61 6d 65 20 69 66 20  urrent frame if 
2b4e0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
2b4f0 20 69 73 20 62 65 69 6e 67 20 65 78 65 63 75 74   is being execut
2b500 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 73  ed.** within a s
2b510 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65 74  ub-program). Set
2b520 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
2b530 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65  gister P1 to the
2b540 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20   maximum of .** 
2b550 69 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75  its current valu
2b560 65 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  e and the value 
2b570 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
2b580 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
2b590 75 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e  uction throws an
2b5a0 20 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65   error if the me
2b5b0 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74  mory cell is not
2b5c0 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e   initially.** an
2b5d0 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
2b5e0 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20  e OP_MemMax: {  
2b5f0 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
2b600 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
2b610 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46  ame;.  if( p->pF
2b620 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72 28  rame ){.    for(
2b630 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
2b640 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  ; pFrame->pParen
2b650 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
2b660 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
2b670 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e  pIn1 = &pFrame->
2b680 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2b690 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31   }else{.    pIn1
2b6a0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2b6b0 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  ];.  }.  assert(
2b6c0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31   memIsValid(pIn1
2b6d0 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ) );.  sqlite3Vd
2b6e0 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
2b6f0 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20  pIn1);.  pIn2 = 
2b700 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
2b710 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2b720 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29  Integerify(pIn2)
2b730 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
2b740 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20  i<pIn2->u.i){.  
2b750 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49    pIn1->u.i = pI
2b760 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62  n2->u.i;.  }.  b
2b770 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2b780 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  * SQLITE_OMIT_AU
2b790 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a  TOINCREMENT */..
2b7a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73  /* Opcode: IfPos
2b7b0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2b7c0 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
2b7d0 31 5d 3e 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  1]>0 goto P2.**.
2b7e0 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
2b7f0 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
2b800 73 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20  s 1 or greater, 
2b810 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
2b820 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20  * It is illegal 
2b830 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74  to use this inst
2b840 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67  ruction on a reg
2b850 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a  ister that does.
2b860 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  ** not contain a
2b870 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61  n integer.  An a
2b880 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77  ssertion fault w
2b890 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f  ill result if yo
2b8a0 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  u try..*/.case O
2b8b0 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20 20  P_IfPos: {      
2b8c0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
2b8d0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
2b8e0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2b8f0 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
2b900 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64  &MEM_Int );.  Vd
2b910 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 70  beBranchTaken( p
2b920 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b 0a  In1->u.i>0, 2);.
2b930 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e    if( pIn1->u.i>
2b940 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70  0 ){.     pc = p
2b950 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
2b960 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2b970 70 63 6f 64 65 3a 20 49 66 4e 65 67 20 50 31 20  pcode: IfNeg P1 
2b980 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
2b990 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c 30  psis: if r[P1]<0
2b9a0 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 49   goto P2.**.** I
2b9b0 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72  f the value of r
2b9c0 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6c 65  egister P1 is le
2b9d0 73 73 20 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75  ss than zero, ju
2b9e0 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a  mp to P2. .**.**
2b9f0 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74   It is illegal t
2ba00 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74 72  o use this instr
2ba10 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69  uction on a regi
2ba20 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a  ster that does.*
2ba30 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  * not contain an
2ba40 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73   integer.  An as
2ba50 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69  sertion fault wi
2ba60 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75  ll result if you
2ba70 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   try..*/.case OP
2ba80 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20 20 20 20  _IfNeg: {       
2ba90 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
2baa0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2bab0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2bac0 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
2bad0 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62  MEM_Int );.  Vdb
2bae0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e  eBranchTaken(pIn
2baf0 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20 20  1->u.i<0, 2);.  
2bb00 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 30 20  if( pIn1->u.i<0 
2bb10 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70  ){.     pc = pOp
2bb20 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
2bb30 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2bb40 6f 64 65 3a 20 49 66 5a 65 72 6f 20 50 31 20 50  ode: IfZero P1 P
2bb50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
2bb60 70 73 69 73 3a 20 72 5b 50 31 5d 2b 3d 50 33 2c  psis: r[P1]+=P3,
2bb70 20 69 66 20 72 5b 50 31 5d 3d 3d 30 20 67 6f 74   if r[P1]==0 got
2bb80 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  o P2.**.** The r
2bb90 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
2bba0 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
2bbb0 65 72 2e 20 20 41 64 64 20 6c 69 74 65 72 61 6c  er.  Add literal
2bbc0 20 50 33 20 74 6f 20 74 68 65 0a 2a 2a 20 76 61   P3 to the.** va
2bbd0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
2bbe0 50 31 2e 20 20 49 66 20 74 68 65 20 72 65 73 75  P1.  If the resu
2bbf0 6c 74 20 69 73 20 65 78 61 63 74 6c 79 20 30 2c  lt is exactly 0,
2bc00 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a   jump to P2. .**
2bc10 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61  .** It is illega
2bc20 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e  l to use this in
2bc30 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72  struction on a r
2bc40 65 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65  egister that doe
2bc50 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  s.** not contain
2bc60 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e   an integer.  An
2bc70 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74   assertion fault
2bc80 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20   will result if 
2bc90 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65  you try..*/.case
2bca0 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20 20 20   OP_IfZero: {   
2bcb0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
2bcc0 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
2bcd0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2bce0 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
2bcf0 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
2bd00 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f   pIn1->u.i += pO
2bd10 70 2d 3e 70 33 3b 0a 20 20 56 64 62 65 42 72 61  p->p3;.  VdbeBra
2bd20 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75  nchTaken(pIn1->u
2bd30 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  .i==0, 2);.  if(
2bd40 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b   pIn1->u.i==0 ){
2bd50 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  .     pc = pOp->
2bd60 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
2bd70 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2bd80 65 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32 20  e: AggStep * P2 
2bd90 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
2bda0 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33  psis: accum=r[P3
2bdb0 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29  ] step(r[P2@P5])
2bdc0 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
2bdd0 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
2bde0 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74   for an aggregat
2bdf0 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74  e.  The.** funct
2be00 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d  ion has P5 argum
2be10 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61 20  ents.   P4 is a 
2be20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46  pointer to the F
2be30 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75 63 74  uncDef.** struct
2be40 75 72 65 20 74 68 61 74 20 73 70 65 63 69 66 69  ure that specifi
2be50 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  es the function.
2be60 20 20 55 73 65 20 72 65 67 69 73 74 65 72 0a 2a    Use register.*
2be70 2a 20 50 33 20 61 73 20 74 68 65 20 61 63 63 75  * P3 as the accu
2be80 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  mulator..**.** T
2be90 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  he P5 arguments 
2bea0 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72  are taken from r
2beb0 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69  egister P2 and i
2bec0 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  ts.** successors
2bed0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67  ..*/.case OP_Agg
2bee0 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  Step: {.  int n;
2bef0 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20  .  int i;.  Mem 
2bf00 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 2a 70 52  *pMem;.  Mem *pR
2bf10 65 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  ec;.  sqlite3_co
2bf20 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71 6c  ntext ctx;.  sql
2bf30 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56  ite3_value **apV
2bf40 61 6c 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e  al;..  n = pOp->
2bf50 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e  p5;.  assert( n>
2bf60 3d 30 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 26  =0 );.  pRec = &
2bf70 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
2bf80 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72   apVal = p->apAr
2bf90 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56  g;.  assert( apV
2bfa0 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20  al || n==0 );.  
2bfb0 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
2bfc0 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20  +, pRec++){.    
2bfd0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
2bfe0 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20  id(pRec) );.    
2bff0 61 70 56 61 6c 5b 69 5d 20 3d 20 70 52 65 63 3b  apVal[i] = pRec;
2c000 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
2c010 68 61 6e 67 65 28 70 2c 20 70 52 65 63 29 3b 0a  hange(p, pRec);.
2c020 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2c030 65 6d 53 74 6f 72 65 54 79 70 65 28 70 52 65 63  emStoreType(pRec
2c040 29 3b 0a 20 20 7d 0a 20 20 63 74 78 2e 70 46 75  );.  }.  ctx.pFu
2c050 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75  nc = pOp->p4.pFu
2c060 6e 63 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  nc;.  assert( pO
2c070 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
2c080 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
2c090 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 63 74  nCursor) );.  ct
2c0a0 78 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d 20  x.pMem = pMem = 
2c0b0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2c0c0 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 63    pMem->n++;.  c
2c0d0 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d  tx.s.flags = MEM
2c0e0 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 7a  _Null;.  ctx.s.z
2c0f0 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d   = 0;.  ctx.s.zM
2c100 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 63 74 78  alloc = 0;.  ctx
2c110 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63  .s.xDel = 0;.  c
2c120 74 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20  tx.s.db = db;.  
2c130 63 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b  ctx.isError = 0;
2c140 0a 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 30  .  ctx.pColl = 0
2c150 3b 0a 20 20 63 74 78 2e 73 6b 69 70 46 6c 61 67  ;.  ctx.skipFlag
2c160 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e   = 0;.  if( ctx.
2c170 70 46 75 6e 63 2d 3e 66 75 6e 63 46 6c 61 67 73  pFunc->funcFlags
2c180 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e   & SQLITE_FUNC_N
2c190 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61  EEDCOLL ){.    a
2c1a0 73 73 65 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f  ssert( pOp>p->aO
2c1b0 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  p );.    assert(
2c1c0 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d   pOp[-1].p4type=
2c1d0 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20  =P4_COLLSEQ );. 
2c1e0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
2c1f0 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f  1].opcode==OP_Co
2c200 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 63 74 78  llSeq );.    ctx
2c210 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d  .pColl = pOp[-1]
2c220 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20  .p4.pColl;.  }. 
2c230 20 28 63 74 78 2e 70 46 75 6e 63 2d 3e 78 53 74   (ctx.pFunc->xSt
2c240 65 70 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56  ep)(&ctx, n, apV
2c250 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32  al); /* IMP: R-2
2c260 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20  4505-23230 */.  
2c270 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20  if( ctx.isError 
2c280 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
2c290 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
2c2a0 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
2c2b0 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
2c2c0 74 28 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20  t(&ctx.s));.    
2c2d0 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72  rc = ctx.isError
2c2e0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 74 78 2e  ;.  }.  if( ctx.
2c2f0 73 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20 20 20  skipFlag ){.    
2c300 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
2c310 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53  opcode==OP_CollS
2c320 65 71 20 29 3b 0a 20 20 20 20 69 20 3d 20 70 4f  eq );.    i = pO
2c330 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 69 66  p[-1].p1;.    if
2c340 28 20 69 20 29 20 73 71 6c 69 74 65 33 56 64 62  ( i ) sqlite3Vdb
2c350 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d  eMemSetInt64(&aM
2c360 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 7d 0a 0a  em[i], 1);.  }..
2c370 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2c380 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29 3b  Release(&ctx.s);
2c390 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ..  break;.}../*
2c3a0 20 4f 70 63 6f 64 65 3a 20 41 67 67 46 69 6e 61   Opcode: AggFina
2c3b0 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  l P1 P2 * P4 *.*
2c3c0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75  * Synopsis: accu
2c3d0 6d 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a  m=r[P1] N=P2.**.
2c3e0 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 66  ** Execute the f
2c3f0 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f  inalizer functio
2c400 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61  n for an aggrega
2c410 74 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20 74 68  te.  P1 is.** th
2c420 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  e memory locatio
2c430 6e 20 74 68 61 74 20 69 73 20 74 68 65 20 61 63  n that is the ac
2c440 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20 74 68  cumulator for th
2c450 65 20 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a  e aggregate..**.
2c460 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d  ** P2 is the num
2c470 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
2c480 20 74 68 61 74 20 74 68 65 20 73 74 65 70 20 66   that the step f
2c490 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e  unction takes an
2c4a0 64 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  d.** P4 is a poi
2c4b0 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63  nter to the Func
2c4c0 44 65 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e  Def for this fun
2c4d0 63 74 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a  ction.  The P2.*
2c4e0 2a 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f  * argument is no
2c4f0 74 20 75 73 65 64 20 62 79 20 74 68 69 73 20 6f  t used by this o
2c500 70 63 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e  pcode.  It is on
2c510 6c 79 20 74 68 65 72 65 20 74 6f 20 64 69 73 61  ly there to disa
2c520 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63  mbiguate.** func
2c530 74 69 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74  tions that can t
2c540 61 6b 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62  ake varying numb
2c550 65 72 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ers of arguments
2c560 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67  .  The.** P4 arg
2c570 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65  ument is only ne
2c580 65 64 65 64 20 66 6f 72 20 74 68 65 20 64 65 67  eded for the deg
2c590 65 6e 65 72 61 74 65 20 63 61 73 65 20 77 68 65  enerate case whe
2c5a0 72 65 0a 2a 2a 20 74 68 65 20 73 74 65 70 20 66  re.** the step f
2c5b0 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20  unction was not 
2c5c0 70 72 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65  previously calle
2c5d0 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67  d..*/.case OP_Ag
2c5e0 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20  gFinal: {.  Mem 
2c5f0 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28  *pMem;.  assert(
2c600 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f   pOp->p1>0 && pO
2c610 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p1<=(p->nMem-
2c620 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
2c630 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
2c640 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2c650 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
2c660 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f   ~(MEM_Null|MEM_
2c670 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63  Agg))==0 );.  rc
2c680 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
2c690 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20  mFinalize(pMem, 
2c6a0 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a  pOp->p4.pFunc);.
2c6b0 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
2c6c0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2c6d0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2c6e0 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f  , "%s", sqlite3_
2c6f0 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29  value_text(pMem)
2c700 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
2c710 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
2c720 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e  ng(pMem, encodin
2c730 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  g);.  UPDATE_MAX
2c740 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b  _BLOBSIZE(pMem);
2c750 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
2c760 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d  beMemTooBig(pMem
2c770 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ) ){.    goto to
2c780 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65  o_big;.  }.  bre
2c790 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  ak;.}..#ifndef S
2c7a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f  QLITE_OMIT_WAL./
2c7b0 2a 20 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b 70  * Opcode: Checkp
2c7c0 6f 69 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20  oint P1 P2 P3 * 
2c7d0 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69  *.**.** Checkpoi
2c7e0 6e 74 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  nt database P1. 
2c7f0 54 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20  This is a no-op 
2c800 69 66 20 50 31 20 69 73 20 6e 6f 74 20 63 75 72  if P1 is not cur
2c810 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c  rently in.** WAL
2c820 20 6d 6f 64 65 2e 20 50 61 72 61 6d 65 74 65 72   mode. Parameter
2c830 20 50 32 20 69 73 20 6f 6e 65 20 6f 66 20 53 51   P2 is one of SQ
2c840 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
2c850 50 41 53 53 49 56 45 2c 20 46 55 4c 4c 0a 2a 2a  PASSIVE, FULL.**
2c860 20 6f 72 20 52 45 53 54 41 52 54 2e 20 20 57 72   or RESTART.  Wr
2c870 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f 20  ite 1 or 0 into 
2c880 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20 63  mem[P3] if the c
2c890 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e  heckpoint return
2c8a0 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59  s.** SQLITE_BUSY
2c8b0 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63 74   or not, respect
2c8c0 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74 68  ively.  Write th
2c8d0 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
2c8e0 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20  s in the.** WAL 
2c8f0 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70  after the checkp
2c900 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  oint into mem[P3
2c910 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d 62  +1] and the numb
2c920 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69  er of pages.** i
2c930 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74 20 68  n the WAL that h
2c940 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70 6f  ave been checkpo
2c950 69 6e 74 65 64 20 61 66 74 65 72 20 74 68 65 20  inted after the 
2c960 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f  checkpoint.** co
2c970 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d  mpletes into mem
2c980 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72  [P3+2].  However
2c990 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65   on an error, me
2c9a0 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d  m[P3+1] and.** m
2c9b0 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e 69  em[P3+2] are ini
2c9c0 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a  tialized to -1..
2c9d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63 6b  */.case OP_Check
2c9e0 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69  point: {.  int i
2c9f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2ca00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
2ca10 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  op counter */.  
2ca20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20 20  int aRes[3];    
2ca30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca40 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20  /* Results */.  
2ca50 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
2ca60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca70 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74 73  /* Write results
2ca80 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73 65   here */..  asse
2ca90 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
2caa0 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b 30 5d 20  =0 );.  aRes[0] 
2cab0 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d  = 0;.  aRes[1] =
2cac0 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20   aRes[2] = -1;. 
2cad0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
2cae0 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
2caf0 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20 20  INT_PASSIVE.    
2cb00 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53     || pOp->p2==S
2cb10 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
2cb20 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20  _FULL.       || 
2cb30 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
2cb40 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41  CHECKPOINT_RESTA
2cb50 52 54 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73  RT.  );.  rc = s
2cb60 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74  qlite3Checkpoint
2cb70 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
2cb80 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c  p->p2, &aRes[1],
2cb90 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66   &aRes[2]);.  if
2cba0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
2cbb0 59 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  Y ){.    rc = SQ
2cbc0 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65  LITE_OK;.    aRe
2cbd0 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  s[0] = 1;.  }.  
2cbe0 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20  for(i=0, pMem = 
2cbf0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20  &aMem[pOp->p3]; 
2cc00 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b  i<3; i++, pMem++
2cc10 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
2cc20 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d  beMemSetInt64(pM
2cc30 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b 69 5d  em, (i64)aRes[i]
2cc40 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62 72 65  );.  }    .  bre
2cc50 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a  ak;.};  .#endif.
2cc60 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2cc70 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f  OMIT_PRAGMA./* O
2cc80 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f  pcode: JournalMo
2cc90 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  de P1 P2 P3 * *.
2cca0 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65  **.** Change the
2ccb0 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66   journal mode of
2ccc0 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20   database P1 to 
2ccd0 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65 20 6f  P3. P3 must be o
2cce0 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47  ne of the.** PAG
2ccf0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58  ER_JOURNALMODE_X
2cd00 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20 63 68  XX values. If ch
2cd10 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e 20 74  anging between t
2cd20 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62  he various rollb
2cd30 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65  ack.** modes (de
2cd40 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65 2c 20  lete, truncate, 
2cd50 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61 6e 64  persist, off and
2cd60 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73 20 69   memory), this i
2cd70 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70  s a simple.** op
2cd80 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69  eration. No IO i
2cd90 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a  s required..**.*
2cda0 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20 69 6e  * If changing in
2cdb0 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c  to or out of WAL
2cdc0 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63 65 64   mode the proced
2cdd0 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70  ure is more comp
2cde0 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57  licated..**.** W
2cdf0 72 69 74 65 20 61 20 73 74 72 69 6e 67 20 63 6f  rite a string co
2ce00 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6e  ntaining the fin
2ce10 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20  al journal-mode 
2ce20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
2ce30 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e  */.case OP_Journ
2ce40 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20  alMode: {    /* 
2ce50 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
2ce60 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  */.  Btree *pBt;
2ce70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce80 20 20 20 20 20 2f 2a 20 42 74 72 65 65 20 74 6f       /* Btree to
2ce90 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20   change journal 
2cea0 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67  mode of */.  Pag
2ceb0 65 72 20 2a 70 50 61 67 65 72 3b 20 20 20 20 20  er *pPager;     
2cec0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2ced0 50 61 67 65 72 20 61 73 73 6f 63 69 61 74 65 64  Pager associated
2cee0 20 77 69 74 68 20 70 42 74 20 2a 2f 0a 20 20 69   with pBt */.  i
2cef0 6e 74 20 65 4e 65 77 3b 20 20 20 20 20 20 20 20  nt eNew;        
2cf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2cf10 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f  * New journal mo
2cf20 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64  de */.  int eOld
2cf30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2cf40 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f          /* The o
2cf50 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  ld journal mode 
2cf60 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
2cf70 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63 6f 6e  E_OMIT_WAL.  con
2cf80 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61  st char *zFilena
2cf90 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  me;          /* 
2cfa0 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65  Name of database
2cfb0 20 66 69 6c 65 20 66 6f 72 20 70 50 61 67 65 72   file for pPager
2cfc0 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 65 4e   */.#endif..  eN
2cfd0 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ew = pOp->p3;.  
2cfe0 61 73 73 65 72 74 28 20 65 4e 65 77 3d 3d 50 41  assert( eNew==PA
2cff0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2d000 44 45 4c 45 54 45 20 0a 20 20 20 20 20 20 20 7c  DELETE .       |
2d010 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2d020 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41  URNALMODE_TRUNCA
2d030 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  TE .       || eN
2d040 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2d050 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 20 0a 20  LMODE_PERSIST . 
2d060 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
2d070 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2d080 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c 20 65  _OFF.       || e
2d090 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2d0a0 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20  ALMODE_MEMORY.  
2d0b0 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2d0c0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2d0d0 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  WAL.       || eN
2d0e0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2d0f0 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20 29 3b  LMODE_QUERY.  );
2d100 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2d110 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2d120 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
2d130 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
2d140 79 3d 3d 30 20 29 3b 0a 0a 20 20 70 42 74 20 3d  y==0 );..  pBt =
2d150 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
2d160 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67 65 72 20  ].pBt;.  pPager 
2d170 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
2d180 67 65 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c 64  ger(pBt);.  eOld
2d190 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 47   = sqlite3PagerG
2d1a0 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  etJournalMode(pP
2d1b0 61 67 65 72 29 3b 0a 20 20 69 66 28 20 65 4e 65  ager);.  if( eNe
2d1c0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2d1d0 4d 4f 44 45 5f 51 55 45 52 59 20 29 20 65 4e 65  MODE_QUERY ) eNe
2d1e0 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28 20  w = eOld;.  if( 
2d1f0 21 73 71 6c 69 74 65 33 50 61 67 65 72 4f 6b 54  !sqlite3PagerOkT
2d200 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f  oChangeJournalMo
2d210 64 65 28 70 50 61 67 65 72 29 20 29 20 65 4e 65  de(pPager) ) eNe
2d220 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64  w = eOld;..#ifnd
2d230 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
2d240 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d  AL.  zFilename =
2d250 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c   sqlite3PagerFil
2d260 65 6e 61 6d 65 28 70 50 61 67 65 72 2c 20 31 29  ename(pPager, 1)
2d270 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61  ;..  /* Do not a
2d280 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69 74 69 6f  llow a transitio
2d290 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  n to journal_mod
2d2a0 65 3d 57 41 4c 20 66 6f 72 20 61 20 64 61 74 61  e=WAL for a data
2d2b0 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65 6d  base.  ** in tem
2d2c0 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20 6f  porary storage o
2d2d0 72 20 69 66 20 74 68 65 20 56 46 53 20 64 6f 65  r if the VFS doe
2d2e0 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 73 68  s not support sh
2d2f0 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20 2a  ared memory .  *
2d300 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41  /.  if( eNew==PA
2d310 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2d320 57 41 4c 0a 20 20 20 26 26 20 28 73 71 6c 69 74  WAL.   && (sqlit
2d330 65 33 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65  e3Strlen30(zFile
2d340 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20 20 20 20  name)==0        
2d350 20 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65 20     /* Temp file 
2d360 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21 73 71  */.       || !sq
2d370 6c 69 74 65 33 50 61 67 65 72 57 61 6c 53 75 70  lite3PagerWalSup
2d380 70 6f 72 74 65 64 28 70 50 61 67 65 72 29 29 20  ported(pPager)) 
2d390 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d 6d    /* No shared-m
2d3a0 65 6d 6f 72 79 20 73 75 70 70 6f 72 74 20 2a 2f  emory support */
2d3b0 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d  .  ){.    eNew =
2d3c0 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69 66   eOld;.  }..  if
2d3d0 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a 20  ( (eNew!=eOld). 
2d3e0 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47 45    && (eOld==PAGE
2d3f0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2d400 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52  L || eNew==PAGER
2d410 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2d420 29 0a 20 20 29 7b 0a 20 20 20 20 69 66 28 20 21  ).  ){.    if( !
2d430 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c  db->autoCommit |
2d440 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e  | db->nVdbeRead>
2d450 31 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  1 ){.      rc = 
2d460 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
2d470 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
2d480 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
2d490 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20 20  , db, .         
2d4a0 20 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20   "cannot change 
2d4b0 25 73 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d  %s wal mode from
2d4c0 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
2d4d0 63 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20  ction",.        
2d4e0 20 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a    (eNew==PAGER_J
2d4f0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f  OURNALMODE_WAL ?
2d500 20 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f   "into" : "out o
2d510 66 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20  f").      );.   
2d520 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 65     break;.    }e
2d530 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20 69 66 28  lse{. .      if(
2d540 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55   eOld==PAGER_JOU
2d550 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a  RNALMODE_WAL ){.
2d560 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6c 65          /* If le
2d570 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20  aving WAL mode, 
2d580 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20 66 69  close the log fi
2d590 6c 65 2e 20 49 66 20 73 75 63 63 65 73 73 66 75  le. If successfu
2d5a0 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20 20 20  l, the call.    
2d5b0 20 20 20 20 2a 2a 20 74 6f 20 50 61 67 65 72 43      ** to PagerC
2d5c0 6c 6f 73 65 57 61 6c 28 29 20 63 68 65 63 6b 70  loseWal() checkp
2d5d0 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c 65 74 65  oints and delete
2d5e0 73 20 74 68 65 20 77 72 69 74 65 2d 61 68 65 61  s the write-ahea
2d5f0 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20 20 2a  d-log .        *
2d600 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55  * file. An EXCLU
2d610 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74  SIVE lock may st
2d620 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20 74  ill be held on t
2d630 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
2d640 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 66 74   .        ** aft
2d650 65 72 20 61 20 73 75 63 63 65 73 73 66 75 6c 20  er a successful 
2d660 72 65 74 75 72 6e 2e 20 0a 20 20 20 20 20 20 20  return. .       
2d670 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20 3d   */.        rc =
2d680 20 73 71 6c 69 74 65 33 50 61 67 65 72 43 6c 6f   sqlite3PagerClo
2d690 73 65 57 61 6c 28 70 50 61 67 65 72 29 3b 0a 20  seWal(pPager);. 
2d6a0 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53         if( rc==S
2d6b0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2d6c0 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67        sqlite3Pag
2d6d0 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erSetJournalMode
2d6e0 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a  (pPager, eNew);.
2d6f0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2d700 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d  }else if( eOld==
2d710 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2d720 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20  E_MEMORY ){.    
2d730 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72      /* Cannot tr
2d740 61 6e 73 69 74 69 6f 6e 20 64 69 72 65 63 74 6c  ansition directl
2d750 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f  y from MEMORY to
2d760 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20   WAL.  Use mode 
2d770 4f 46 46 0a 20 20 20 20 20 20 20 20 2a 2a 20 61  OFF.        ** a
2d780 73 20 61 6e 20 69 6e 74 65 72 6d 65 64 69 61 74  s an intermediat
2d790 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c  e */.        sql
2d7a0 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
2d7b0 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
2d7c0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2d7d0 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a  E_OFF);.      }.
2d7e0 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e    .      /* Open
2d7f0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f   a transaction o
2d800 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
2d810 69 6c 65 2e 20 52 65 67 61 72 64 6c 65 73 73 20  ile. Regardless 
2d820 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20  of the journal. 
2d830 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68       ** mode, th
2d840 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  is transaction a
2d850 6c 77 61 79 73 20 75 73 65 73 20 61 20 72 6f 6c  lways uses a rol
2d860 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20  lback journal.. 
2d870 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73       */.      as
2d880 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
2d890 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29  eeIsInTrans(pBt)
2d8a0 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28  ==0 );.      if(
2d8b0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
2d8c0 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
2d8d0 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 56 65  qlite3BtreeSetVe
2d8e0 72 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77  rsion(pBt, (eNew
2d8f0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2d900 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29  ODE_WAL ? 2 : 1)
2d910 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
2d920 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69  .  }.#endif /* i
2d930 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2d940 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20  T_WAL */..  if( 
2d950 72 63 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d  rc ){.    eNew =
2d960 20 65 4f 6c 64 3b 0a 20 20 7d 0a 20 20 65 4e 65   eOld;.  }.  eNe
2d970 77 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  w = sqlite3Pager
2d980 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
2d990 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20  Pager, eNew);.. 
2d9a0 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
2d9b0 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 2d 3e  p->p2];.  pOut->
2d9c0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c  flags = MEM_Str|
2d9d0 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54  MEM_Static|MEM_T
2d9e0 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d  erm;.  pOut->z =
2d9f0 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33   (char *)sqlite3
2da00 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
2da10 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e  eNew);.  pOut->n
2da20 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
2da30 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70  30(pOut->z);.  p
2da40 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54  Out->enc = SQLIT
2da50 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65  E_UTF8;.  sqlite
2da60 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
2da70 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69  ing(pOut, encodi
2da80 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b  ng);.  break;.};
2da90 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2daa0 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f  E_OMIT_PRAGMA */
2dab0 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
2dac0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55  QLITE_OMIT_VACUU
2dad0 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  M) && !defined(S
2dae0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43  QLITE_OMIT_ATTAC
2daf0 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61  H)./* Opcode: Va
2db00 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a  cuum * * * * *.*
2db10 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20  *.** Vacuum the 
2db20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 2e  entire database.
2db30 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 69    This opcode wi
2db40 6c 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20 76  ll cause other v
2db50 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e  irtual.** machin
2db60 65 73 20 74 6f 20 62 65 20 63 72 65 61 74 65 64  es to be created
2db70 20 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d 61   and run.  It ma
2db80 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20  y not be called 
2db90 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61  from within.** a
2dba0 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f   transaction..*/
2dbb0 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a  .case OP_Vacuum:
2dbc0 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   {.  assert( p->
2dbd0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
2dbe0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e   rc = sqlite3Run
2dbf0 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d  Vacuum(&p->zErrM
2dc00 73 67 2c 20 64 62 29 3b 0a 20 20 62 72 65 61 6b  sg, db);.  break
2dc10 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  ;.}.#endif..#if 
2dc20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2dc30 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29  OMIT_AUTOVACUUM)
2dc40 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72  ./* Opcode: Incr
2dc50 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a  Vacuum P1 P2 * *
2dc60 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d   *.**.** Perform
2dc70 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f   a single step o
2dc80 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61  f the incrementa
2dc90 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75  l vacuum procedu
2dca0 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20  re on.** the P1 
2dcb0 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65  database. If the
2dcc0 20 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69   vacuum has fini
2dcd0 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  shed, jump to in
2dce0 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e  struction.** P2.
2dcf0 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c   Otherwise, fall
2dd00 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2dd10 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
2dd20 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63  ..*/.case OP_Inc
2dd30 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20  rVacuum: {      
2dd40 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42    /* jump */.  B
2dd50 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73  tree *pBt;..  as
2dd60 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2dd70 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
2dd80 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
2dd90 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
2dda0 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
2ddb0 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
2ddc0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
2ddd0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 42  dOnly==0 );.  pB
2dde0 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
2ddf0 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d  >p1].pBt;.  rc =
2de00 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 63   sqlite3BtreeInc
2de10 72 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20 20  rVacuum(pBt);.  
2de20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2de30 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 2c  rc==SQLITE_DONE,
2de40 32 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  2);.  if( rc==SQ
2de50 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20  LITE_DONE ){.   
2de60 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
2de70 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  1;.    rc = SQLI
2de80 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 62 72 65  TE_OK;.  }.  bre
2de90 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
2dea0 20 4f 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20   Opcode: Expire 
2deb0 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
2dec0 20 43 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c   Cause precompil
2ded0 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  ed statements to
2dee0 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e   become expired.
2def0 20 41 6e 20 65 78 70 69 72 65 64 20 73 74 61 74   An expired stat
2df00 65 6d 65 6e 74 0a 2a 2a 20 66 61 69 6c 73 20 77  ement.** fails w
2df10 69 74 68 20 61 6e 20 65 72 72 6f 72 20 63 6f 64  ith an error cod
2df20 65 20 6f 66 20 53 51 4c 49 54 45 5f 53 43 48 45  e of SQLITE_SCHE
2df30 4d 41 20 69 66 20 69 74 20 69 73 20 65 76 65 72  MA if it is ever
2df40 20 65 78 65 63 75 74 65 64 20 0a 2a 2a 20 28 76   executed .** (v
2df50 69 61 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  ia sqlite3_step(
2df60 29 29 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31  ))..** .** If P1
2df70 20 69 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20   is 0, then all 
2df80 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62  SQL statements b
2df90 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49  ecome expired. I
2dfa0 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
2dfb0 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74  ,.** then only t
2dfc0 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65  he currently exe
2dfd0 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  cuting statement
2dfe0 20 69 73 20 61 66 66 65 63 74 65 64 2e 20 0a 2a   is affected. .*
2dff0 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65  /.case OP_Expire
2e000 3a 20 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e  : {.  if( !pOp->
2e010 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  p1 ){.    sqlite
2e020 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
2e030 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
2e040 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65   }else{.    p->e
2e050 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a  xpired = 1;.  }.
2e060 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
2e070 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2e080 53 48 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20  SHARED_CACHE./* 
2e090 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63  Opcode: TableLoc
2e0a0 6b 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  k P1 P2 P3 P4 *.
2e0b0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 44 62  ** Synopsis: iDb
2e0c0 3d 50 31 20 72 6f 6f 74 3d 50 32 20 77 72 69 74  =P1 root=P2 writ
2e0d0 65 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69  e=P3.**.** Obtai
2e0e0 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61  n a lock on a pa
2e0f0 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 2e 20  rticular table. 
2e100 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
2e110 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68   is only used wh
2e120 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72 65 64  en.** the shared
2e130 2d 63 61 63 68 65 20 66 65 61 74 75 72 65 20 69  -cache feature i
2e140 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a  s enabled. .**.*
2e150 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65  * P1 is the inde
2e160 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
2e170 65 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62  e in sqlite3.aDb
2e180 5b 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  [] of the databa
2e190 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74  se.** on which t
2e1a0 68 65 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69  he lock is acqui
2e1b0 72 65 64 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b  red.  A readlock
2e1c0 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 66 20   is obtained if 
2e1d0 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72  P3==0 or.** a wr
2e1e0 69 74 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d  ite lock if P3==
2e1f0 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74  1..**.** P2 cont
2e200 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70 61  ains the root-pa
2e210 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ge of the table 
2e220 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50  to lock..**.** P
2e230 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69  4 contains a poi
2e240 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61 6d 65  nter to the name
2e250 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62 65   of the table be
2e260 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73  ing locked. This
2e270 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64   is only.** used
2e280 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 6e 20   to generate an 
2e290 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 66  error message if
2e2a0 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74   the lock cannot
2e2b0 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f   be obtained..*/
2e2c0 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f  .case OP_TableLo
2e2d0 63 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57 72 69  ck: {.  u8 isWri
2e2e0 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70  teLock = (u8)pOp
2e2f0 2d 3e 70 33 3b 0a 20 20 69 66 28 20 69 73 57 72  ->p3;.  if( isWr
2e300 69 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64  iteLock || 0==(d
2e310 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
2e320 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 29  ReadUncommitted)
2e330 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 31 20 3d   ){.    int p1 =
2e340 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61   pOp->p1; .    a
2e350 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20  ssert( p1>=0 && 
2e360 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
2e370 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
2e380 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62  reeMask & (((yDb
2e390 4d 61 73 6b 29 31 29 3c 3c 70 31 29 29 21 3d 30  Mask)1)<<p1))!=0
2e3a0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2e3b0 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c  isWriteLock==0 |
2e3c0 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31  | isWriteLock==1
2e3d0 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
2e3e0 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54 61 62  ite3BtreeLockTab
2e3f0 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70  le(db->aDb[p1].p
2e400 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57  Bt, pOp->p2, isW
2e410 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20 69  riteLock);.    i
2e420 66 28 20 28 72 63 26 30 78 46 46 29 3d 3d 53 51  f( (rc&0xFF)==SQ
2e430 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20  LITE_LOCKED ){. 
2e440 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
2e450 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  *z = pOp->p4.z;.
2e460 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
2e470 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
2e480 73 67 2c 20 64 62 2c 20 22 64 61 74 61 62 61 73  sg, db, "databas
2e490 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65  e table is locke
2e4a0 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20  d: %s", z);.    
2e4b0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
2e4c0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2e4d0 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
2e4e0 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  CHE */..#ifndef 
2e4f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2e500 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
2e510 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a  de: VBegin * * *
2e520 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d   P4 *.**.** P4 m
2e530 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20  ay be a pointer 
2e540 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  to an sqlite3_vt
2e550 61 62 20 73 74 72 75 63 74 75 72 65 2e 20 49 66  ab structure. If
2e560 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a   so, call the .*
2e570 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20  * xBegin method 
2e580 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a  for that table..
2e590 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74  **.** Also, whet
2e5a0 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20 69 73  her or not P4 is
2e5b0 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68 61 74   set, check that
2e5c0 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62 65 69   this is not bei
2e5d0 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a  ng called from.*
2e5e0 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c 6c 62  * within a callb
2e5f0 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ack to a virtual
2e600 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29 20 6d   table xSync() m
2e610 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69 73 2c  ethod. If it is,
2e620 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f   the error.** co
2e630 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74  de will be set t
2e640 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e  o SQLITE_LOCKED.
2e650 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65 67  .*/.case OP_VBeg
2e660 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20 2a  in: {.  VTable *
2e670 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62 20 3d  pVTab;.  pVTab =
2e680 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a   pOp->p4.pVtab;.
2e690 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
2e6a0 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56 54 61  abBegin(db, pVTa
2e6b0 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61 62 20  b);.  if( pVTab 
2e6c0 29 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70  ) sqlite3VtabImp
2e6d0 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 54  ortErrmsg(p, pVT
2e6e0 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20 62 72  ab->pVtab);.  br
2e6f0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2e700 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2e710 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2e720 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2e730 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2e740 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74  * Opcode: VCreat
2e750 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  e P1 * * P4 *.**
2e760 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61  .** P4 is the na
2e770 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20  me of a virtual 
2e780 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73  table in databas
2e790 65 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78  e P1. Call the x
2e7a0 43 72 65 61 74 65 20 6d 65 74 68 6f 64 0a 2a 2a  Create method.**
2e7b0 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e   for that table.
2e7c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65  .*/.case OP_VCre
2e7d0 61 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71  ate: {.  rc = sq
2e7e0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65  lite3VtabCallCre
2e7f0 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ate(db, pOp->p1,
2e800 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d 3e   pOp->p4.z, &p->
2e810 7a 45 72 72 4d 73 67 29 3b 0a 20 20 62 72 65 61  zErrMsg);.  brea
2e820 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2e830 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2e840 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2e850 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2e860 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2e870 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79  Opcode: VDestroy
2e880 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2e890 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d  ** P4 is the nam
2e8a0 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74  e of a virtual t
2e8b0 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65  able in database
2e8c0 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78   P1.  Call the x
2e8d0 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a  Destroy method.*
2e8e0 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e  * of that table.
2e8f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73  .*/.case OP_VDes
2e900 74 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e 56  troy: {.  p->inV
2e910 74 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b 0a 20  tabMethod = 2;. 
2e920 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
2e930 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c  bCallDestroy(db,
2e940 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2e950 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61  4.z);.  p->inVta
2e960 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 62  bMethod = 0;.  b
2e970 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2e980 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
2e990 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
2e9a0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2e9b0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2e9c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e  /* Opcode: VOpen
2e9d0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2e9e0 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
2e9f0 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
2ea00 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
2ea10 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
2ea20 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69  ructure..** P1 i
2ea30 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  s a cursor numbe
2ea40 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  r.  This opcode 
2ea50 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72 20 74  opens a cursor t
2ea60 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  o the virtual.**
2ea70 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f 72 65   table and store
2ea80 73 20 74 68 61 74 20 63 75 72 73 6f 72 20 69 6e  s that cursor in
2ea90 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
2eaa0 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43  VOpen: {.  VdbeC
2eab0 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73  ursor *pCur;.  s
2eac0 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
2ead0 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b  or *pVtabCursor;
2eae0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
2eaf0 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65  *pVtab;.  sqlite
2eb00 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
2eb10 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  e;..  assert( p-
2eb20 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
2eb30 70 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 74 61  pCur = 0;.  pVta
2eb40 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20 70  bCursor = 0;.  p
2eb50 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
2eb60 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70  Vtab->pVtab;.  p
2eb70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65  Module = (sqlite
2eb80 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62  3_module *)pVtab
2eb90 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
2eba0 65 72 74 28 70 56 74 61 62 20 26 26 20 70 4d 6f  ert(pVtab && pMo
2ebb0 64 75 6c 65 29 3b 0a 20 20 72 63 20 3d 20 70 4d  dule);.  rc = pM
2ebc0 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74  odule->xOpen(pVt
2ebd0 61 62 2c 20 26 70 56 74 61 62 43 75 72 73 6f 72  ab, &pVtabCursor
2ebe0 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  );.  sqlite3Vtab
2ebf0 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
2ec00 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 53 51  pVtab);.  if( SQ
2ec10 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20  LITE_OK==rc ){. 
2ec20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65     /* Initialize
2ec30 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
2ec40 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20  rsor base class 
2ec50 2a 2f 0a 20 20 20 20 70 56 74 61 62 43 75 72 73  */.    pVtabCurs
2ec60 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61  or->pVtab = pVta
2ec70 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69  b;..    /* Initi
2ec80 61 6c 69 7a 65 20 76 64 62 65 20 63 75 72 73 6f  alize vdbe curso
2ec90 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20  r object */.    
2eca0 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43  pCur = allocateC
2ecb0 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
2ecc0 2c 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 20  , 0, -1, 0);.   
2ecd0 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20   if( pCur ){.   
2ece0 20 20 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75     pCur->pVtabCu
2ecf0 72 73 6f 72 20 3d 20 70 56 74 61 62 43 75 72 73  rsor = pVtabCurs
2ed00 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  or;.    }else{. 
2ed10 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46       db->mallocF
2ed20 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20  ailed = 1;.     
2ed30 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65   pModule->xClose
2ed40 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  (pVtabCursor);. 
2ed50 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
2ed60 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2ed70 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2ed80 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
2ed90 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
2eda0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
2edb0 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72 20 50  pcode: VFilter P
2edc0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
2edd0 53 79 6e 6f 70 73 69 73 3a 20 69 50 6c 61 6e 3d  Synopsis: iPlan=
2ede0 72 5b 50 33 5d 20 7a 50 6c 61 6e 3d 27 50 34 27  r[P3] zPlan='P4'
2edf0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 63  .**.** P1 is a c
2ee00 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75 73 69  ursor opened usi
2ee10 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20 69 73  ng VOpen.  P2 is
2ee20 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f 20 6a   an address to j
2ee30 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65  ump to if.** the
2ee40 20 66 69 6c 74 65 72 65 64 20 72 65 73 75 6c 74   filtered result
2ee50 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a   set is empty..*
2ee60 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74 68 65  *.** P4 is eithe
2ee70 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72 69  r NULL or a stri
2ee80 6e 67 20 74 68 61 74 20 77 61 73 20 67 65 6e 65  ng that was gene
2ee90 72 61 74 65 64 20 62 79 20 74 68 65 20 78 42 65  rated by the xBe
2eea0 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f  stIndex.** metho
2eeb0 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e  d of the module.
2eec0 20 20 54 68 65 20 69 6e 74 65 72 70 72 65 74 61    The interpreta
2eed0 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34 20 73  tion of the P4 s
2eee0 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a  tring is left.**
2eef0 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69   to the module i
2ef00 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a  mplementation..*
2ef10 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2ef20 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78 46 69   invokes the xFi
2ef30 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74  lter method on t
2ef40 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
2ef50 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79   specified.** by
2ef60 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65 67 65   P1.  The intege
2ef70 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70 61 72  r query plan par
2ef80 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c 74 65  ameter to xFilte
2ef90 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  r is stored in r
2efa0 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52  egister.** P3. R
2efb0 65 67 69 73 74 65 72 20 50 33 2b 31 20 73 74 6f  egister P3+1 sto
2efc0 72 65 73 20 74 68 65 20 61 72 67 63 20 70 61 72  res the argc par
2efd0 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70 61 73  ameter to be pas
2efe0 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46  sed to the.** xF
2eff0 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20 52 65  ilter method. Re
2f000 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e 50 33  gisters P3+2..P3
2f010 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68 65 20  +1+argc are the 
2f020 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e  argc.** addition
2f030 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 77 68  al parameters wh
2f040 69 63 68 20 61 72 65 20 70 61 73 73 65 64 20 74  ich are passed t
2f050 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61 73 20  o.** xFilter as 
2f060 61 72 67 76 2e 20 52 65 67 69 73 74 65 72 20 50  argv. Register P
2f070 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72 67 76  3+2 becomes argv
2f080 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65 64 20  [0] when passed 
2f090 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a  to xFilter..**.*
2f0a0 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  * A jump is made
2f0b0 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 72 65   to P2 if the re
2f0c0 73 75 6c 74 20 73 65 74 20 61 66 74 65 72 20 66  sult set after f
2f0d0 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64 20 62  iltering would b
2f0e0 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65  e empty..*/.case
2f0f0 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20   OP_VFilter: {  
2f100 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e   /* jump */.  in
2f110 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 51  t nArg;.  int iQ
2f120 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71  uery;.  const sq
2f130 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
2f140 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51  odule;.  Mem *pQ
2f150 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72  uery;.  Mem *pAr
2f160 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  gc;.  sqlite3_vt
2f170 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62  ab_cursor *pVtab
2f180 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65  Cursor;.  sqlite
2f190 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
2f1a0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
2f1b0 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  r;.  int res;.  
2f1c0 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61  int i;.  Mem **a
2f1d0 70 41 72 67 3b 0a 0a 20 20 70 51 75 65 72 79 20  pArg;..  pQuery 
2f1e0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2f1f0 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70 51 75  ;.  pArgc = &pQu
2f200 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d  ery[1];.  pCur =
2f210 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2f220 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65  1];.  assert( me
2f230 6d 49 73 56 61 6c 69 64 28 70 51 75 65 72 79 29  mIsValid(pQuery)
2f240 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
2f250 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51  RACE(pOp->p3, pQ
2f260 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74 28  uery);.  assert(
2f270 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
2f280 6f 72 20 29 3b 0a 20 20 70 56 74 61 62 43 75 72  or );.  pVtabCur
2f290 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56 74 61  sor = pCur->pVta
2f2a0 62 43 75 72 73 6f 72 3b 0a 20 20 70 56 74 61 62  bCursor;.  pVtab
2f2b0 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e   = pVtabCursor->
2f2c0 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
2f2d0 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
2f2e0 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74 68  e;..  /* Grab th
2f2f0 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20 61  e index number a
2f300 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65 74 65  nd argc paramete
2f310 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  rs */.  assert( 
2f320 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d  (pQuery->flags&M
2f330 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70 41  EM_Int)!=0 && pA
2f340 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  rgc->flags==MEM_
2f350 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20  Int );.  nArg = 
2f360 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b  (int)pArgc->u.i;
2f370 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e 74  .  iQuery = (int
2f380 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20  )pQuery->u.i;.. 
2f390 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78   /* Invoke the x
2f3a0 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f  Filter method */
2f3b0 0a 20 20 7b 0a 20 20 20 20 72 65 73 20 3d 20 30  .  {.    res = 0
2f3c0 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d  ;.    apArg = p-
2f3d0 3e 61 70 41 72 67 3b 0a 20 20 20 20 66 6f 72 28  >apArg;.    for(
2f3e0 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69  i = 0; i<nArg; i
2f3f0 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70 41 72 67  ++){.      apArg
2f400 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b 31  [i] = &pArgc[i+1
2f410 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ];.      sqlite3
2f420 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
2f430 28 61 70 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20  (apArg[i]);.    
2f440 7d 0a 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62  }..    p->inVtab
2f450 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20 20  Method = 1;.    
2f460 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46  rc = pModule->xF
2f470 69 6c 74 65 72 28 70 56 74 61 62 43 75 72 73 6f  ilter(pVtabCurso
2f480 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e  r, iQuery, pOp->
2f490 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72  p4.z, nArg, apAr
2f4a0 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61  g);.    p->inVta
2f4b0 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 20  bMethod = 0;.   
2f4c0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
2f4d0 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
2f4e0 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  b);.    if( rc==
2f4f0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
2f500 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65     res = pModule
2f510 2d 3e 78 45 6f 66 28 70 56 74 61 62 43 75 72 73  ->xEof(pVtabCurs
2f520 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 56  or);.    }.    V
2f530 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
2f540 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66  es!=0,2);.    if
2f550 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70  ( res ){.      p
2f560 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
2f570 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 75  .    }.  }.  pCu
2f580 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  r->nullRow = 0;.
2f590 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2f5a0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2f5b0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
2f5c0 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
2f5d0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2f5e0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
2f5f0 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20  Column P1 P2 P3 
2f600 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2f610 20 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e 28 50   r[P3]=vcolumn(P
2f620 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74  2).**.** Store t
2f630 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
2f640 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a  P2-th column of.
2f650 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68  ** the row of th
2f660 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20  e virtual-table 
2f670 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20  that the .** P1 
2f680 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69  cursor is pointi
2f690 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73  ng to into regis
2f6a0 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20  ter P3..*/.case 
2f6b0 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20  OP_VColumn: {.  
2f6c0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
2f6d0 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
2f6e0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
2f6f0 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65  dule;.  Mem *pDe
2f700 73 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  st;.  sqlite3_co
2f710 6e 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a  ntext sContext;.
2f720 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2f730 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
2f740 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2f750 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75  t( pCur->pVtabCu
2f760 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
2f770 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
2f780 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
2f790 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
2f7a0 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b    pDest = &aMem[
2f7b0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
2f7c0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
2f7d0 70 44 65 73 74 29 3b 0a 20 20 69 66 28 20 70 43  pDest);.  if( pC
2f7e0 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  ur->nullRow ){. 
2f7f0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2f800 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b  mSetNull(pDest);
2f810 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
2f820 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e    pVtab = pCur->
2f830 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
2f840 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
2f850 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
2f860 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c    assert( pModul
2f870 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20  e->xColumn );.  
2f880 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74  memset(&sContext
2f890 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e  , 0, sizeof(sCon
2f8a0 74 65 78 74 29 29 3b 0a 0a 20 20 2f 2a 20 54 68  text));..  /* Th
2f8b0 65 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61  e output cell ma
2f8c0 79 20 61 6c 72 65 61 64 79 20 68 61 76 65 20 61  y already have a
2f8d0 20 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65   buffer allocate
2f8e0 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65  d. Move.  ** the
2f8f0 20 63 75 72 72 65 6e 74 20 63 6f 6e 74 65 6e 74   current content
2f900 73 20 74 6f 20 73 43 6f 6e 74 65 78 74 2e 73 20  s to sContext.s 
2f910 73 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20 75  so in case the u
2f920 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 0a 20 20  ser-function .  
2f930 2a 2a 20 63 61 6e 20 75 73 65 20 74 68 65 20 61  ** can use the a
2f940 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64  lready allocated
2f950 20 62 75 66 66 65 72 20 69 6e 73 74 65 61 64 20   buffer instead 
2f960 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20  of allocating a 
2f970 0a 20 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a 20  .  ** new one.. 
2f980 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62   */.  sqlite3Vdb
2f990 65 4d 65 6d 4d 6f 76 65 28 26 73 43 6f 6e 74 65  eMemMove(&sConte
2f9a0 78 74 2e 73 2c 20 70 44 65 73 74 29 3b 0a 20 20  xt.s, pDest);.  
2f9b0 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26  MemSetTypeFlag(&
2f9c0 73 43 6f 6e 74 65 78 74 2e 73 2c 20 4d 45 4d 5f  sContext.s, MEM_
2f9d0 4e 75 6c 6c 29 3b 0a 0a 20 20 72 63 20 3d 20 70  Null);..  rc = p
2f9e0 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28  Module->xColumn(
2f9f0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2fa00 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f  r, &sContext, pO
2fa10 70 2d 3e 70 32 29 3b 0a 20 20 73 71 6c 69 74 65  p->p2);.  sqlite
2fa20 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
2fa30 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69  g(p, pVtab);.  i
2fa40 66 28 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72  f( sContext.isEr
2fa50 72 6f 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ror ){.    rc = 
2fa60 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72  sContext.isError
2fa70 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79  ;.  }..  /* Copy
2fa80 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
2fa90 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74  he function to t
2faa0 68 65 20 50 33 20 72 65 67 69 73 74 65 72 2e 20  he P3 register. 
2fab0 57 65 0a 20 20 2a 2a 20 64 6f 20 74 68 69 73 20  We.  ** do this 
2fac0 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
2fad0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20  ether or not an 
2fae0 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 74  error occurred t
2faf0 6f 20 65 6e 73 75 72 65 20 61 6e 79 0a 20 20 2a  o ensure any.  *
2fb00 2a 20 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63 61  * dynamic alloca
2fb10 74 69 6f 6e 20 69 6e 20 73 43 6f 6e 74 65 78 74  tion in sContext
2fb20 2e 73 20 28 61 20 4d 65 6d 20 73 74 72 75 63 74  .s (a Mem struct
2fb30 29 20 69 73 20 20 72 65 6c 65 61 73 65 64 2e 0a  ) is  released..
2fb40 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64    */.  sqlite3Vd
2fb50 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
2fb60 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65 6e  (&sContext.s, en
2fb70 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74  coding);.  sqlit
2fb80 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 44  e3VdbeMemMove(pD
2fb90 65 73 74 2c 20 26 73 43 6f 6e 74 65 78 74 2e 73  est, &sContext.s
2fba0 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
2fbb0 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65  ACE(pOp->p3, pDe
2fbc0 73 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  st);.  UPDATE_MA
2fbd0 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74  X_BLOBSIZE(pDest
2fbe0 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65  );..  if( sqlite
2fbf0 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
2fc00 44 65 73 74 29 20 29 7b 0a 20 20 20 20 67 6f 74  Dest) ){.    got
2fc10 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
2fc20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2fc30 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2fc40 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2fc50 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2fc60 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2fc70 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65  E./* Opcode: VNe
2fc80 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  xt P1 P2 * * *.*
2fc90 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69 72  *.** Advance vir
2fca0 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74 6f  tual table P1 to
2fcb0 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69 6e   the next row in
2fcc0 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 20   its result set 
2fcd0 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69  and.** jump to i
2fce0 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 20  nstruction P2.  
2fcf0 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72 74 75  Or, if the virtu
2fd00 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65 61  al table has rea
2fd10 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20  ched.** the end 
2fd20 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20 73 65  of its result se
2fd30 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  t, then fall thr
2fd40 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
2fd50 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2fd60 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20  .case OP_VNext: 
2fd70 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20  {   /* jump */. 
2fd80 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
2fd90 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
2fda0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
2fdb0 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73  odule;.  int res
2fdc0 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
2fdd0 70 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30  pCur;..  res = 0
2fde0 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70  ;.  pCur = p->ap
2fdf0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2fe00 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56  assert( pCur->pV
2fe10 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 69  tabCursor );.  i
2fe20 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  f( pCur->nullRow
2fe30 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20   ){.    break;. 
2fe40 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75   }.  pVtab = pCu
2fe50 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e  r->pVtabCursor->
2fe60 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
2fe70 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
2fe80 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f  e;.  assert( pMo
2fe90 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a  dule->xNext );..
2fea0 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
2feb0 78 4e 65 78 74 28 29 20 6d 65 74 68 6f 64 20 6f  xNext() method o
2fec0 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68  f the module. Th
2fed0 65 72 65 20 69 73 20 6e 6f 20 77 61 79 20 66 6f  ere is no way fo
2fee0 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72  r the.  ** under
2fef0 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61  lying implementa
2ff00 74 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20 61  tion to return a
2ff10 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f  n error if one o
2ff20 63 63 75 72 73 20 64 75 72 69 6e 67 0a 20 20 2a  ccurs during.  *
2ff30 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e 73 74 65  * xNext(). Inste
2ff40 61 64 2c 20 69 66 20 61 6e 20 65 72 72 6f 72 20  ad, if an error 
2ff50 6f 63 63 75 72 73 2c 20 74 72 75 65 20 69 73 20  occurs, true is 
2ff60 72 65 74 75 72 6e 65 64 20 28 69 6e 64 69 63 61  returned (indica
2ff70 74 69 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a 20  ting that .  ** 
2ff80 64 61 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c  data is availabl
2ff90 65 29 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72  e) and the error
2ffa0 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 77   code returned w
2ffb0 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20  hen xColumn or. 
2ffc0 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d   ** some other m
2ffd0 65 74 68 6f 64 20 69 73 20 6e 65 78 74 20 69 6e  ethod is next in
2ffe0 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73 61 76  voked on the sav
2fff0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
30000 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 70  cursor..  */.  p
30010 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
30020 20 31 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75   1;.  rc = pModu
30030 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e  le->xNext(pCur->
30040 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
30050 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
30060 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 56 74  = 0;.  sqlite3Vt
30070 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
30080 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20  , pVtab);.  if( 
30090 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
300a0 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75  .    res = pModu
300b0 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 70  le->xEof(pCur->p
300c0 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 7d  VtabCursor);.  }
300d0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
300e0 65 6e 28 21 72 65 73 2c 32 29 3b 0a 20 20 69 66  en(!res,2);.  if
300f0 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a  ( !res ){.    /*
30100 20 49 66 20 74 68 65 72 65 20 69 73 20 64 61 74   If there is dat
30110 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f  a, jump to P2 */
30120 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
30130 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 67 6f 74  2 - 1;.  }.  got
30140 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  o check_for_inte
30150 72 72 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20  rrupt;.}.#endif 
30160 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
30170 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
30180 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
30190 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
301a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e  ./* Opcode: VRen
301b0 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ame P1 * * P4 *.
301c0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
301d0 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
301e0 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
301f0 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
30200 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54   structure..** T
30210 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
30220 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  es the correspon
30230 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74  ding xRename met
30240 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a  hod. The value.*
30250 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  * in register P1
30260 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68   is passed as th
30270 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74  e zName argument
30280 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20   to the xRename 
30290 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20  method..*/.case 
302a0 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20  OP_VRename: {.  
302b0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
302c0 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d  tab;.  Mem *pNam
302d0 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f  e;..  pVtab = pO
302e0 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74  p->p4.pVtab->pVt
302f0 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61  ab;.  pName = &a
30300 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
30310 61 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e 70  assert( pVtab->p
30320 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20  Module->xRename 
30330 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d  );.  assert( mem
30340 49 73 56 61 6c 69 64 28 70 4e 61 6d 65 29 20 29  IsValid(pName) )
30350 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
30360 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
30370 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
30380 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a  Op->p1, pName);.
30390 20 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65 2d    assert( pName-
303a0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72  >flags & MEM_Str
303b0 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
303c0 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49  pName->enc==SQLI
303d0 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 74 65 73  TE_UTF8 );.  tes
303e0 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e  tcase( pName->en
303f0 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42  c==SQLITE_UTF16B
30400 45 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  E );.  testcase(
30410 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c   pName->enc==SQL
30420 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20  ITE_UTF16LE );. 
30430 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
30440 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
30450 70 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54  pName, SQLITE_UT
30460 46 38 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  F8);.  if( rc==S
30470 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
30480 72 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  rc = pVtab->pMod
30490 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74  ule->xRename(pVt
304a0 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20  ab, pName->z);. 
304b0 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d     sqlite3VtabIm
304c0 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
304d0 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70  tab);.    p->exp
304e0 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  ired = 0;.  }.  
304f0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
30500 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
30510 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
30520 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70  E./* Opcode: VUp
30530 64 61 74 65 20 50 31 20 50 32 20 50 33 20 50 34  date P1 P2 P3 P4
30540 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
30550 20 64 61 74 61 3d 72 5b 50 33 40 50 32 5d 0a 2a   data=r[P3@P2].*
30560 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
30570 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
30580 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
30590 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
305a0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68  structure..** Th
305b0 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
305c0 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  s the correspond
305d0 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74 68  ing xUpdate meth
305e0 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a  od. P2 values.**
305f0 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20   are contiguous 
30600 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61  memory cells sta
30610 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70  rting at P3 to p
30620 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64 61  ass to the xUpda
30630 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f  te .** invocatio
30640 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20  n. The value in 
30650 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d  register (P3+P2-
30660 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  1) corresponds t
30670 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65  o the .** p2th e
30680 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72  lement of the ar
30690 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64 20  gv array passed 
306a0 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a  to xUpdate..**.*
306b0 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d 65  * The xUpdate me
306c0 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44  thod will do a D
306d0 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45  ELETE or an INSE
306e0 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54  RT or both..** T
306f0 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65  he argv[0] eleme
30700 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65 73  nt (which corres
30710 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20  ponds to memory 
30720 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74  cell P3).** is t
30730 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f  he rowid of a ro
30740 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66  w to delete.  If
30750 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c   argv[0] is NULL
30760 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c   then no .** del
30770 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54  etion occurs.  T
30780 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65  he argv[1] eleme
30790 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  nt is the rowid 
307a0 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72  of the new .** r
307b0 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65  ow.  This can be
307c0 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68   NULL to have th
307d0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
307e0 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a  select the new .
307f0 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73  ** rowid for its
30800 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65 71  elf.  The subseq
30810 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e  uent elements in
30820 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20 0a   the array are .
30830 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  ** the values of
30840 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
30850 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49  new row..**.** I
30860 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20  f P2==1 then no 
30870 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f 72  insert is perfor
30880 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73  med.  argv[0] is
30890 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a   the rowid of.**
308a0 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65   a row to delete
308b0 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ..**.** P1 is a 
308c0 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66  boolean flag. If
308d0 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 72   it is set to tr
308e0 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64 61  ue and the xUpda
308f0 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75  te call.** is su
30900 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74  ccessful, then t
30910 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65  he value returne
30920 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73  d by sqlite3_las
30930 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
30940 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74   .** is set to t
30950 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
30960 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f  rowid for the ro
30970 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e  w just inserted.
30980 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 74 68 65  .**.** P5 is the
30990 20 65 72 72 6f 72 20 61 63 74 69 6f 6e 73 20 28   error actions (
309a0 4f 45 5f 52 65 70 6c 61 63 65 2c 20 4f 45 5f 46  OE_Replace, OE_F
309b0 61 69 6c 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  ail, OE_Ignore, 
309c0 65 74 63 29 20 74 6f 0a 2a 2a 20 61 70 70 6c 79  etc) to.** apply
309d0 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20   in the case of 
309e0 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  a constraint fai
309f0 6c 75 72 65 20 6f 6e 20 61 6e 20 69 6e 73 65 72  lure on an inser
30a00 74 20 6f 72 20 75 70 64 61 74 65 2e 0a 2a 2f 0a  t or update..*/.
30a10 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74 65 3a  case OP_VUpdate:
30a20 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
30a30 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69  b *pVtab;.  sqli
30a40 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
30a50 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67 3b  ule;.  int nArg;
30a60 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69  .  int i;.  sqli
30a70 74 65 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a  te_int64 rowid;.
30a80 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 20    Mem **apArg;. 
30a90 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20 61 73 73   Mem *pX;..  ass
30aa0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 31 20  ert( pOp->p2==1 
30ab0 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
30ac0 35 3d 3d 4f 45 5f 46 61 69 6c 20 20 20 7c 7c 20  5==OE_Fail   || 
30ad0 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 6f 6c 6c  pOp->p5==OE_Roll
30ae0 62 61 63 6b 20 0a 20 20 20 20 20 20 20 7c 7c 20  back .       || 
30af0 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 41 62 6f 72  pOp->p5==OE_Abor
30b00 74 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45  t || pOp->p5==OE
30b10 5f 49 67 6e 6f 72 65 20 7c 7c 20 70 4f 70 2d 3e  _Ignore || pOp->
30b20 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 0a 20  p5==OE_Replace. 
30b30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
30b40 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
30b50 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70    pVtab = pOp->p
30b60 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a  4.pVtab->pVtab;.
30b70 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c    pModule = (sql
30b80 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56  ite3_module *)pV
30b90 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
30ba0 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  nArg = pOp->p2;.
30bb0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
30bc0 34 74 79 70 65 3d 3d 50 34 5f 56 54 41 42 20 29  4type==P4_VTAB )
30bd0 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
30be0 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 29  Module->xUpdate)
30bf0 20 29 7b 0a 20 20 20 20 75 38 20 76 74 61 62 4f   ){.    u8 vtabO
30c00 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 64 62 2d 3e  nConflict = db->
30c10 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a  vtabOnConflict;.
30c20 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61      apArg = p->a
30c30 70 41 72 67 3b 0a 20 20 20 20 70 58 20 3d 20 26  pArg;.    pX = &
30c40 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
30c50 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41     for(i=0; i<nA
30c60 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; i++){.      
30c70 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
30c80 69 64 28 70 58 29 20 29 3b 0a 20 20 20 20 20 20  id(pX) );.      
30c90 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
30ca0 28 70 2c 20 70 58 29 3b 0a 20 20 20 20 20 20 73  (p, pX);.      s
30cb0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f  qlite3VdbeMemSto
30cc0 72 65 54 79 70 65 28 70 58 29 3b 0a 20 20 20 20  reType(pX);.    
30cd0 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b    apArg[i] = pX;
30ce0 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20  .      pX++;.   
30cf0 20 7d 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f   }.    db->vtabO
30d00 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 70 4f 70 2d  nConflict = pOp-
30d10 3e 70 35 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d  >p5;.    rc = pM
30d20 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 28 70  odule->xUpdate(p
30d30 56 74 61 62 2c 20 6e 41 72 67 2c 20 61 70 41 72  Vtab, nArg, apAr
30d40 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20  g, &rowid);.    
30d50 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69  db->vtabOnConfli
30d60 63 74 20 3d 20 76 74 61 62 4f 6e 43 6f 6e 66 6c  ct = vtabOnConfl
30d70 69 63 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ict;.    sqlite3
30d80 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
30d90 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20  (p, pVtab);.    
30da0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
30db0 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a  K && pOp->p1 ){.
30dc0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 41        assert( nA
30dd0 72 67 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d  rg>1 && apArg[0]
30de0 20 26 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66   && (apArg[0]->f
30df0 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29  lags&MEM_Null) )
30e00 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74  ;.      db->last
30e10 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69  Rowid = lastRowi
30e20 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d  d = rowid;.    }
30e30 0a 20 20 20 20 69 66 28 20 28 72 63 26 30 78 66  .    if( (rc&0xf
30e40 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54  f)==SQLITE_CONST
30e50 52 41 49 4e 54 20 26 26 20 70 4f 70 2d 3e 70 34  RAINT && pOp->p4
30e60 2e 70 56 74 61 62 2d 3e 62 43 6f 6e 73 74 72 61  .pVtab->bConstra
30e70 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28  int ){.      if(
30e80 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e   pOp->p5==OE_Ign
30e90 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ore ){.        r
30ea0 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
30eb0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
30ec0 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69      p->errorActi
30ed0 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e 70 35 3d 3d  on = ((pOp->p5==
30ee0 4f 45 5f 52 65 70 6c 61 63 65 29 20 3f 20 4f 45  OE_Replace) ? OE
30ef0 5f 41 62 6f 72 74 20 3a 20 70 4f 70 2d 3e 70 35  _Abort : pOp->p5
30f00 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
30f10 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e 6e  else{.      p->n
30f20 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d 0a  Change++;.    }.
30f30 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
30f40 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
30f50 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
30f60 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53  E */..#ifndef  S
30f70 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
30f80 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f  _PRAGMAS./* Opco
30f90 64 65 3a 20 50 61 67 65 63 6f 75 6e 74 20 50 31  de: Pagecount P1
30fa0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
30fb0 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e  Write the curren
30fc0 74 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  t number of page
30fd0 73 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  s in database P1
30fe0 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   to memory cell 
30ff0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  P2..*/.case OP_P
31000 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20  agecount: {     
31010 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
31020 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70  rerelease */.  p
31030 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74  Out->u.i = sqlit
31040 65 33 42 74 72 65 65 4c 61 73 74 50 61 67 65 28  e3BtreeLastPage(
31050 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
31060 2e 70 42 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  .pBt);.  break;.
31070 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64  }.#endif...#ifnd
31080 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ef  SQLITE_OMIT_
31090 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a  PAGER_PRAGMAS./*
310a0 20 4f 70 63 6f 64 65 3a 20 4d 61 78 50 67 63 6e   Opcode: MaxPgcn
310b0 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
310c0 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 73 65 74 20  *.** Try to set 
310d0 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65  the maximum page
310e0 20 63 6f 75 6e 74 20 66 6f 72 20 64 61 74 61 62   count for datab
310f0 61 73 65 20 50 31 20 74 6f 20 74 68 65 20 76 61  ase P1 to the va
31100 6c 75 65 20 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f  lue in P3..** Do
31110 20 6e 6f 74 20 6c 65 74 20 74 68 65 20 6d 61 78   not let the max
31120 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20  imum page count 
31130 66 61 6c 6c 20 62 65 6c 6f 77 20 74 68 65 20 63  fall below the c
31140 75 72 72 65 6e 74 20 70 61 67 65 20 63 6f 75 6e  urrent page coun
31150 74 20 61 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20  t and.** do not 
31160 63 68 61 6e 67 65 20 74 68 65 20 6d 61 78 69 6d  change the maxim
31170 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 76 61  um page count va
31180 6c 75 65 20 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a  lue if P3==0..**
31190 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6d 61  .** Store the ma
311a0 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74  ximum page count
311b0 20 61 66 74 65 72 20 74 68 65 20 63 68 61 6e 67   after the chang
311c0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
311d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 78  ..*/.case OP_Max
311e0 50 67 63 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  Pgcnt: {        
311f0 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
31200 65 6c 65 61 73 65 20 2a 2f 0a 20 20 75 6e 73 69  elease */.  unsi
31210 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d 61 78 3b  gned int newMax;
31220 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a  .  Btree *pBt;..
31230 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
31240 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
31250 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69 66  newMax = 0;.  if
31260 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
31270 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c 69 74 65   newMax = sqlite
31280 33 42 74 72 65 65 4c 61 73 74 50 61 67 65 28 70  3BtreeLastPage(p
31290 42 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 77  Bt);.    if( new
312a0 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e 65 64 29  Max < (unsigned)
312b0 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61 78  pOp->p3 ) newMax
312c0 20 3d 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70   = (unsigned)pOp
312d0 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  ->p3;.  }.  pOut
312e0 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42  ->u.i = sqlite3B
312f0 74 72 65 65 4d 61 78 50 61 67 65 43 6f 75 6e 74  treeMaxPageCount
31300 28 70 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a 20  (pBt, newMax);. 
31310 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
31320 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  .../* Opcode: In
31330 69 74 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a  it * P2 * P4 *.*
31340 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 53 74 61  * Synopsis:  Sta
31350 72 74 20 61 74 20 50 32 0a 2a 2a 0a 2a 2a 20 50  rt at P2.**.** P
31360 72 6f 67 72 61 6d 73 20 63 6f 6e 74 61 69 6e 20  rograms contain 
31370 61 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e 63  a single instanc
31380 65 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65  e of this opcode
31390 20 61 73 20 74 68 65 20 76 65 72 79 20 66 69 72   as the very fir
313a0 73 74 0a 2a 2a 20 6f 70 63 6f 64 65 2e 0a 2a 2a  st.** opcode..**
313b0 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e 67 20 69  .** If tracing i
313c0 73 20 65 6e 61 62 6c 65 64 20 28 62 79 20 74 68  s enabled (by th
313d0 65 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28  e sqlite3_trace(
313e0 29 29 20 69 6e 74 65 72 66 61 63 65 2c 20 74 68  )) interface, th
313f0 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38 20  en.** the UTF-8 
31400 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64  string contained
31410 20 69 6e 20 50 34 20 69 73 20 65 6d 69 74 74 65   in P4 is emitte
31420 64 20 6f 6e 20 74 68 65 20 74 72 61 63 65 20 63  d on the trace c
31430 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 20 4f 72 20 69  allback..** Or i
31440 66 20 50 34 20 69 73 20 62 6c 61 6e 6b 2c 20 75  f P4 is blank, u
31450 73 65 20 74 68 65 20 73 74 72 69 6e 67 20 72 65  se the string re
31460 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
31470 33 5f 73 71 6c 28 29 2e 0a 2a 2a 0a 2a 2a 20 49  3_sql()..**.** I
31480 66 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P2 is not zero
31490 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  , jump to instru
314a0 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  ction P2..*/.cas
314b0 65 20 4f 50 5f 49 6e 69 74 3a 20 7b 20 20 20 20  e OP_Init: {    
314c0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
314d0 0a 20 20 63 68 61 72 20 2a 7a 54 72 61 63 65 3b  .  char *zTrace;
314e0 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 20 20 69  .  char *z;..  i
314f0 66 28 20 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20  f( pOp->p2 ){.  
31500 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
31510 20 31 3b 0a 20 20 7d 0a 23 69 66 6e 64 65 66 20   1;.  }.#ifndef 
31520 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
31530 45 0a 20 20 69 66 28 20 64 62 2d 3e 78 54 72 61  E.  if( db->xTra
31540 63 65 0a 20 20 20 26 26 20 21 70 2d 3e 64 6f 69  ce.   && !p->doi
31550 6e 67 52 65 72 75 6e 0a 20 20 20 26 26 20 28 7a  ngRerun.   && (z
31560 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34  Trace = (pOp->p4
31570 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a  .z ? pOp->p4.z :
31580 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20   p->zSql))!=0.  
31590 29 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74  ){.    z = sqlit
315a0 65 33 56 64 62 65 45 78 70 61 6e 64 53 71 6c 28  e3VdbeExpandSql(
315b0 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20  p, zTrace);.    
315c0 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70  db->xTrace(db->p
315d0 54 72 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20 20  TraceArg, z);.  
315e0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
315f0 64 62 2c 20 7a 29 3b 0a 20 20 7d 0a 23 69 66 64  db, z);.  }.#ifd
31600 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 46 43  ef SQLITE_USE_FC
31610 4e 54 4c 5f 54 52 41 43 45 0a 20 20 7a 54 72 61  NTL_TRACE.  zTra
31620 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20  ce = (pOp->p4.z 
31630 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d  ? pOp->p4.z : p-
31640 3e 7a 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a 54  >zSql);.  if( zT
31650 72 61 63 65 20 29 7b 0a 20 20 20 20 69 6e 74 20  race ){.    int 
31660 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  i;.    for(i=0; 
31670 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b  i<db->nDb; i++){
31680 0a 20 20 20 20 20 20 69 66 28 20 4d 41 53 4b 42  .      if( MASKB
31690 49 54 28 69 29 20 26 20 70 2d 3e 62 74 72 65 65  IT(i) & p->btree
316a0 4d 61 73 6b 29 3d 3d 30 20 29 20 63 6f 6e 74 69  Mask)==0 ) conti
316b0 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  nue;.      sqlit
316c0 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28  e3_file_control(
316d0 64 62 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a  db, db->aDb[i].z
316e0 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 46 43 4e  Name, SQLITE_FCN
316f0 54 4c 5f 54 52 41 43 45 2c 20 7a 54 72 61 63 65  TL_TRACE, zTrace
31700 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e  );.    }.  }.#en
31710 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53  dif /* SQLITE_US
31720 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 20 2a 2f  E_FCNTL_TRACE */
31730 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
31740 45 42 55 47 0a 20 20 69 66 28 20 28 64 62 2d 3e  EBUG.  if( (db->
31750 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 53  flags & SQLITE_S
31760 71 6c 54 72 61 63 65 29 21 3d 30 0a 20 20 20 26  qlTrace)!=0.   &
31770 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f 70  & (zTrace = (pOp
31780 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34  ->p4.z ? pOp->p4
31790 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d  .z : p->zSql))!=
317a0 30 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  0.  ){.    sqlit
317b0 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 22 53  e3DebugPrintf("S
317c0 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c  QL-trace: %s\n",
317d0 20 7a 54 72 61 63 65 29 3b 0a 20 20 7d 0a 23 65   zTrace);.  }.#e
317e0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44  ndif /* SQLITE_D
317f0 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 2f  EBUG */.#endif /
31800 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  * SQLITE_OMIT_TR
31810 41 43 45 20 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a  ACE */.  break;.
31820 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  }.../* Opcode: N
31830 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  oop * * * * *.**
31840 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 20  .** Do nothing. 
31850 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
31860 6e 20 69 73 20 6f 66 74 65 6e 20 75 73 65 66 75  n is often usefu
31870 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a 2a 20 64  l as a jump.** d
31880 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  estination..*/./
31890 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69 63 20 45  *.** The magic E
318a0 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20 61 72  xplain opcode ar
318b0 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74 65 64 20  e only inserted 
318c0 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d 3d 32 20  when explain==2 
318d0 28 77 68 69 63 68 0a 2a 2a 20 69 73 20 74 6f 20  (which.** is to 
318e0 73 61 79 20 77 68 65 6e 20 74 68 65 20 45 58 50  say when the EXP
318f0 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
31900 73 79 6e 74 61 78 20 69 73 20 75 73 65 64 2e 29  syntax is used.)
31910 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
31920 72 65 63 6f 72 64 73 20 69 6e 66 6f 72 6d 61 74  records informat
31930 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 6f 70 74  ion from the opt
31940 69 6d 69 7a 65 72 2e 20 20 49 74 20 69 73 20 74  imizer.  It is t
31950 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 61  he.** the same a
31960 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54 68 69 73  s a no-op.  This
31970 20 6f 70 63 6f 64 65 73 6e 65 76 65 72 20 61 70   opcodesnever ap
31980 70 65 61 72 73 20 69 6e 20 61 20 72 65 61 6c 20  pears in a real 
31990 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64  VM program..*/.d
319a0 65 66 61 75 6c 74 3a 20 7b 20 20 20 20 20 20 20  efault: {       
319b0 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 72 65     /* This is re
319c0 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64  ally OP_Noop and
319d0 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20   OP_Explain */. 
319e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
319f0 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c  code==OP_Noop ||
31a00 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
31a10 5f 45 78 70 6c 61 69 6e 20 29 3b 0a 20 20 62 72  _Explain );.  br
31a20 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a  eak;.}../*******
31a30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31a40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31a50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31a60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31a70 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 61  ******.** The ca
31a80 73 65 73 20 6f 66 20 74 68 65 20 73 77 69 74 63  ses of the switc
31a90 68 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76  h statement abov
31aa0 65 20 74 68 69 73 20 6c 69 6e 65 20 73 68 6f 75  e this line shou
31ab0 6c 64 20 61 6c 6c 20 62 65 20 69 6e 64 65 6e 74  ld all be indent
31ac0 65 64 0a 2a 2a 20 62 79 20 36 20 73 70 61 63 65  ed.** by 6 space
31ad0 73 2e 20 20 42 75 74 20 74 68 65 20 6c 65 66 74  s.  But the left
31ae0 2d 6d 6f 73 74 20 36 20 73 70 61 63 65 73 20 68  -most 6 spaces h
31af0 61 76 65 20 62 65 65 6e 20 72 65 6d 6f 76 65 64  ave been removed
31b00 20 74 6f 20 69 6d 70 72 6f 76 65 20 74 68 65 0a   to improve the.
31b10 2a 2a 20 72 65 61 64 61 62 69 6c 69 74 79 2e 20  ** readability. 
31b20 20 46 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74   From this point
31b30 20 6f 6e 20 64 6f 77 6e 2c 20 74 68 65 20 6e 6f   on down, the no
31b40 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e  rmal indentation
31b50 20 72 75 6c 65 73 20 61 72 65 0a 2a 2a 20 72 65   rules are.** re
31b60 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a  stored..********
31b70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31b80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31b90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31ba0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31bb0 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69  *****/.    }..#i
31bc0 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
31bd0 45 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 75 36  E.    {.      u6
31be0 34 20 65 6c 61 70 73 65 64 20 3d 20 73 71 6c 69  4 elapsed = sqli
31bf0 74 65 33 48 77 74 69 6d 65 28 29 20 2d 20 73 74  te3Hwtime() - st
31c00 61 72 74 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e  art;.      pOp->
31c10 63 79 63 6c 65 73 20 2b 3d 20 65 6c 61 70 73 65  cycles += elapse
31c20 64 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 6e  d;.      pOp->cn
31c30 74 2b 2b 3b 0a 23 69 66 20 30 0a 20 20 20 20 20  t++;.#if 0.     
31c40 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 6f 75     fprintf(stdou
31c50 74 2c 20 22 25 31 30 6c 6c 75 20 22 2c 20 65 6c  t, "%10llu ", el
31c60 61 70 73 65 64 29 3b 0a 20 20 20 20 20 20 20 20  apsed);.        
31c70 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
31c80 4f 70 28 73 74 64 6f 75 74 2c 20 6f 72 69 67 50  Op(stdout, origP
31c90 63 2c 20 26 61 4f 70 5b 6f 72 69 67 50 63 5d 29  c, &aOp[origPc])
31ca0 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 23  ;.#endif.    }.#
31cb0 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 54 68  endif..    /* Th
31cc0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65  e following code
31cd0 20 61 64 64 73 20 6e 6f 74 68 69 6e 67 20 74 6f   adds nothing to
31ce0 20 74 68 65 20 61 63 74 75 61 6c 20 66 75 6e 63   the actual func
31cf0 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20 2a 2a  tionality.    **
31d00 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 2e   of the program.
31d10 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 68 65 72    It is only her
31d20 65 20 66 6f 72 20 74 65 73 74 69 6e 67 20 61 6e  e for testing an
31d30 64 20 64 65 62 75 67 67 69 6e 67 2e 0a 20 20 20  d debugging..   
31d40 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74 68 65 72   ** On the other
31d50 20 68 61 6e 64 2c 20 69 74 20 64 6f 65 73 20 62   hand, it does b
31d60 75 72 6e 20 43 50 55 20 63 79 63 6c 65 73 20 65  urn CPU cycles e
31d70 76 65 72 79 20 74 69 6d 65 20 74 68 72 6f 75 67  very time throug
31d80 68 0a 20 20 20 20 2a 2a 20 74 68 65 20 65 76 61  h.    ** the eva
31d90 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f  luator loop.  So
31da0 20 77 65 20 63 61 6e 20 6c 65 61 76 65 20 69 74   we can leave it
31db0 20 6f 75 74 20 77 68 65 6e 20 4e 44 45 42 55 47   out when NDEBUG
31dc0 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20   is defined..   
31dd0 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42   */.#ifndef NDEB
31de0 55 47 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  UG.    assert( p
31df0 63 3e 3d 2d 31 20 26 26 20 70 63 3c 70 2d 3e 6e  c>=-1 && pc<p->n
31e00 4f 70 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  Op );..#ifdef SQ
31e10 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69  LITE_DEBUG.    i
31e20 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  f( db->flags & S
31e30 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
31e40 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  ){.      if( rc!
31e50 3d 30 20 29 20 70 72 69 6e 74 66 28 22 72 63 3d  =0 ) printf("rc=
31e60 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20 20  %d\n",rc);.     
31e70 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67   if( pOp->opflag
31e80 73 20 26 20 28 4f 50 46 4c 47 5f 4f 55 54 32 5f  s & (OPFLG_OUT2_
31e90 50 52 45 52 45 4c 45 41 53 45 7c 4f 50 46 4c 47  PRERELEASE|OPFLG
31ea0 5f 4f 55 54 32 29 20 29 7b 0a 20 20 20 20 20 20  _OUT2) ){.      
31eb0 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28    registerTrace(
31ec0 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70  pOp->p2, &aMem[p
31ed0 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20  Op->p2]);.      
31ee0 7d 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  }.      if( pOp-
31ef0 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
31f00 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20 20 20 20  _OUT3 ){.       
31f10 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70   registerTrace(p
31f20 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p3, &aMem[pO
31f30 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d  p->p3]);.      }
31f40 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 20 2f  .    }.#endif  /
31f50 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a  * SQLITE_DEBUG *
31f60 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20 4e 44 45  /.#endif  /* NDE
31f70 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54  BUG */.  }  /* T
31f80 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 66 6f  he end of the fo
31f90 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68 65 20 6c  r(;;) loop the l
31fa0 6f 6f 70 73 20 74 68 72 6f 75 67 68 20 6f 70 63  oops through opc
31fb0 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66  odes */..  /* If
31fc0 20 77 65 20 72 65 61 63 68 20 74 68 69 73 20 70   we reach this p
31fd0 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e 73 20 74  oint, it means t
31fe0 68 61 74 20 65 78 65 63 75 74 69 6f 6e 20 69 73  hat execution is
31ff0 20 66 69 6e 69 73 68 65 64 20 77 69 74 68 0a 20   finished with. 
32000 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f 66 20   ** an error of 
32010 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a  some kind..  */.
32020 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3a  vdbe_error_halt:
32030 0a 20 20 61 73 73 65 72 74 28 20 72 63 20 29 3b  .  assert( rc );
32040 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20  .  p->rc = rc;. 
32050 20 74 65 73 74 63 61 73 65 28 20 73 71 6c 69 74   testcase( sqlit
32060 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
32070 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 73 71 6c 69  Log!=0 );.  sqli
32080 74 65 33 5f 6c 6f 67 28 72 63 2c 20 22 73 74 61  te3_log(rc, "sta
32090 74 65 6d 65 6e 74 20 61 62 6f 72 74 73 20 61 74  tement aborts at
320a0 20 25 64 3a 20 5b 25 73 5d 20 25 73 22 2c 20 0a   %d: [%s] %s", .
320b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
320c0 20 20 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20     pc, p->zSql, 
320d0 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73  p->zErrMsg);.  s
320e0 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
320f0 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
32100 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20  ITE_IOERR_NOMEM 
32110 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ) db->mallocFail
32120 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 53  ed = 1;.  rc = S
32130 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 69  QLITE_ERROR;.  i
32140 66 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  f( resetSchemaOn
32150 46 61 75 6c 74 3e 30 20 29 7b 0a 20 20 20 20 73  Fault>0 ){.    s
32160 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63  qlite3ResetOneSc
32170 68 65 6d 61 28 64 62 2c 20 72 65 73 65 74 53 63  hema(db, resetSc
32180 68 65 6d 61 4f 6e 46 61 75 6c 74 2d 31 29 3b 0a  hemaOnFault-1);.
32190 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 69 73 20 69    }..  /* This i
321a0 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 6f  s the only way o
321b0 75 74 20 6f 66 20 74 68 69 73 20 70 72 6f 63 65  ut of this proce
321c0 64 75 72 65 2e 20 20 57 65 20 68 61 76 65 20 74  dure.  We have t
321d0 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65 20 74  o.  ** release t
321e0 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 62 74  he mutexes on bt
321f0 72 65 65 73 20 74 68 61 74 20 77 65 72 65 20 61  rees that were a
32200 63 71 75 69 72 65 64 20 61 74 20 74 68 65 0a 20  cquired at the. 
32210 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64 62 65   ** top. */.vdbe
32220 5f 72 65 74 75 72 6e 3a 0a 20 20 64 62 2d 3e 6c  _return:.  db->l
32230 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
32240 6f 77 69 64 3b 0a 20 20 74 65 73 74 63 61 73 65  owid;.  testcase
32250 28 20 6e 56 6d 53 74 65 70 3e 30 20 29 3b 0a 20  ( nVmStep>0 );. 
32260 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c   p->aCounter[SQL
32270 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 56  ITE_STMTSTATUS_V
32280 4d 5f 53 54 45 50 5d 20 2b 3d 20 28 69 6e 74 29  M_STEP] += (int)
32290 6e 56 6d 53 74 65 70 3b 0a 20 20 73 71 6c 69 74  nVmStep;.  sqlit
322a0 65 33 56 64 62 65 4c 65 61 76 65 28 70 29 3b 0a  e3VdbeLeave(p);.
322b0 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20 20    return rc;..  
322c0 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20  /* Jump to here 
322d0 69 66 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62  if a string or b
322e0 6c 6f 62 20 6c 61 72 67 65 72 20 74 68 61 6e 20  lob larger than 
322f0 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54  SQLITE_MAX_LENGT
32300 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75 6e  H.  ** is encoun
32310 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f  tered..  */.too_
32320 62 69 67 3a 0a 20 20 73 71 6c 69 74 65 33 53 65  big:.  sqlite3Se
32330 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
32340 4d 73 67 2c 20 64 62 2c 20 22 73 74 72 69 6e 67  Msg, db, "string
32350 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67   or blob too big
32360 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54  ");.  rc = SQLIT
32370 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74 6f  E_TOOBIG;.  goto
32380 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
32390 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20  ;..  /* Jump to 
323a0 68 65 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f 63  here if a malloc
323b0 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e  () fails..  */.n
323c0 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c  o_mem:.  db->mal
323d0 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20  locFailed = 1;. 
323e0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
323f0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
32400 62 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  b, "out of memor
32410 79 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  y");.  rc = SQLI
32420 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f  TE_NOMEM;.  goto
32430 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
32440 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20  ;..  /* Jump to 
32450 68 65 72 65 20 66 6f 72 20 61 6e 79 20 6f 74 68  here for any oth
32460 65 72 20 6b 69 6e 64 20 6f 66 20 66 61 74 61 6c  er kind of fatal
32470 20 65 72 72 6f 72 2e 20 20 54 68 65 20 22 72 63   error.  The "rc
32480 22 20 76 61 72 69 61 62 6c 65 0a 20 20 2a 2a 20  " variable.  ** 
32490 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68 65 20  should hold the 
324a0 65 72 72 6f 72 20 6e 75 6d 62 65 72 2e 0a 20 20  error number..  
324b0 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  */.abort_due_to_
324c0 65 72 72 6f 72 3a 0a 20 20 61 73 73 65 72 74 28  error:.  assert(
324d0 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30 20 29   p->zErrMsg==0 )
324e0 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c  ;.  if( db->mall
324f0 6f 63 46 61 69 6c 65 64 20 29 20 72 63 20 3d 20  ocFailed ) rc = 
32500 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
32510 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 49  if( rc!=SQLITE_I
32520 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20  OERR_NOMEM ){.  
32530 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
32540 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
32550 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  db, "%s", sqlite
32560 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20  3ErrStr(rc));.  
32570 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72  }.  goto vdbe_er
32580 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20  ror_halt;..  /* 
32590 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20  Jump to here if 
325a0 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  the sqlite3_inte
325b0 72 72 75 70 74 28 29 20 41 50 49 20 73 65 74 73  rrupt() API sets
325c0 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 0a 20   the interrupt. 
325d0 20 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61   ** flag..  */.a
325e0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65  bort_due_to_inte
325f0 72 72 75 70 74 3a 0a 20 20 61 73 73 65 72 74 28  rrupt:.  assert(
32600 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72   db->u1.isInterr
32610 75 70 74 65 64 20 29 3b 0a 20 20 72 63 20 3d 20  upted );.  rc = 
32620 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
32630 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a  ;.  p->rc = rc;.
32640 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
32650 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
32660 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  db, "%s", sqlite
32670 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20  3ErrStr(rc));.  
32680 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
32690 68 61 6c 74 3b 0a 7d 0a                          halt;.}.