/ Hex Artifact Content
Login

Artifact 66c3e5c49ff61aaa3e3182fb9962ceddb847b05f:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 79   like that every
0520: 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66   happens..*/.#if
0530: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
0540: 0a 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f  .# define memAbo
0550: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20  utToChange(P,M) 
0560: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62  sqlite3VdbeMemAb
0570: 6f 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29  outToChange(P,M)
0580: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
0590: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
05a0: 28 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (P,M).#endif../*
05b0: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
05c0: 67 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  g global variabl
05d0: 65 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  e is incremented
05e0: 20 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75   every time a cu
05f0: 72 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65  rsor.** moves, e
0600: 69 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f  ither by the OP_
0610: 53 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c  SeekXX, OP_Next,
0620: 20 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f   or OP_Prev opco
0630: 64 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a  des.  The test.*
0640: 2a 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  * procedures use
0650: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0660: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0670: 68 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a  hat indices are.
0680: 2a 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65  ** working corre
0690: 63 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69  ctly.  This vari
06a0: 61 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63  able has no func
06b0: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
06c0: 74 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66  to.** help verif
06d0: 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70  y the correct op
06e0: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c  eration of the l
06f0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0700: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0710: 74 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68  t sqlite3_search
0720: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0730: 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74  if../*.** When t
0740: 68 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  his global varia
0750: 62 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c  ble is positive,
0760: 20 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65   it gets decreme
0770: 6e 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65  nted once before
0780: 0a 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63  .** each instruc
0790: 74 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45  tion in the VDBE
07a0: 2e 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68  .  When it reach
07b0: 65 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e  es zero, the u1.
07c0: 69 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a  isInterrupted.**
07d0: 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71   field of the sq
07e0: 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20  lite3 structure 
07f0: 69 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20  is set in order 
0800: 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69  to simulate an i
0810: 6e 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20  nterrupt..**.** 
0820: 54 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73  This facility is
0830: 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e   used for testin
0840: 67 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e  g purposes only.
0850: 20 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75    It does not fu
0860: 6e 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20  nction.** in an 
0870: 6f 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a  ordinary build..
0880: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
0890: 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65  _TEST.int sqlite
08a0: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
08b0: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
08c0: 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c  *.** The next gl
08d0: 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73  obal variable is
08e0: 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63   incremented eac
08f0: 68 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f  h type the OP_So
0900: 72 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20  rt opcode.** is 
0910: 65 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74  executed.  The t
0920: 65 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75  est procedures u
0930: 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74  se this informat
0940: 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65  ion to make sure
0950: 20 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67   that.** sorting
0960: 20 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72   is occurring or
0970: 20 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61   not occurring a
0980: 74 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69  t appropriate ti
0990: 6d 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69  mes.   This vari
09a0: 61 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66  able.** has no f
09b0: 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68  unction other th
09c0: 61 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66  an to help verif
09d0: 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70  y the correct op
09e0: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  eration of the.*
09f0: 2a 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69  * library..*/.#i
0a00: 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
0a10: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72  .int sqlite3_sor
0a20: 74 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e  t_count = 0;.#en
0a30: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e  dif../*.** The n
0a40: 65 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  ext global varia
0a50: 62 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20  ble records the 
0a60: 73 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67  size of the larg
0a70: 65 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20  est MEM_Blob.** 
0a80: 6f 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20  or MEM_Str that 
0a90: 68 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79  has been used by
0aa0: 20 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20   a VDBE opcode. 
0ab0: 20 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64   The test proced
0ac0: 75 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73  ures.** use this
0ad0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20   information to 
0ae0: 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74  make sure that t
0af0: 68 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e  he zero-blob fun
0b00: 63 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73  ctionality.** is
0b10: 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74   working correct
0b20: 6c 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  ly.   This varia
0b30: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
0b40: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
0b50: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
0b60: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
0b70: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
0b80: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0b90: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0ba0: 20 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f   sqlite3_max_blo
0bb0: 62 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69  bsize = 0;.stati
0bc0: 63 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78  c void updateMax
0bd0: 42 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29  Blobsize(Mem *p)
0be0: 7b 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67  {.  if( (p->flag
0bf0: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
0c00: 5f 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d  _Blob))!=0 && p-
0c10: 3e 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62  >n>sqlite3_max_b
0c20: 6c 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73  lobsize ){.    s
0c30: 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73  qlite3_max_blobs
0c40: 69 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a  ize = p->n;.  }.
0c50: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
0c60: 54 68 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20  The next global 
0c70: 76 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72  variable is incr
0c80: 65 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d  emented each tim
0c90: 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f  e the OP_Found o
0ca0: 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63  pcode.** is exec
0cb0: 75 74 65 64 2e 20 54 68 69 73 20 69 73 20 75 73  uted. This is us
0cc0: 65 64 20 74 6f 20 74 65 73 74 20 77 68 65 74 68  ed to test wheth
0cd0: 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f  er or not the fo
0ce0: 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65  reign key.** ope
0cf0: 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  ration implement
0d00: 65 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73  ed using OP_FkIs
0d10: 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e  Zero is working.
0d20: 20 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a   This variable.*
0d30: 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f  * has no functio
0d40: 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20  n other than to 
0d50: 68 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20  help verify the 
0d60: 63 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f  correct operatio
0d70: 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72  n of the.** libr
0d80: 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ary..*/.#ifdef S
0d90: 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73  QLITE_TEST.int s
0da0: 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75  qlite3_found_cou
0db0: 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a  nt = 0;.#endif..
0dc0: 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67  /*.** Test a reg
0dd0: 69 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20  ister to see if 
0de0: 69 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63  it exceeds the c
0df0: 75 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62  urrent maximum b
0e00: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20  lob size..** If 
0e10: 69 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20  it does, record 
0e20: 74 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20  the new maximum 
0e30: 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69  blob size..*/.#i
0e40: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
0e50: 5f 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e  _TEST) && !defin
0e60: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ed(SQLITE_OMIT_B
0e70: 55 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64  UILTIN_TEST).# d
0e80: 65 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58  efine UPDATE_MAX
0e90: 5f 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70  _BLOBSIZE(P)  up
0ea0: 64 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28  dateMaxBlobsize(
0eb0: 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  P).#else.# defin
0ec0: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
0ed0: 42 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a  BSIZE(P).#endif.
0ee0: 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74  ./*.** Convert t
0ef0: 68 65 20 67 69 76 65 6e 20 72 65 67 69 73 74 65  he given registe
0f00: 72 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20  r into a string 
0f10: 69 66 20 69 74 20 69 73 6e 27 74 20 6f 6e 65 0a  if it isn't one.
0f20: 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52 65 74 75  ** already. Retu
0f30: 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61  rn non-zero if a
0f40: 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e   malloc() fails.
0f50: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74 72 69  .*/.#define Stri
0f60: 6e 67 69 66 79 28 50 2c 20 65 6e 63 29 20 5c 0a  ngify(P, enc) \.
0f70: 20 20 20 69 66 28 28 28 50 29 2d 3e 66 6c 61 67     if(((P)->flag
0f80: 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  s&(MEM_Str|MEM_B
0f90: 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73 71 6c 69  lob))==0 && sqli
0fa0: 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67  te3VdbeMemString
0fb0: 69 66 79 28 50 2c 65 6e 63 29 29 20 5c 0a 20 20  ify(P,enc)) \.  
0fc0: 20 20 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d     { goto no_mem
0fd0: 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70  ; }../*.** An ep
0fe0: 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67 20 76  hemeral string v
0ff0: 61 6c 75 65 20 28 73 69 67 6e 69 66 69 65 64 20  alue (signified 
1000: 62 79 20 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d  by the MEM_Ephem
1010: 20 66 6c 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a   flag) contains.
1020: 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ** a pointer to 
1030: 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  a dynamically al
1040: 6c 6f 63 61 74 65 64 20 73 74 72 69 6e 67 20 77  located string w
1050: 68 65 72 65 20 73 6f 6d 65 20 6f 74 68 65 72 20  here some other 
1060: 65 6e 74 69 74 79 0a 2a 2a 20 69 73 20 72 65 73  entity.** is res
1070: 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 61  ponsible for dea
1080: 6c 6c 6f 63 61 74 69 6e 67 20 74 68 61 74 20 73  llocating that s
1090: 74 72 69 6e 67 2e 20 20 42 65 63 61 75 73 65 20  tring.  Because 
10a0: 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  the register.** 
10b0: 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c  does not control
10c0: 20 74 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20   the string, it 
10d0: 6d 69 67 68 74 20 62 65 20 64 65 6c 65 74 65 64  might be deleted
10e0: 20 77 69 74 68 6f 75 74 20 74 68 65 20 72 65 67   without the reg
10f0: 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67  ister.** knowing
1100: 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   it..**.** This 
1110: 72 6f 75 74 69 6e 65 20 63 6f 6e 76 65 72 74 73  routine converts
1120: 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74   an ephemeral st
1130: 72 69 6e 67 20 69 6e 74 6f 20 61 20 64 79 6e 61  ring into a dyna
1140: 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  mically allocate
1150: 64 0a 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74  d.** string that
1160: 20 74 68 65 20 72 65 67 69 73 74 65 72 20 69 74   the register it
1170: 73 65 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20  self controls.  
1180: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1190: 69 74 0a 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61  it.** converts a
11a0: 6e 20 4d 45 4d 5f 45 70 68 65 6d 20 73 74 72 69  n MEM_Ephem stri
11b0: 6e 67 20 69 6e 74 6f 20 61 6e 20 4d 45 4d 5f 44  ng into an MEM_D
11c0: 79 6e 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64  yn string..*/.#d
11d0: 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61  efine Deephemera
11e0: 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28  lize(P) \.   if(
11f0: 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d   ((P)->flags&MEM
1200: 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20  _Ephem)!=0 \.   
1210: 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64      && sqlite3Vd
1220: 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62  beMemMakeWriteab
1230: 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f  le(P) ){ goto no
1240: 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72  _mem;}../* Retur
1250: 6e 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75  n true if the cu
1260: 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20  rsor was opened 
1270: 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65  using the OP_Ope
1280: 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20  nSorter opcode. 
1290: 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72  */.#define isSor
12a0: 74 65 72 28 78 29 20 28 28 78 29 2d 3e 70 53 6f  ter(x) ((x)->pSo
12b0: 72 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  rter!=0)../*.** 
12c0: 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72  Allocate VdbeCur
12d0: 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e  sor number iCur.
12e0: 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74    Return a point
12f0: 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72  er to it.  Retur
1300: 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20  n NULL.** if we 
1310: 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  run out of memor
1320: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62  y..*/.static Vdb
1330: 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74  eCursor *allocat
1340: 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20  eCursor(.  Vdbe 
1350: 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  *p,             
1360: 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20   /* The virtual 
1370: 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74  machine */.  int
1380: 20 69 43 75 72 2c 20 20 20 20 20 20 20 20 20 20   iCur,          
1390: 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74     /* Index of t
13a0: 68 65 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f  he new VdbeCurso
13b0: 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c  r */.  int nFiel
13c0: 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d,           /* 
13d0: 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  Number of fields
13e0: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
13f0: 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
1400: 69 44 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  iDb,            
1410: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 74 68    /* Database th
1420: 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73  e cursor belongs
1430: 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20   to, or -1 */.  
1440: 69 6e 74 20 69 73 42 74 72 65 65 43 75 72 73 6f  int isBtreeCurso
1450: 72 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f  r     /* True fo
1460: 72 20 42 2d 54 72 65 65 2e 20 20 46 61 6c 73 65  r B-Tree.  False
1470: 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61 62 6c   for pseudo-tabl
1480: 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a 29 7b 0a  e or vtab */.){.
1490: 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6d 65    /* Find the me
14a0: 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 77  mory cell that w
14b0: 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20 73  ill be used to s
14c0: 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20 6f 66  tore the blob of
14d0: 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72 65 71   memory.  ** req
14e0: 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 56  uired for this V
14f0: 64 62 65 43 75 72 73 6f 72 20 73 74 72 75 63 74  dbeCursor struct
1500: 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e 76 65  ure. It is conve
1510: 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61 20 0a  nient to use a .
1520: 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f 72 79    ** vdbe memory
1530: 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67 65 20   cell to manage 
1540: 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  the memory alloc
1550: 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64 20 66  ation required f
1560: 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65 43 75  or a.  ** VdbeCu
1570: 72 73 6f 72 20 73 74 72 75 63 74 75 72 65 20 66  rsor structure f
1580: 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  or the following
1590: 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a 0a 20   reasons:.  **. 
15a0: 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69 6d 65   **   * Sometime
15b0: 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 73  s cursor numbers
15c0: 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 61 20   are used for a 
15d0: 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66 65 72  couple of differ
15e0: 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70 75 72  ent.  **     pur
15f0: 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62 65 20  poses in a vdbe 
1600: 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64 69 66  program. The dif
1610: 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69 67 68  ferent uses migh
1620: 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a 20 20  t require.  **  
1630: 20 20 20 64 69 66 66 65 72 65 6e 74 20 73 69 7a     different siz
1640: 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 20  ed allocations. 
1650: 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70 72 6f  Memory cells pro
1660: 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a 20 20  vide growable.  
1670: 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74 69 6f  **     allocatio
1680: 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  ns..  **.  **   
1690: 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45 4e 41  * When using ENA
16a0: 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47  BLE_MEMORY_MANAG
16b0: 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20 63 65  EMENT, memory ce
16c0: 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e 0a 20  ll buffers can. 
16d0: 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65 65 64   **     be freed
16e0: 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68 65 20   lazily via the 
16f0: 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f  sqlite3_release_
1700: 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20 54 68  memory() API. Th
1710: 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69 6e 69  is.  **     mini
1720: 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62 65 72  mizes the number
1730: 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c 6c 73   of malloc calls
1740: 20 6d 61 64 65 20 62 79 20 74 68 65 20 73 79 73   made by the sys
1750: 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4d  tem..  **.  ** M
1760: 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f 72 20  emory cells for 
1770: 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 6c 6f  cursors are allo
1780: 63 61 74 65 64 20 61 74 20 74 68 65 20 74 6f 70  cated at the top
1790: 20 6f 66 20 74 68 65 20 61 64 64 72 65 73 73 0a   of the address.
17a0: 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65 6d 6f    ** space. Memo
17b0: 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d  ry cell (p->nMem
17c0: 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  ) corresponds to
17d0: 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61 63 65   cursor 0. Space
17e0: 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73 6f 72   for.  ** cursor
17f0: 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20 62 79   1 is managed by
1800: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d   memory cell (p-
1810: 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e 0a 20  >nMem-1), etc.. 
1820: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20   */.  Mem *pMem 
1830: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d  = &p->aMem[p->nM
1840: 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69 6e 74  em-iCur];..  int
1850: 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43 75   nByte;.  VdbeCu
1860: 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a 20  rsor *pCx = 0;. 
1870: 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20 20   nByte = .      
1880: 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64  ROUND8(sizeof(Vd
1890: 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32 2a 73  beCursor)) + 2*s
18a0: 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65 6c  izeof(u32)*nFiel
18b0: 64 20 2b 20 0a 20 20 20 20 20 20 28 69 73 42 74  d + .      (isBt
18c0: 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69 74 65  reeCursor?sqlite
18d0: 33 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a 65  3BtreeCursorSize
18e0: 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65 72 74  ():0);..  assert
18f0: 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f  ( iCur<p->nCurso
1900: 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70  r );.  if( p->ap
1910: 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20 20  Csr[iCur] ){.   
1920: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1930: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
1940: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
1950: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
1960: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
1970: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
1980: 64 62 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c  dbeMemGrow(pMem,
1990: 20 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20   nByte, 0) ){.  
19a0: 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d    p->apCsr[iCur]
19b0: 20 3d 20 70 43 78 20 3d 20 28 56 64 62 65 43 75   = pCx = (VdbeCu
19c0: 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20  rsor*)pMem->z;. 
19d0: 20 20 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30     memset(pCx, 0
19e0: 2c 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  , sizeof(VdbeCur
19f0: 73 6f 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e  sor));.    pCx->
1a00: 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 70  iDb = iDb;.    p
1a10: 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46 69  Cx->nField = nFi
1a20: 65 6c 64 3b 0a 20 20 20 20 69 66 28 20 69 73 42  eld;.    if( isB
1a30: 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a 20 20  treeCursor ){.  
1a40: 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73 6f 72      pCx->pCursor
1a50: 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a 20   = (BtCursor*). 
1a60: 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d 3e           &pMem->
1a70: 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28  z[ROUND8(sizeof(
1a80: 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a 73  VdbeCursor))+2*s
1a90: 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65 6c  izeof(u32)*nFiel
1aa0: 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  d];.      sqlite
1ab0: 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72 6f  3BtreeCursorZero
1ac0: 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  (pCx->pCursor);.
1ad0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
1ae0: 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  rn pCx;.}../*.**
1af0: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
1b00: 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e  a value into a n
1b10: 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e 74  umeric represent
1b20: 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e 0a  ation if we can.
1b30: 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75 74  ** do so without
1b40: 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
1b50: 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20  tion.  In other 
1b60: 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73 74  words, if the st
1b70: 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69  ring.** looks li
1b80: 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f 6e  ke a number, con
1b90: 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20 6e  vert it into a n
1ba0: 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64 6f  umber.  If it do
1bb0: 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c  es not.** look l
1bc0: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c 65  ike a number, le
1bd0: 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2f  ave it alone..*/
1be0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70  .static void app
1bf0: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
1c00: 79 28 4d 65 6d 20 2a 70 52 65 63 29 7b 0a 20 20  y(Mem *pRec){.  
1c10: 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73  if( (pRec->flags
1c20: 20 26 20 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d   & (MEM_Real|MEM
1c30: 5f 49 6e 74 29 29 3d 3d 30 20 29 7b 0a 20 20 20  _Int))==0 ){.   
1c40: 20 64 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a   double rValue;.
1c50: 20 20 20 20 69 36 34 20 69 56 61 6c 75 65 3b 0a      i64 iValue;.
1c60: 20 20 20 20 75 38 20 65 6e 63 20 3d 20 70 52 65      u8 enc = pRe
1c70: 63 2d 3e 65 6e 63 3b 0a 20 20 20 20 69 66 28 20  c->enc;.    if( 
1c80: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pRec->flags&MEM
1c90: 5f 53 74 72 29 3d 3d 30 20 29 20 72 65 74 75 72  _Str)==0 ) retur
1ca0: 6e 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  n;.    if( sqlit
1cb0: 65 33 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c 20  e3AtoF(pRec->z, 
1cc0: 26 72 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e  &rValue, pRec->n
1cd0: 2c 20 65 6e 63 29 3d 3d 30 20 29 20 72 65 74 75  , enc)==0 ) retu
1ce0: 72 6e 3b 0a 20 20 20 20 69 66 28 20 30 3d 3d 73  rn;.    if( 0==s
1cf0: 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 52 65  qlite3Atoi64(pRe
1d00: 63 2d 3e 7a 2c 20 26 69 56 61 6c 75 65 2c 20 70  c->z, &iValue, p
1d10: 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a  Rec->n, enc) ){.
1d20: 20 20 20 20 20 20 70 52 65 63 2d 3e 75 2e 69 20        pRec->u.i 
1d30: 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20 20 20 20  = iValue;.      
1d40: 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pRec->flags |= M
1d50: 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 65 6c 73  EM_Int;.    }els
1d60: 65 7b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 72  e{.      pRec->r
1d70: 20 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 20   = rValue;.     
1d80: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
1d90: 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20 7d 0a  MEM_Real;.    }.
1da0: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f    }.}../*.** Pro
1db0: 63 65 73 73 69 6e 67 20 69 73 20 64 65 74 65 72  cessing is deter
1dc0: 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66 66 69  mine by the affi
1dd0: 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72 3a 0a  nity parameter:.
1de0: 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  **.** SQLITE_AFF
1df0: 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c  _INTEGER:.** SQL
1e00: 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a  ITE_AFF_REAL:.**
1e10: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45   SQLITE_AFF_NUME
1e20: 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74  RIC:.**    Try t
1e30: 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63 20 74  o convert pRec t
1e40: 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70  o an integer rep
1e50: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61  resentation or a
1e60: 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67   .**    floating
1e70: 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65 6e 74  -point represent
1e80: 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65  ation if an inte
1e90: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
1ea0: 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20  on.**    is not 
1eb0: 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20  possible.  Note 
1ec0: 74 68 61 74 20 74 68 65 20 69 6e 74 65 67 65 72  that the integer
1ed0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
1ee0: 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73 20  is.**    always 
1ef0: 70 72 65 66 65 72 72 65 64 2c 20 65 76 65 6e 20  preferred, even 
1f00: 69 66 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  if the affinity 
1f10: 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75 73 65  is REAL, because
1f20: 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65 67 65  .**    an intege
1f30: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
1f40: 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65 20 65   is more space e
1f50: 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b  fficient on disk
1f60: 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  ..**.** SQLITE_A
1f70: 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43  FF_TEXT:.**    C
1f80: 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20 61  onvert pRec to a
1f90: 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74 61   text representa
1fa0: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49  tion..**.** SQLI
1fb0: 54 45 5f 41 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a 20  TE_AFF_NONE:.** 
1fc0: 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20     No-op.  pRec 
1fd0: 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f  is unchanged..*/
1fe0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70  .static void app
1ff0: 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 4d 65  lyAffinity(.  Me
2000: 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20 20 20  m *pRec,        
2010: 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65 20 74    /* The value t
2020: 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69 74 79  o apply affinity
2030: 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61 66   to */.  char af
2040: 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a 20  finity,      /* 
2050: 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20  The affinity to 
2060: 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20  be applied */.  
2070: 75 38 20 65 6e 63 20 20 20 20 20 20 20 20 20 20  u8 enc          
2080: 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20      /* Use this 
2090: 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f  text encoding */
20a0: 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69 6e 69  .){.  if( affini
20b0: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54  ty==SQLITE_AFF_T
20c0: 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e  EXT ){.    /* On
20d0: 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65 20 63  ly attempt the c
20e0: 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54 45 58  onversion to TEX
20f0: 54 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  T if there is an
2100: 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61 6c   integer or real
2110: 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e  .    ** represen
2120: 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64  tation (blob and
2130: 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74   NULL do not get
2140: 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75 74 20   converted) but 
2150: 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a  no string.    **
2160: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2170: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
2180: 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73 26  0==(pRec->flags&
2190: 4d 45 4d 5f 53 74 72 29 20 26 26 20 28 70 52 65  MEM_Str) && (pRe
21a0: 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65  c->flags&(MEM_Re
21b0: 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a  al|MEM_Int)) ){.
21c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
21d0: 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70 52  eMemStringify(pR
21e0: 65 63 2c 20 65 6e 63 29 3b 0a 20 20 20 20 7d 0a  ec, enc);.    }.
21f0: 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20      pRec->flags 
2200: 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45  &= ~(MEM_Real|ME
2210: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 20  M_Int);.  }else 
2220: 69 66 28 20 61 66 66 69 6e 69 74 79 21 3d 53 51  if( affinity!=SQ
2230: 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 29 7b  LITE_AFF_NONE ){
2240: 0a 20 20 20 20 61 73 73 65 72 74 28 20 61 66 66  .    assert( aff
2250: 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46  inity==SQLITE_AF
2260: 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61 66 66  F_INTEGER || aff
2270: 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46  inity==SQLITE_AF
2280: 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20 20 20  F_REAL.         
2290: 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d      || affinity=
22a0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45  =SQLITE_AFF_NUME
22b0: 52 49 43 20 29 3b 0a 20 20 20 20 61 70 70 6c 79  RIC );.    apply
22c0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
22d0: 70 52 65 63 29 3b 0a 20 20 20 20 69 66 28 20 70  pRec);.    if( p
22e0: 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
22f0: 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 20 20 73  _Real ){.      s
2300: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65  qlite3VdbeIntege
2310: 72 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b  rAffinity(pRec);
2320: 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a  .    }.  }.}../*
2330: 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65  .** Try to conve
2340: 72 74 20 74 68 65 20 74 79 70 65 20 6f 66 20 61  rt the type of a
2350: 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65   function argume
2360: 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74 20 63  nt or a result c
2370: 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20  olumn.** into a 
2380: 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e  numeric represen
2390: 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65 69 74  tation.  Use eit
23a0: 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72 20 52  her INTEGER or R
23b0: 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a 2a 2a  EAL whichever.**
23c0: 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65 2e   is appropriate.
23d0: 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68    But only do th
23e0: 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20  e conversion if 
23f0: 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 77  it is possible w
2400: 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f  ithout.** loss o
2410: 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e  f information an
2420: 64 20 72 65 74 75 72 6e 20 74 68 65 20 72 65 76  d return the rev
2430: 69 73 65 64 20 74 79 70 65 20 6f 66 20 74 68 65  ised type of the
2440: 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e   argument..*/.in
2450: 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  t sqlite3_value_
2460: 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71 6c  numeric_type(sql
2470: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
2480: 29 7b 0a 20 20 69 6e 74 20 65 54 79 70 65 20 3d  ){.  int eType =
2490: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
24a0: 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 69 66 28  ype(pVal);.  if(
24b0: 20 65 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54   eType==SQLITE_T
24c0: 45 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a  EXT ){.    Mem *
24d0: 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61  pMem = (Mem*)pVa
24e0: 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d 65  l;.    applyNume
24f0: 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65 6d  ricAffinity(pMem
2500: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
2510: 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70  beMemStoreType(p
2520: 4d 65 6d 29 3b 0a 20 20 20 20 65 54 79 70 65 20  Mem);.    eType 
2530: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
2540: 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a  type(pVal);.  }.
2550: 20 20 72 65 74 75 72 6e 20 65 54 79 70 65 3b 0a    return eType;.
2560: 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65  }../*.** Exporte
2570: 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70 70  d version of app
2580: 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54 68  lyAffinity(). Th
2590: 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20  is one works on 
25a0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
25b0: 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74 65  .** not the inte
25c0: 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a  rnal Mem* type..
25d0: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
25e0: 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74  alueApplyAffinit
25f0: 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  y(.  sqlite3_val
2600: 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20  ue *pVal, .  u8 
2610: 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38 20  affinity, .  u8 
2620: 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66  enc.){.  applyAf
2630: 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70 56  finity((Mem *)pV
2640: 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e  al, affinity, en
2650: 63 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51  c);.}..#ifdef SQ
2660: 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
2670: 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73 74   Write a nice st
2680: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
2690: 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  ion of the conte
26a0: 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d  nts of cell pMem
26b0: 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72 20  .** into buffer 
26c0: 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75  zBuf, length nBu
26d0: 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  f..*/.void sqlit
26e0: 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50  e3VdbeMemPrettyP
26f0: 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20  rint(Mem *pMem, 
2700: 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63  char *zBuf){.  c
2710: 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66  har *zCsr = zBuf
2720: 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d  ;.  int f = pMem
2730: 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74  ->flags;..  stat
2740: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63  ic const char *c
2750: 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20  onst encnames[] 
2760: 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22 2c  = {"(X)", "(8)",
2770: 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36 42   "(16LE)", "(16B
2780: 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d  E)"};..  if( f&M
2790: 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69  EM_Blob ){.    i
27a0: 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20 63  nt i;.    char c
27b0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
27c0: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 63  M_Dyn ){.      c
27d0: 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73   = 'z';.      as
27e0: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
27f0: 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d  Static|MEM_Ephem
2800: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
2810: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53  se if( f & MEM_S
2820: 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 63  tatic ){.      c
2830: 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73   = 't';.      as
2840: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
2850: 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  Dyn|MEM_Ephem))=
2860: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
2870: 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65  if( f & MEM_Ephe
2880: 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  m ){.      c = '
2890: 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  e';.      assert
28a0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
28b0: 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20  ic|MEM_Dyn))==0 
28c0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
28d0: 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20 20      c = 's';.   
28e0: 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   }..    sqlite3_
28f0: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
2900: 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20 20  sr, "%c", c);.  
2910: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
2920: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
2930: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
2940: 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c  rintf(100, zCsr,
2950: 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29   "%d[", pMem->n)
2960: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
2970: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
2980: 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  sr);.    for(i=0
2990: 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d  ; i<16 && i<pMem
29a0: 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ->n; i++){.     
29b0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
29c0: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 30  f(100, zCsr, "%0
29d0: 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d  2X", ((int)pMem-
29e0: 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b 0a  >z[i] & 0xFF));.
29f0: 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71        zCsr += sq
2a00: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
2a10: 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66  sr);.    }.    f
2a20: 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20  or(i=0; i<16 && 
2a30: 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b  i<pMem->n; i++){
2a40: 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d 20  .      char z = 
2a50: 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20  pMem->z[i];.    
2a60: 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e    if( z<32 || z>
2a70: 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20  126 ) *zCsr++ = 
2a80: 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65 20  '.';.      else 
2a90: 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20  *zCsr++ = z;.   
2aa0: 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   }..    sqlite3_
2ab0: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
2ac0: 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e 61  sr, "]%s", encna
2ad0: 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b  mes[pMem->enc]);
2ae0: 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c  .    zCsr += sql
2af0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
2b00: 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20  r);.    if( f & 
2b10: 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
2b20: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
2b30: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25  tf(100, zCsr,"+%
2b40: 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72  dz",pMem->u.nZer
2b50: 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b  o);.      zCsr +
2b60: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
2b70: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20  0(zCsr);.    }. 
2b80: 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b     *zCsr = '\0';
2b90: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26  .  }else if( f &
2ba0: 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20   MEM_Str ){.    
2bb0: 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42  int j, k;.    zB
2bc0: 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20  uf[0] = ' ';.   
2bd0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e   if( f & MEM_Dyn
2be0: 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31   ){.      zBuf[1
2bf0: 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  ] = 'z';.      a
2c00: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
2c10: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
2c20: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
2c30: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
2c40: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
2c50: 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20  zBuf[1] = 't';. 
2c60: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
2c70: 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45  & (MEM_Dyn|MEM_E
2c80: 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20  phem))==0 );.   
2c90: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
2ca0: 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20  EM_Ephem ){.    
2cb0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b    zBuf[1] = 'e';
2cc0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
2cd0: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
2ce0: 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a  MEM_Dyn))==0 );.
2cf0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2d00: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a   zBuf[1] = 's';.
2d10: 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b      }.    k = 2;
2d20: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
2d30: 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66  rintf(100, &zBuf
2d40: 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d  [k], "%d", pMem-
2d50: 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71  >n);.    k += sq
2d60: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a  lite3Strlen30(&z
2d70: 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75  Buf[k]);.    zBu
2d80: 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20  f[k++] = '[';.  
2d90: 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20    for(j=0; j<15 
2da0: 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b  && j<pMem->n; j+
2db0: 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20 3d  +){.      u8 c =
2dc0: 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20   pMem->z[j];.   
2dd0: 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26     if( c>=0x20 &
2de0: 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20 20  & c<0x7f ){.    
2df0: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
2e00: 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  c;.      }else{.
2e10: 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b          zBuf[k++
2e20: 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d  ] = '.';.      }
2e30: 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b  .    }.    zBuf[
2e40: 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20  k++] = ']';.    
2e50: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
2e60: 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65  (100,&zBuf[k], e
2e70: 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e  ncnames[pMem->en
2e80: 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71  c]);.    k += sq
2e90: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a  lite3Strlen30(&z
2ea0: 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75  Buf[k]);.    zBu
2eb0: 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a  f[k++] = 0;.  }.
2ec0: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
2ed0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a   SQLITE_DEBUG./*
2ee0: 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76 61  .** Print the va
2ef0: 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74 65  lue of a registe
2f00: 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70 75  r for tracing pu
2f10: 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69  rposes:.*/.stati
2f20: 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65 50  c void memTraceP
2f30: 72 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20 20  rint(Mem *p){.  
2f40: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
2f50: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b 0a  EM_Undefined ){.
2f60: 20 20 20 20 70 72 69 6e 74 66 28 22 20 75 6e 64      printf(" und
2f70: 65 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c 73  efined");.  }els
2f80: 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26  e if( p->flags &
2f90: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
2fa0: 20 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22 29   printf(" NULL")
2fb0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70  ;.  }else if( (p
2fc0: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
2fd0: 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d  nt|MEM_Str))==(M
2fe0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20  EM_Int|MEM_Str) 
2ff0: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
3000: 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69  si:%lld", p->u.i
3010: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  );.  }else if( p
3020: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
3030: 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  t ){.    printf(
3040: 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e  " i:%lld", p->u.
3050: 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  i);.#ifndef SQLI
3060: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
3070: 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69  _POINT.  }else i
3080: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3090: 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70 72  M_Real ){.    pr
30a0: 69 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70 2d  intf(" r:%g", p-
30b0: 3e 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65  >r);.#endif.  }e
30c0: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
30d0: 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b   & MEM_RowSet ){
30e0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 28 72  .    printf(" (r
30f0: 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73  owset)");.  }els
3100: 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66  e{.    char zBuf
3110: 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74  [200];.    sqlit
3120: 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50  e3VdbeMemPrettyP
3130: 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20  rint(p, zBuf);. 
3140: 20 20 20 70 72 69 6e 74 66 28 22 20 25 73 22 2c     printf(" %s",
3150: 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73 74   zBuf);.  }.}.st
3160: 61 74 69 63 20 76 6f 69 64 20 72 65 67 69 73 74  atic void regist
3170: 65 72 54 72 61 63 65 28 69 6e 74 20 69 52 65 67  erTrace(int iReg
3180: 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 70 72 69  , Mem *p){.  pri
3190: 6e 74 66 28 22 52 45 47 5b 25 64 5d 20 3d 20 22  ntf("REG[%d] = "
31a0: 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72  , iReg);.  memTr
31b0: 61 63 65 50 72 69 6e 74 28 70 29 3b 0a 20 20 70  acePrint(p);.  p
31c0: 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 7d 0a 23  rintf("\n");.}.#
31d0: 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
31e0: 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65  LITE_DEBUG.#  de
31f0: 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52  fine REGISTER_TR
3200: 41 43 45 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e  ACE(R,M) if(db->
3210: 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 56 64 62  flags&SQLITE_Vdb
3220: 65 54 72 61 63 65 29 72 65 67 69 73 74 65 72 54  eTrace)registerT
3230: 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a  race(R,M).#else.
3240: 23 20 20 64 65 66 69 6e 65 20 52 45 47 49 53 54  #  define REGIST
3250: 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23 65  ER_TRACE(R,M).#e
3260: 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66 20 56 44  ndif...#ifdef VD
3270: 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a  BE_PROFILE../* .
3280: 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74  ** hwtime.h cont
3290: 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73 65  ains inline asse
32a0: 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f 72 20 69  mbler code for i
32b0: 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20  mplementing .** 
32c0: 68 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65  high-performance
32d0: 20 74 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73   timing routines
32e0: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68  ..*/.#include "h
32f0: 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66  wtime.h"..#endif
3300: 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47  ..#ifndef NDEBUG
3310: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63  ./*.** This func
3320: 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c  tion is only cal
3330: 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  led from within 
3340: 61 6e 20 61 73 73 65 72 74 28 29 20 65 78 70 72  an assert() expr
3350: 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68  ession. It.** ch
3360: 65 63 6b 73 20 74 68 61 74 20 74 68 65 20 73 71  ecks that the sq
3370: 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69  lite3.nTransacti
3380: 6f 6e 20 76 61 72 69 61 62 6c 65 20 69 73 20 63  on variable is c
3390: 6f 72 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a  orrectly set to.
33a0: 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** the number of
33b0: 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e   non-transaction
33c0: 20 73 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72   savepoints curr
33d0: 65 6e 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a  ently in the .**
33e0: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61   linked list sta
33f0: 72 74 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33  rting at sqlite3
3400: 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20  .pSavepoint..** 
3410: 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a  .** Usage:.**.**
3420: 20 20 20 20 20 61 73 73 65 72 74 28 20 63 68 65       assert( che
3430: 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
3440: 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69  (db) );.*/.stati
3450: 63 20 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70  c int checkSavep
3460: 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65  ointCount(sqlite
3470: 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20  3 *db){.  int n 
3480: 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  = 0;.  Savepoint
3490: 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d   *p;.  for(p=db-
34a0: 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20  >pSavepoint; p; 
34b0: 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b  p=p->pNext) n++;
34c0: 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64  .  assert( n==(d
34d0: 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20  b->nSavepoint + 
34e0: 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
34f0: 6e 53 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20  nSavepoint) );. 
3500: 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e   return 1;.}.#en
3510: 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63  dif.../*.** Exec
3520: 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61  ute as much of a
3530: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73   VDBE program as
3540: 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73   we can..** This
3550: 20 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66 20   is the core of 
3560: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20  sqlite3_step(). 
3570: 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33   .*/.int sqlite3
3580: 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65  VdbeExec(.  Vdbe
3590: 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20   *p             
35a0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44         /* The VD
35b0: 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 70  BE */.){.  int p
35c0: 63 3d 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  c=0;            
35d0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f        /* The pro
35e0: 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  gram counter */.
35f0: 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e 61    Op *aOp = p->a
3600: 4f 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  Op;          /* 
3610: 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20 2a  Copy of p->aOp *
3620: 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20 20  /.  Op *pOp;    
3630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3640: 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61 74  * Current operat
3650: 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20  ion */.  int rc 
3660: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20  = SQLITE_OK;    
3670: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
3680: 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69  return */.  sqli
3690: 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b  te3 *db = p->db;
36a0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
36b0: 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72  tabase */.  u8 r
36c0: 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
36d0: 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20  t = 0; /* Reset 
36e0: 73 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20  schema after an 
36f0: 65 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69 76  error if positiv
3700: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69  e */.  u8 encodi
3710: 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20 20  ng = ENC(db);   
3720: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
3730: 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  e encoding */.  
3740: 69 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30  int iCompare = 0
3750: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
3760: 73 75 6c 74 20 6f 66 20 6c 61 73 74 20 4f 50 5f  sult of last OP_
3770: 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 69 6f  Compare operatio
3780: 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  n */.  unsigned 
3790: 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20 20 20 20  nVmStep = 0;    
37a0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76    /* Number of v
37b0: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 73  irtual machine s
37c0: 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20  teps */.#ifndef 
37d0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
37e0: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
37f0: 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65  unsigned nProgre
3800: 73 73 4c 69 6d 69 74 20 3d 20 30 3b 2f 2a 20 49  ssLimit = 0;/* I
3810: 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65 73 73 28  nvoke xProgress(
3820: 29 20 77 68 65 6e 20 6e 56 6d 53 74 65 70 20 72  ) when nVmStep r
3830: 65 61 63 68 65 73 20 74 68 69 73 20 2a 2f 0a 23  eaches this */.#
3840: 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d 65  endif.  Mem *aMe
3850: 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20 20  m = p->aMem;    
3860: 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d     /* Copy of p-
3870: 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a  >aMem */.  Mem *
3880: 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20 20  pIn1 = 0;       
3890: 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e 70        /* 1st inp
38a0: 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ut operand */.  
38b0: 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20  Mem *pIn2 = 0;  
38c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 6e             /* 2n
38d0: 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20  d input operand 
38e0: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d  */.  Mem *pIn3 =
38f0: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
3900: 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70 65  /* 3rd input ope
3910: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
3920: 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20  Out = 0;        
3930: 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f       /* Output o
3940: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  perand */.  int 
3950: 2a 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 20 20  *aPermute = 0;  
3960: 20 20 20 20 20 20 20 2f 2a 20 50 65 72 6d 75 74         /* Permut
3970: 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73  ation of columns
3980: 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65 20   for OP_Compare 
3990: 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77  */.  i64 lastRow
39a0: 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77  id = db->lastRow
39b0: 69 64 3b 20 20 2f 2a 20 53 61 76 65 64 20 76 61  id;  /* Saved va
39c0: 6c 75 65 20 6f 66 20 74 68 65 20 6c 61 73 74 20  lue of the last 
39d0: 69 6e 73 65 72 74 20 52 4f 57 49 44 20 2a 2f 0a  insert ROWID */.
39e0: 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46  #ifdef VDBE_PROF
39f0: 49 4c 45 0a 20 20 75 36 34 20 73 74 61 72 74 3b  ILE.  u64 start;
3a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a10: 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f   /* CPU clock co
3a20: 75 6e 74 20 61 74 20 73 74 61 72 74 20 6f 66 20  unt at start of 
3a30: 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20  opcode */.  int 
3a40: 6f 72 69 67 50 63 3b 20 20 20 20 20 20 20 20 20  origPc;         
3a50: 20 20 20 20 20 20 20 2f 2a 20 50 72 6f 67 72 61         /* Progra
3a60: 6d 20 63 6f 75 6e 74 65 72 20 61 74 20 73 74 61  m counter at sta
3a70: 72 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a  rt of opcode */.
3a80: 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e  #endif.  /*** IN
3a90: 53 45 52 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e  SERT STACK UNION
3aa0: 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73   HERE ***/..  as
3ab0: 73 65 72 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d  sert( p->magic==
3ac0: 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29  VDBE_MAGIC_RUN )
3ad0: 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74  ;  /* sqlite3_st
3ae0: 65 70 28 29 20 76 65 72 69 66 69 65 73 20 74 68  ep() verifies th
3af0: 69 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  is */.  sqlite3V
3b00: 64 62 65 45 6e 74 65 72 28 70 29 3b 0a 20 20 69  dbeEnter(p);.  i
3b10: 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  f( p->rc==SQLITE
3b20: 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a  _NOMEM ){.    /*
3b30: 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 69 66   This happens if
3b40: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69   a malloc() insi
3b50: 64 65 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c  de a call to sql
3b60: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
3b70: 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c  () or.    ** sql
3b80: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
3b90: 31 36 28 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f  16() failed.  */
3ba0: 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
3bb0: 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
3bc0: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p->rc==SQLITE_OK
3bd0: 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54   || p->rc==SQLIT
3be0: 45 5f 42 55 53 59 20 29 3b 0a 20 20 61 73 73 65  E_BUSY );.  asse
3bf0: 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
3c00: 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21   || p->readOnly!
3c10: 3d 30 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20  =0 );.  p->rc = 
3c20: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70 2d 3e  SQLITE_OK;.  p->
3c30: 69 43 75 72 72 65 6e 74 54 69 6d 65 20 3d 20 30  iCurrentTime = 0
3c40: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65  ;.  assert( p->e
3c50: 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70  xplain==0 );.  p
3c60: 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30  ->pResultSet = 0
3c70: 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64  ;.  db->busyHand
3c80: 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20  ler.nBusy = 0;. 
3c90: 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e   if( db->u1.isIn
3ca0: 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f  terrupted ) goto
3cb0: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e   abort_due_to_in
3cc0: 74 65 72 72 75 70 74 3b 0a 20 20 73 71 6c 69 74  terrupt;.  sqlit
3cd0: 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
3ce0: 28 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  (p);.#ifndef SQL
3cf0: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
3d00: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28  S_CALLBACK.  if(
3d10: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 29   db->xProgress )
3d20: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 30 20  {.    assert( 0 
3d30: 3c 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  < db->nProgressO
3d40: 70 73 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72  ps );.    nProgr
3d50: 65 73 73 4c 69 6d 69 74 20 3d 20 28 75 6e 73 69  essLimit = (unsi
3d60: 67 6e 65 64 29 70 2d 3e 61 43 6f 75 6e 74 65 72  gned)p->aCounter
3d70: 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
3d80: 55 53 5f 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20  US_VM_STEP];.   
3d90: 20 69 66 28 20 6e 50 72 6f 67 72 65 73 73 4c 69   if( nProgressLi
3da0: 6d 69 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  mit==0 ){.      
3db0: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d  nProgressLimit =
3dc0: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
3dd0: 73 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  s;.    }else{.  
3de0: 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d      nProgressLim
3df0: 69 74 20 25 3d 20 28 75 6e 73 69 67 6e 65 64 29  it %= (unsigned)
3e00: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
3e10: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  ;.    }.  }.#end
3e20: 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
3e30: 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33  _DEBUG.  sqlite3
3e40: 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
3e50: 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63  c();.  if( p->pc
3e60: 3d 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e 64 62  ==0.   && (p->db
3e70: 2d 3e 66 6c 61 67 73 20 26 20 28 53 51 4c 49 54  ->flags & (SQLIT
3e80: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c 53 51  E_VdbeListing|SQ
3e90: 4c 49 54 45 5f 56 64 62 65 45 51 50 7c 53 51 4c  LITE_VdbeEQP|SQL
3ea0: 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 29 21  ITE_VdbeTrace))!
3eb0: 3d 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20  =0.  ){.    int 
3ec0: 69 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63 65 20  i;.    int once 
3ed0: 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 1;.    sqlite3
3ee0: 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b  VdbePrintSql(p);
3ef0: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
3f00: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
3f10: 64 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20  dbeListing ){.  
3f20: 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45      printf("VDBE
3f30: 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67   Program Listing
3f40: 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66 6f 72  :\n");.      for
3f50: 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20  (i=0; i<p->nOp; 
3f60: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71  i++){.        sq
3f70: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70  lite3VdbePrintOp
3f80: 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70  (stdout, i, &aOp
3f90: 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  [i]);.      }.  
3fa0: 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64    }.    if( p->d
3fb0: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
3fc0: 45 5f 56 64 62 65 45 51 50 20 29 7b 0a 20 20 20  E_VdbeEQP ){.   
3fd0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d     for(i=0; i<p-
3fe0: 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nOp; i++){.    
3ff0: 20 20 20 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f      if( aOp[i].o
4000: 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69  pcode==OP_Explai
4010: 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  n ){.          i
4020: 66 28 20 6f 6e 63 65 20 29 20 70 72 69 6e 74 66  f( once ) printf
4030: 28 22 56 44 42 45 20 51 75 65 72 79 20 50 6c 61  ("VDBE Query Pla
4040: 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20  n:\n");.        
4050: 20 20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c    printf("%s\n",
4060: 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20   aOp[i].p4.z);. 
4070: 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20           once = 
4080: 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  0;.        }.   
4090: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
40a0: 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20  f( p->db->flags 
40b0: 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  & SQLITE_VdbeTra
40c0: 63 65 20 29 20 20 70 72 69 6e 74 66 28 22 56 44  ce )  printf("VD
40d0: 42 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20  BE Trace:\n");. 
40e0: 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42   }.  sqlite3EndB
40f0: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23  enignMalloc();.#
4100: 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 63 3d 70  endif.  for(pc=p
4110: 2d 3e 70 63 3b 20 72 63 3d 3d 53 51 4c 49 54 45  ->pc; rc==SQLITE
4120: 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20 20 20 20  _OK; pc++){.    
4130: 61 73 73 65 72 74 28 20 70 63 3e 3d 30 20 26 26  assert( pc>=0 &&
4140: 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20   pc<p->nOp );.  
4150: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
4160: 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f  Failed ) goto no
4170: 5f 6d 65 6d 3b 0a 23 69 66 64 65 66 20 56 44 42  _mem;.#ifdef VDB
4180: 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 6f 72  E_PROFILE.    or
4190: 69 67 50 63 20 3d 20 70 63 3b 0a 20 20 20 20 73  igPc = pc;.    s
41a0: 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33 48 77  tart = sqlite3Hw
41b0: 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20  time();.#endif. 
41c0: 20 20 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a 20 20     nVmStep++;.  
41d0: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 5d    pOp = &aOp[pc]
41e0: 3b 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61  ;..    /* Only a
41f0: 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20 69 66 20  llow tracing if 
4200: 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20  SQLITE_DEBUG is 
4210: 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a  defined..    */.
4220: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
4230: 42 55 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  BUG.    if( db->
4240: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
4250: 64 62 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20  dbeTrace ){.    
4260: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
4270: 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 70 63 2c  ntOp(stdout, pc,
4280: 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e   pOp);.    }.#en
4290: 64 69 66 0a 20 20 20 20 20 20 0a 0a 20 20 20 20  dif.      ..    
42a0: 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  /* Check to see 
42b0: 69 66 20 77 65 20 6e 65 65 64 20 74 6f 20 73 69  if we need to si
42c0: 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74 65 72 72  mulate an interr
42d0: 75 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20  upt.  This only 
42e0: 68 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69  happens.    ** i
42f0: 66 20 77 65 20 68 61 76 65 20 61 20 73 70 65 63  f we have a spec
4300: 69 61 6c 20 74 65 73 74 20 62 75 69 6c 64 2e 0a  ial test build..
4310: 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51      */.#ifdef SQ
4320: 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 69 66  LITE_TEST.    if
4330: 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  ( sqlite3_interr
4340: 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20  upt_count>0 ){. 
4350: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74       sqlite3_int
4360: 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a  errupt_count--;.
4370: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
4380: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
4390: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  t==0 ){.        
43a0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
43b0: 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20  t(db);.      }. 
43c0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20     }.#endif..   
43d0: 20 2f 2a 20 4f 6e 20 61 6e 79 20 6f 70 63 6f 64   /* On any opcod
43e0: 65 20 77 69 74 68 20 74 68 65 20 22 6f 75 74 32  e with the "out2
43f0: 2d 70 72 65 72 65 6c 65 61 73 65 22 20 74 61 67  -prerelease" tag
4400: 2c 20 66 72 65 65 20 61 6e 79 0a 20 20 20 20 2a  , free any.    *
4410: 2a 20 65 78 74 65 72 6e 61 6c 20 61 6c 6c 6f 63  * external alloc
4420: 61 74 69 6f 6e 73 20 6f 75 74 20 6f 66 20 6d 65  ations out of me
4430: 6d 5b 70 32 5d 20 61 6e 64 20 73 65 74 20 6d 65  m[p2] and set me
4440: 6d 5b 70 32 5d 20 74 6f 20 62 65 0a 20 20 20 20  m[p2] to be.    
4450: 2a 2a 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20  ** an undefined 
4460: 69 6e 74 65 67 65 72 2e 20 20 4f 70 63 6f 64 65  integer.  Opcode
4470: 73 20 77 69 6c 6c 20 65 69 74 68 65 72 20 66 69  s will either fi
4480: 6c 6c 20 69 6e 20 74 68 65 20 69 6e 74 65 67 65  ll in the intege
4490: 72 0a 20 20 20 20 2a 2a 20 76 61 6c 75 65 20 6f  r.    ** value o
44a0: 72 20 63 6f 6e 76 65 72 74 20 6d 65 6d 5b 70 32  r convert mem[p2
44b0: 5d 20 74 6f 20 61 20 64 69 66 66 65 72 65 6e 74  ] to a different
44c0: 20 74 79 70 65 2e 0a 20 20 20 20 2a 2f 0a 20 20   type..    */.  
44d0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
44e0: 70 66 6c 61 67 73 3d 3d 73 71 6c 69 74 65 33 4f  pflags==sqlite3O
44f0: 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 70 4f  pcodeProperty[pO
4500: 70 2d 3e 6f 70 63 6f 64 65 5d 20 29 3b 0a 20 20  p->opcode] );.  
4510: 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61    if( pOp->opfla
4520: 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f  gs & OPFLG_OUT2_
4530: 50 52 45 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  PRERELEASE ){.  
4540: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
4550: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p2>0 );.      a
4560: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
4570: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
4580: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 70 4f  sor) );.      pO
4590: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
45a0: 70 32 5d 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  p2];.      memAb
45b0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
45c0: 4f 75 74 29 3b 0a 20 20 20 20 20 20 56 64 62 65  Out);.      Vdbe
45d0: 4d 65 6d 52 65 6c 65 61 73 65 28 70 4f 75 74 29  MemRelease(pOut)
45e0: 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c  ;.      pOut->fl
45f0: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
4600: 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 53 61 6e     }..    /* San
4610: 69 74 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20  ity checking on 
4620: 6f 74 68 65 72 20 6f 70 65 72 61 6e 64 73 20 2a  other operands *
4630: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4640: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 28 70  DEBUG.    if( (p
4650: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
4660: 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20  FLG_IN1)!=0 ){. 
4670: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
4680: 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p1>0 );.      
4690: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c  assert( pOp->p1<
46a0: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
46b0: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61  rsor) );.      a
46c0: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
46d0: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  d(&aMem[pOp->p1]
46e0: 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53  ) );.      REGIS
46f0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
4700: 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  1, &aMem[pOp->p1
4710: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ]);.    }.    if
4720: 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  ( (pOp->opflags 
4730: 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20  & OPFLG_IN2)!=0 
4740: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
4750: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
4760: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
4770: 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p2<=(p->nMem-p-
4780: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
4790: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
47a0: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
47b0: 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 52  >p2]) );.      R
47c0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
47d0: 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70  p->p2, &aMem[pOp
47e0: 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  ->p2]);.    }.  
47f0: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
4800: 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29  ags & OPFLG_IN3)
4810: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
4820: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
4830: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
4840: 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
4850: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
4860: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
4870: 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
4880: 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20  pOp->p3]) );.   
4890: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
48a0: 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d  E(pOp->p3, &aMem
48b0: 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20  [pOp->p3]);.    
48c0: 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  }.    if( (pOp->
48d0: 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f  opflags & OPFLG_
48e0: 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20 20 20 20  OUT2)!=0 ){.    
48f0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
4900: 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  2>0 );.      ass
4910: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70  ert( pOp->p2<=(p
4920: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
4930: 72 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41  r) );.      memA
4940: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
4950: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b  &aMem[pOp->p2]);
4960: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28  .    }.    if( (
4970: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
4980: 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b  PFLG_OUT3)!=0 ){
4990: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
49a0: 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
49b0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
49c0: 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
49d0: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
49e0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
49f0: 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  e(p, &aMem[pOp->
4a00: 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  p3]);.    }.#end
4a10: 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63 68  if.  .    switch
4a20: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
4a30: 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
4a40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4a50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4a60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4a70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4a80: 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73  .** What follows
4a90: 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73 77   is a massive sw
4aa0: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77  itch statement w
4ab0: 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20 69  here each case i
4ac0: 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73  mplements a.** s
4ad0: 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63 74  eparate instruct
4ae0: 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75  ion in the virtu
4af0: 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20  al machine.  If 
4b00: 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73  we follow the us
4b10: 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69  ual.** indentati
4b20: 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20  on conventions, 
4b30: 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64  each case should
4b40: 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20   be indented by 
4b50: 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a  6 spaces.  But.*
4b60: 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20  * that is a lot 
4b70: 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65 20  of wasted space 
4b80: 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67  on the left marg
4b90: 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65  in.  So the code
4ba0: 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73   within.** the s
4bb0: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
4bc0: 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20  will break with 
4bd0: 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62  convention and b
4be0: 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e  e flush-left. An
4bf0: 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d  other.** big com
4c00: 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f  ment (similar to
4c10: 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20   this one) will 
4c20: 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69  mark the point i
4c30: 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72 65  n the code where
4c40: 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f  .** we transitio
4c50: 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c  n back to normal
4c60: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a   indentation..**
4c70: 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69  .** The formatti
4c80: 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65 20  ng of each case 
4c90: 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54  is important.  T
4ca0: 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20  he makefile for 
4cb0: 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61  SQLite.** genera
4cc0: 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20  tes two C files 
4cd0: 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20  "opcodes.h" and 
4ce0: 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73  "opcodes.c" by s
4cf0: 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20  canning this.** 
4d00: 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  file looking for
4d10: 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67 69   lines that begi
4d20: 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f  n with "case OP_
4d30: 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e  ".  The opcodes.
4d40: 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20  h files.** will 
4d50: 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23  be filled with #
4d60: 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69 76  defines that giv
4d70: 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72  e unique integer
4d80: 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a   values to each.
4d90: 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68  ** opcode and th
4da0: 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65  e opcodes.c file
4db0: 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20   is filled with 
4dc0: 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72 69  an array of stri
4dd0: 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63  ngs where.** eac
4de0: 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 20  h string is the 
4df0: 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f  symbolic name fo
4e00: 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  r the correspond
4e10: 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20  ing opcode.  If 
4e20: 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74  the.** case stat
4e30: 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65  ement is followe
4e40: 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f  d by a comment o
4e50: 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73  f the form "/# s
4e60: 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a  ame as ... #/".*
4e70: 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69  * that comment i
4e80: 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  s used to determ
4e90: 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75 6c  ine the particul
4ea0: 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ar value of the 
4eb0: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74  opcode..**.** Ot
4ec0: 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20  her keywords in 
4ed0: 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74  the comment that
4ee0: 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61   follows each ca
4ef0: 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  se are used to.*
4f00: 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  * construct the 
4f10: 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45  OPFLG_INITIALIZE
4f20: 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69  R value that ini
4f30: 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50  tializes opcodeP
4f40: 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65  roperty[]..** Ke
4f50: 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20  ywords include: 
4f60: 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f  in1, in2, in3, o
4f70: 75 74 32 5f 70 72 65 72 65 6c 65 61 73 65 2c 20  ut2_prerelease, 
4f80: 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65  out2, out3.  See
4f90: 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65  .** the mkopcode
4fa0: 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72  h.awk script for
4fb0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
4fc0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44  rmation..**.** D
4fd0: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f  ocumentation abo
4fe0: 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20  ut VDBE opcodes 
4ff0: 69 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  is generated by 
5000: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69  scanning this fi
5010: 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20  le.** for lines 
5020: 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20  of that contain 
5030: 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74  "Opcode:".  That
5040: 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75   line and all su
5050: 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d  bsequent.** comm
5060: 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73  ent lines are us
5070: 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
5080: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f  tion of the opco
5090: 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74  de.html document
50a0: 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a  ation.** file..*
50b0: 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a  *.** SUMMARY:.**
50c0: 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69  .**     Formatti
50d0: 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  ng is important 
50e0: 74 6f 20 73 63 72 69 70 74 73 20 74 68 61 74 20  to scripts that 
50f0: 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a  scan this file..
5100: 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65  **     Do not de
5110: 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66  viate from the f
5120: 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20  ormatting style 
5130: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
5140: 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**.***********
5150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5170: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5180: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5190: 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  **/../* Opcode: 
51a0: 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a   Goto * P2 * * *
51b0: 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64  .**.** An uncond
51c0: 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20  itional jump to 
51d0: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54  address P2..** T
51e0: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
51f0: 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c  ion executed wil
5200: 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65  l be .** the one
5210: 20 61 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f   at index P2 fro
5220: 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
5230: 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61  of.** the progra
5240: 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  m..*/.case OP_Go
5250: 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  to: {           
5260: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 70    /* jump */.  p
5270: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
5280: 0a 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 74  ..  /* Opcodes t
5290: 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
52a0: 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20  the bottom of a 
52b0: 6c 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c 20 4f  loop (OP_Next, O
52c0: 50 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f  P_Prev,.  ** OP_
52d0: 56 4e 65 78 74 2c 20 4f 50 5f 52 6f 77 53 65 74  VNext, OP_RowSet
52e0: 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f 72 74  Next, or OP_Sort
52f0: 65 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75 6d 70  erNext) all jump
5300: 20 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a 2a 20   here upon.  ** 
5310: 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43 68 65  completion.  Che
5320: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 73 71 6c  ck to see if sql
5330: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29  ite3_interrupt()
5340: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
5350: 0a 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20  .  ** or if the 
5360: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
5370: 6b 20 6e 65 65 64 73 20 74 6f 20 62 65 20 69 6e  k needs to be in
5380: 76 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a  voked. .  **.  *
5390: 2a 20 54 68 69 73 20 63 6f 64 65 20 75 73 65 73  * This code uses
53a0: 20 75 6e 73 74 72 75 63 74 75 72 65 64 20 22 67   unstructured "g
53b0: 6f 74 6f 22 20 73 74 61 74 65 6d 65 6e 74 73 20  oto" statements 
53c0: 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f  and does not loo
53d0: 6b 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42 75  k clean..  ** Bu
53e0: 74 20 74 68 61 74 20 69 73 20 6e 6f 74 20 64 75  t that is not du
53f0: 65 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f 64 69  e to sloppy codi
5400: 6e 67 20 68 61 62 69 74 73 2e 20 54 68 65 20 63  ng habits. The c
5410: 6f 64 65 20 69 73 20 77 72 69 74 74 65 6e 20 74  ode is written t
5420: 68 69 73 0a 20 20 2a 2a 20 77 61 79 20 66 6f 72  his.  ** way for
5430: 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 74 6f   performance, to
5440: 20 61 76 6f 69 64 20 68 61 76 69 6e 67 20 74 6f   avoid having to
5450: 20 72 75 6e 20 74 68 65 20 69 6e 74 65 72 72 75   run the interru
5460: 70 74 20 61 6e 64 20 70 72 6f 67 72 65 73 73 0a  pt and progress.
5470: 20 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e 20 65    ** checks on e
5480: 76 65 72 79 20 6f 70 63 6f 64 65 2e 20 20 54 68  very opcode.  Th
5490: 69 73 20 68 65 6c 70 73 20 73 71 6c 69 74 65 33  is helps sqlite3
54a0: 5f 73 74 65 70 28 29 20 74 6f 20 72 75 6e 20 61  _step() to run a
54b0: 62 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a 20 66  bout 1.5%.  ** f
54c0: 61 73 74 65 72 20 61 63 63 6f 72 64 69 6e 67 20  aster according 
54d0: 74 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d 2d 74  to "valgrind --t
54e0: 6f 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64 22 20  ool=cachegrind" 
54f0: 2a 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  */.check_for_int
5500: 65 72 72 75 70 74 3a 0a 20 20 69 66 28 20 64 62  errupt:.  if( db
5510: 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74  ->u1.isInterrupt
5520: 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  ed ) goto abort_
5530: 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74  due_to_interrupt
5540: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
5550: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
5560: 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 43 61 6c  ALLBACK.  /* Cal
5570: 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  l the progress c
5580: 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73  allback if it is
5590: 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20   configured and 
55a0: 74 68 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d  the required num
55b0: 62 65 72 0a 20 20 2a 2a 20 6f 66 20 56 44 42 45  ber.  ** of VDBE
55c0: 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e 20 65   ops have been e
55d0: 78 65 63 75 74 65 64 20 28 65 69 74 68 65 72 20  xecuted (either 
55e0: 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76 6f 63  since this invoc
55f0: 61 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20 73 71  ation of.  ** sq
5600: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 29 20  lite3VdbeExec() 
5610: 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69  or since last ti
5620: 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  me the progress 
5630: 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c  callback was cal
5640: 6c 65 64 29 2e 0a 20 20 2a 2a 20 49 66 20 74 68  led)..  ** If th
5650: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
5660: 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d  ack returns non-
5670: 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76  zero, exit the v
5680: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77  irtual machine w
5690: 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 74 75 72  ith.  ** a retur
56a0: 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42  n code SQLITE_AB
56b0: 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ORT..  */.  if( 
56c0: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30  db->xProgress!=0
56d0: 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72   && nVmStep>=nPr
56e0: 6f 67 72 65 73 73 4c 69 6d 69 74 20 29 7b 0a 20  ogressLimit ){. 
56f0: 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
5700: 50 72 6f 67 72 65 73 73 4f 70 73 21 3d 30 20 29  ProgressOps!=0 )
5710: 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c  ;.    nProgressL
5720: 69 6d 69 74 20 3d 20 6e 56 6d 53 74 65 70 20 2b  imit = nVmStep +
5730: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
5740: 73 20 2d 20 28 6e 56 6d 53 74 65 70 25 64 62 2d  s - (nVmStep%db-
5750: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a  >nProgressOps);.
5760: 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f      if( db->xPro
5770: 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72  gress(db->pProgr
5780: 65 73 73 41 72 67 29 20 29 7b 0a 20 20 20 20 20  essArg) ){.     
5790: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
57a0: 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20 67 6f  ERRUPT;.      go
57b0: 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
57c0: 6c 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  lt;.    }.  }.#e
57d0: 6e 64 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b  ndif.  .  break;
57e0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
57f0: 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20  Gosub P1 P2 * * 
5800: 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68  *.**.** Write th
5810: 65 20 63 75 72 72 65 6e 74 20 61 64 64 72 65 73  e current addres
5820: 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20  s onto register 
5830: 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a  P1.** and then j
5840: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
5850: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  2..*/.case OP_Go
5860: 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20  sub: {          
5870: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
5880: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
5890: 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d   && pOp->p1<=(p-
58a0: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
58b0: 29 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  ) );.  pIn1 = &a
58c0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
58d0: 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66  assert( (pIn1->f
58e0: 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d  lags & MEM_Dyn)=
58f0: 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  =0 );.  memAbout
5900: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31  ToChange(p, pIn1
5910: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
5920: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49   = MEM_Int;.  pI
5930: 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20  n1->u.i = pc;.  
5940: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
5950: 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20  Op->p1, pIn1);. 
5960: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
5970: 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  1;.  break;.}../
5980: 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65 74 75 72  * Opcode:  Retur
5990: 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  n P1 * * * *.**.
59a0: 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e  ** Jump to the n
59b0: 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
59c0: 61 66 74 65 72 20 74 68 65 20 61 64 64 72 65 73  after the addres
59d0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
59e0: 2e 20 20 41 66 74 65 72 0a 2a 2a 20 74 68 65 20  .  After.** the 
59f0: 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50  jump, register P
5a00: 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69  1 becomes undefi
5a10: 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ned..*/.case OP_
5a20: 52 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20 20  Return: {       
5a30: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
5a40: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
5a50: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
5a60: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45   pIn1->flags==ME
5a70: 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 63 20 3d 20  M_Int );.  pc = 
5a80: 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a  (int)pIn1->u.i;.
5a90: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
5aa0: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20  MEM_Undefined;. 
5ab0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
5ac0: 63 6f 64 65 3a 20 49 6e 69 74 43 6f 72 6f 75 74  code: InitCorout
5ad0: 69 6e 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ine P1 P2 P3 * *
5ae0: 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72 65  .**.** Set up re
5af0: 67 69 73 74 65 72 20 50 31 20 73 6f 20 74 68 61  gister P1 so tha
5b00: 74 20 69 74 20 77 69 6c 6c 20 4f 50 5f 59 69 65  t it will OP_Yie
5b10: 6c 64 20 74 6f 20 74 68 65 20 63 6f 2d 72 6f 75  ld to the co-rou
5b20: 74 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65 64 20  tine.** located 
5b30: 61 74 20 61 64 64 72 65 73 73 20 50 33 2e 0a 2a  at address P3..*
5b40: 2a 0a 2a 2a 20 49 66 20 50 32 21 3d 30 20 74 68  *.** If P2!=0 th
5b50: 65 6e 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e  en the co-routin
5b60: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
5b70: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
5b80: 6c 6f 77 73 0a 2a 2a 20 74 68 69 73 20 6f 70 63  lows.** this opc
5b90: 6f 64 65 2e 20 20 53 6f 20 6a 75 6d 70 20 6f 76  ode.  So jump ov
5ba0: 65 72 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e  er the co-routin
5bb0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
5bc0: 20 74 6f 0a 2a 2a 20 61 64 64 72 65 73 73 20 50   to.** address P
5bd0: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  2..*/.case OP_In
5be0: 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20  itCoroutine: {  
5bf0: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
5c00: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
5c10: 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d 28  0 &&  pOp->p1<=(
5c20: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
5c30: 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  or) );.  assert(
5c40: 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 26 26 20 70   pOp->p2>=0 && p
5c50: 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p2<p->nOp );
5c60: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
5c70: 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33  p3>=0 && pOp->p3
5c80: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 75  <p->nOp );.  pOu
5c90: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
5ca0: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 21 56  1];.  assert( !V
5cb0: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f  dbeMemDynamic(pO
5cc0: 75 74 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  ut) );.  pOut->u
5cd0: 2e 69 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31  .i = pOp->p3 - 1
5ce0: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
5cf0: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69 66 28  = MEM_Int;.  if(
5d00: 20 70 4f 70 2d 3e 70 32 20 29 20 70 63 20 3d 20   pOp->p2 ) pc = 
5d10: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62  pOp->p2 - 1;.  b
5d20: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
5d30: 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75 74 69 6e  de:  EndCoroutin
5d40: 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  e P1 * * * *.**.
5d50: 2a 2a 20 54 68 65 20 69 6e 73 74 72 75 63 74 69  ** The instructi
5d60: 6f 6e 20 61 74 20 74 68 65 20 61 64 64 72 65 73  on at the addres
5d70: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
5d80: 20 69 73 20 61 6e 20 4f 50 5f 59 69 65 6c 64 2e   is an OP_Yield.
5d90: 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20  .** Jump to the 
5da0: 50 32 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20  P2 parameter of 
5db0: 74 68 61 74 20 4f 50 5f 59 69 65 6c 64 2e 0a 2a  that OP_Yield..*
5dc0: 2a 20 41 66 74 65 72 20 74 68 65 20 6a 75 6d 70  * After the jump
5dd0: 2c 20 72 65 67 69 73 74 65 72 20 50 31 20 62 65  , register P1 be
5de0: 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e  comes undefined.
5df0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e 64 43  .*/.case OP_EndC
5e00: 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20  oroutine: {     
5e10: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
5e20: 20 20 56 64 62 65 4f 70 20 2a 70 43 61 6c 6c 65    VdbeOp *pCalle
5e30: 72 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  r;.  pIn1 = &aMe
5e40: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
5e50: 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
5e60: 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  s==MEM_Int );.  
5e70: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 75 2e  assert( pIn1->u.
5e80: 69 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e 75 2e  i>=0 && pIn1->u.
5e90: 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 43  i<p->nOp );.  pC
5ea0: 61 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70 49 6e  aller = &aOp[pIn
5eb0: 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73 65 72  1->u.i];.  asser
5ec0: 74 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f  t( pCaller->opco
5ed0: 64 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29 3b 0a  de==OP_Yield );.
5ee0: 20 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65    assert( pCalle
5ef0: 72 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43 61 6c  r->p2>=0 && pCal
5f00: 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29  ler->p2<p->nOp )
5f10: 3b 0a 20 20 70 63 20 3d 20 70 43 61 6c 6c 65 72  ;.  pc = pCaller
5f20: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 70 49 6e 31  ->p2 - 1;.  pIn1
5f30: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e  ->flags = MEM_Un
5f40: 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b  defined;.  break
5f50: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
5f60: 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20 2a   Yield P1 P2 * *
5f70: 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68   *.**.** Swap th
5f80: 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65  e program counte
5f90: 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75 65  r with the value
5fa0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
5fb0: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f  .**.** If the co
5fc0: 2d 72 6f 75 74 69 6e 65 20 65 6e 64 73 20 77 69  -routine ends wi
5fd0: 74 68 20 4f 50 5f 59 69 65 6c 64 20 6f 72 20 4f  th OP_Yield or O
5fe0: 50 5f 52 65 74 75 72 6e 20 74 68 65 6e 20 63 6f  P_Return then co
5ff0: 6e 74 69 6e 75 65 0a 2a 2a 20 74 6f 20 74 68 65  ntinue.** to the
6000: 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
6010: 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63  n.  But if the c
6020: 6f 2d 72 6f 75 74 69 6e 65 20 65 6e 64 73 20 77  o-routine ends w
6030: 69 74 68 0a 2a 2a 20 4f 50 5f 45 6e 64 43 6f 72  ith.** OP_EndCor
6040: 6f 75 74 69 6e 65 2c 20 6a 75 6d 70 20 69 6d 6d  outine, jump imm
6050: 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
6060: 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64  */.case OP_Yield
6070: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
6080: 2a 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20  * in1, jump */. 
6090: 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 70   int pcDest;.  p
60a0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
60b0: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
60c0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
60d0: 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20 20  EM_Dyn)==0 );.  
60e0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pIn1->flags = ME
60f0: 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73 74 20  M_Int;.  pcDest 
6100: 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69  = (int)pIn1->u.i
6110: 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20  ;.  pIn1->u.i = 
6120: 70 63 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  pc;.  REGISTER_T
6130: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49  RACE(pOp->p1, pI
6140: 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70 63 44 65  n1);.  pc = pcDe
6150: 73 74 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  st;.  break;.}..
6160: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74  /* Opcode:  Halt
6170: 49 66 4e 75 6c 6c 20 20 50 31 20 50 32 20 50 33  IfNull  P1 P2 P3
6180: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
6190: 69 73 3a 20 20 69 66 20 72 5b 50 33 5d 3d 6e 75  is:  if r[P3]=nu
61a0: 6c 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68  ll halt.**.** Ch
61b0: 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69 6e  eck the value in
61c0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 49   register P3.  I
61d0: 66 20 69 74 20 69 73 20 4e 55 4c 4c 20 74 68 65  f it is NULL the
61e0: 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20  n Halt using.** 
61f0: 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50 32  parameter P1, P2
6200: 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66 20 74  , and P4 as if t
6210: 68 69 73 20 77 65 72 65 20 61 20 48 61 6c 74 20  his were a Halt 
6220: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66  instruction.  If
6230: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e   the.** value in
6240: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
6250: 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  not NULL, then t
6260: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61  his routine is a
6270: 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20 50   no-op..** The P
6280: 35 20 70 61 72 61 6d 65 74 65 72 20 73 68 6f 75  5 parameter shou
6290: 6c 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61 73 65  ld be 1..*/.case
62a0: 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20   OP_HaltIfNull: 
62b0: 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f  {      /* in3 */
62c0: 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
62d0: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
62e0: 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
62f0: 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72  EM_Null)==0 ) br
6300: 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  eak;.  /* Fall t
6310: 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48  hrough into OP_H
6320: 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63  alt */.}../* Opc
6330: 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32  ode:  Halt P1 P2
6340: 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45   * P4 P5.**.** E
6350: 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  xit immediately.
6360: 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f    All open curso
6370: 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73  rs, etc are clos
6380: 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61  ed.** automatica
6390: 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  lly..**.** P1 is
63a0: 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65   the result code
63b0: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
63c0: 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c  ite3_exec(), sql
63d0: 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a  ite3_reset(),.**
63e0: 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61   or sqlite3_fina
63f0: 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e  lize().  For a n
6400: 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73  ormal halt, this
6410: 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54   should be SQLIT
6420: 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72  E_OK (0)..** For
6430: 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20   errors, it can 
6440: 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61  be some other va
6450: 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74  lue.  If P1!=0 t
6460: 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65  hen P2 will dete
6470: 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72  rmine.** whether
6480: 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62   or not to rollb
6490: 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20  ack the current 
64a0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f  transaction.  Do
64b0: 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a   not rollback.**
64c0: 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e   if P2==OE_Fail.
64d0: 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b   Do the rollback
64e0: 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62   if P2==OE_Rollb
64f0: 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f  ack.  If P2==OE_
6500: 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62  Abort,.** then b
6510: 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e  ack out all chan
6520: 67 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63  ges that have oc
6530: 63 75 72 72 65 64 20 64 75 72 69 6e 67 20 74 68  curred during th
6540: 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20  is execution of 
6550: 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74  the.** VDBE, but
6560: 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b   do not rollback
6570: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
6580: 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  . .**.** If P4 i
6590: 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20  s not null then 
65a0: 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d  it is an error m
65b0: 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a  essage string..*
65c0: 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20 76 61 6c  *.** P5 is a val
65d0: 75 65 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64  ue between 0 and
65e0: 20 34 2c 20 69 6e 63 6c 75 73 69 76 65 2c 20 74   4, inclusive, t
65f0: 68 61 74 20 6d 6f 64 69 66 69 65 73 20 74 68 65  hat modifies the
6600: 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a   P4 string..**.*
6610: 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20 63 68 61  *    0:  (no cha
6620: 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a 20 20 4e  nge).**    1:  N
6630: 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72 61 69 6e  OT NULL contrain
6640: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20  t failed: P4.** 
6650: 20 20 20 32 3a 20 20 55 4e 49 51 55 45 20 63 6f     2:  UNIQUE co
6660: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
6670: 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20 20 43 48   P4.**    3:  CH
6680: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  ECK constraint f
6690: 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20  ailed: P4.**    
66a0: 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 20  4:  FOREIGN KEY 
66b0: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
66c0: 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50  d: P4.**.** If P
66d0: 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e  5 is not zero an
66e0: 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c 20 74 68  d P4 is NULL, th
66f0: 65 6e 20 65 76 65 72 79 74 68 69 6e 67 20 61 66  en everything af
6700: 74 65 72 20 74 68 65 20 22 3a 22 20 69 73 0a 2a  ter the ":" is.*
6710: 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a  * omitted..**.**
6720: 20 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70   There is an imp
6730: 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30 20 30  lied "Halt 0 0 0
6740: 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  " instruction in
6750: 73 65 72 74 65 64 20 61 74 20 74 68 65 20 76 65  serted at the ve
6760: 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65  ry end of.** eve
6770: 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20  ry program.  So 
6780: 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68 65 20  a jump past the 
6790: 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  last instruction
67a0: 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 0a   of the program.
67b0: 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  ** is the same a
67c0: 73 20 65 78 65 63 75 74 69 6e 67 20 48 61 6c 74  s executing Halt
67d0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c  ..*/.case OP_Hal
67e0: 74 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  t: {.  const cha
67f0: 72 20 2a 7a 54 79 70 65 3b 0a 20 20 63 6f 6e 73  r *zType;.  cons
6800: 74 20 63 68 61 72 20 2a 7a 4c 6f 67 46 6d 74 3b  t char *zLogFmt;
6810: 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d  ..  if( pOp->p1=
6820: 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d  =SQLITE_OK && p-
6830: 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f  >pFrame ){.    /
6840: 2a 20 48 61 6c 74 20 74 68 65 20 73 75 62 2d 70  * Halt the sub-p
6850: 72 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e 20 63  rogram. Return c
6860: 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 70 61  ontrol to the pa
6870: 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20  rent frame. */. 
6880: 20 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46     VdbeFrame *pF
6890: 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65  rame = p->pFrame
68a0: 3b 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 20  ;.    p->pFrame 
68b0: 3d 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  = pFrame->pParen
68c0: 74 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65  t;.    p->nFrame
68d0: 2d 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  --;.    sqlite3V
68e0: 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62  dbeSetChanges(db
68f0: 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20  , p->nChange);. 
6900: 20 20 20 70 63 20 3d 20 73 71 6c 69 74 65 33 56     pc = sqlite3V
6910: 64 62 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28  dbeFrameRestore(
6920: 70 46 72 61 6d 65 29 3b 0a 20 20 20 20 6c 61 73  pFrame);.    las
6930: 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73  tRowid = db->las
6940: 74 52 6f 77 69 64 3b 0a 20 20 20 20 69 66 28 20  tRowid;.    if( 
6950: 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f  pOp->p2==OE_Igno
6960: 72 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  re ){.      /* I
6970: 6e 73 74 72 75 63 74 69 6f 6e 20 70 63 20 69 73  nstruction pc is
6980: 20 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20   the OP_Program 
6990: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 65  that invoked the
69a0: 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20   sub-program .  
69b0: 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79      ** currently
69c0: 20 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20 49   being halted. I
69d0: 66 20 74 68 65 20 70 32 20 69 6e 73 74 72 75 63  f the p2 instruc
69e0: 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f  tion of this OP_
69f0: 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e  Halt.      ** in
6a00: 73 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65 74  struction is set
6a10: 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74   to OE_Ignore, t
6a20: 68 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f 67  hen the sub-prog
6a30: 72 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67 0a  ram is throwing.
6a40: 20 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f        ** an IGNO
6a50: 52 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e  RE exception. In
6a60: 20 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70 20   this case jump 
6a70: 74 6f 20 74 68 65 20 61 64 64 72 65 73 73 20 73  to the address s
6a80: 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20 2a  pecified.      *
6a90: 2a 20 61 73 20 74 68 65 20 70 32 20 6f 66 20 74  * as the p2 of t
6aa0: 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72  he calling OP_Pr
6ab0: 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20  ogram.  */.     
6ac0: 20 70 63 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 5d   pc = p->aOp[pc]
6ad0: 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20  .p2-1;.    }.   
6ae0: 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20   aOp = p->aOp;. 
6af0: 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65     aMem = p->aMe
6b00: 6d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  m;.    break;.  
6b10: 7d 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d  }.  p->rc = pOp-
6b20: 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41  >p1;.  p->errorA
6b30: 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d  ction = (u8)pOp-
6b40: 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70  >p2;.  p->pc = p
6b50: 63 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 20 29  c;.  if( p->rc )
6b60: 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  {.    if( pOp->p
6b70: 35 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69  5 ){.      stati
6b80: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 63  c const char * c
6b90: 6f 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20 3d 20  onst azType[] = 
6ba0: 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22 55  { "NOT NULL", "U
6bb0: 4e 49 51 55 45 22 2c 20 22 43 48 45 43 4b 22 2c  NIQUE", "CHECK",
6bc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46                "F
6bf0: 4f 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b 0a 20  OREIGN KEY" };. 
6c00: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
6c10: 2d 3e 70 35 3e 3d 31 20 26 26 20 70 4f 70 2d 3e  ->p5>=1 && pOp->
6c20: 70 35 3c 3d 34 20 29 3b 0a 20 20 20 20 20 20 74  p5<=4 );.      t
6c30: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35  estcase( pOp->p5
6c40: 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 74 65 73  ==1 );.      tes
6c50: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d  tcase( pOp->p5==
6c60: 32 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63  2 );.      testc
6c70: 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 33 20  ase( pOp->p5==3 
6c80: 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
6c90: 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b  e( pOp->p5==4 );
6ca0: 0a 20 20 20 20 20 20 7a 54 79 70 65 20 3d 20 61  .      zType = a
6cb0: 7a 54 79 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d  zType[pOp->p5-1]
6cc0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
6cd0: 20 20 20 7a 54 79 70 65 20 3d 20 30 3b 0a 20 20     zType = 0;.  
6ce0: 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20    }.    assert( 
6cf0: 7a 54 79 70 65 21 3d 30 20 7c 7c 20 70 4f 70 2d  zType!=0 || pOp-
6d00: 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 20 20  >p4.z!=0 );.    
6d10: 7a 4c 6f 67 46 6d 74 20 3d 20 22 61 62 6f 72 74  zLogFmt = "abort
6d20: 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a 20   at %d in [%s]: 
6d30: 25 73 22 3b 0a 20 20 20 20 69 66 28 20 7a 54 79  %s";.    if( zTy
6d40: 70 65 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20  pe && pOp->p4.z 
6d50: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
6d60: 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
6d70: 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 20 63  rrMsg, db, "%s c
6d80: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
6d90: 3a 20 25 73 22 2c 20 0a 20 20 20 20 20 20 20 20  : %s", .        
6da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a                 z
6db0: 54 79 70 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  Type, pOp->p4.z)
6dc0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
6dd0: 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
6de0: 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
6df0: 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
6e00: 20 64 62 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e   db, "%s", pOp->
6e10: 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65  p4.z);.    }else
6e20: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  {.      sqlite3S
6e30: 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
6e40: 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 20 63 6f  rMsg, db, "%s co
6e50: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 22  nstraint failed"
6e60: 2c 20 7a 54 79 70 65 29 3b 0a 20 20 20 20 7d 0a  , zType);.    }.
6e70: 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28      sqlite3_log(
6e80: 70 4f 70 2d 3e 70 31 2c 20 7a 4c 6f 67 46 6d 74  pOp->p1, zLogFmt
6e90: 2c 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70  , pc, p->zSql, p
6ea0: 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a  ->zErrMsg);.  }.
6eb0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
6ec0: 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73  beHalt(p);.  ass
6ed0: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
6ee0: 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  BUSY || rc==SQLI
6ef0: 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c  TE_OK || rc==SQL
6f00: 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69  ITE_ERROR );.  i
6f10: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
6f20: 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20  SY ){.    p->rc 
6f30: 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
6f40: 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  SY;.  }else{.   
6f50: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
6f60: 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63  ITE_OK || (p->rc
6f70: 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43  &0xff)==SQLITE_C
6f80: 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20  ONSTRAINT );.   
6f90: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
6fa0: 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44  ITE_OK || db->nD
6fb0: 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 7c 7c  eferredCons>0 ||
6fc0: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
6fd0: 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72  mCons>0 );.    r
6fe0: 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49  c = p->rc ? SQLI
6ff0: 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54  TE_ERROR : SQLIT
7000: 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f  E_DONE;.  }.  go
7010: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
7020: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
7030: 74 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20  teger P1 P2 * * 
7040: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
7050: 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68  [P2]=P1.**.** Th
7060: 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72  e 32-bit integer
7070: 20 76 61 6c 75 65 20 50 31 20 69 73 20 77 72 69   value P1 is wri
7080: 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74  tten into regist
7090: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
70a0: 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20  P_Integer: {    
70b0: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
70c0: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75  release */.  pOu
70d0: 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31  t->u.i = pOp->p1
70e0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
70f0: 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a   Opcode: Int64 *
7100: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
7110: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34  nopsis: r[P2]=P4
7120: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
7130: 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62  ointer to a 64-b
7140: 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
7150: 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20  ..** Write that 
7160: 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
7170: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
7180: 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20  OP_Int64: {     
7190: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
71a0: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73  erelease */.  as
71b0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49  sert( pOp->p4.pI
71c0: 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d  64!=0 );.  pOut-
71d0: 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e  >u.i = *pOp->p4.
71e0: 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  pI64;.  break;.}
71f0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
7200: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
7210: 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  OINT./* Opcode: 
7220: 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a  Real * P2 * P4 *
7230: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
7240: 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  P2]=P4.**.** P4 
7250: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
7260: 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e  a 64-bit floatin
7270: 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a  g point value..*
7280: 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c  * Write that val
7290: 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
72a0: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
72b0: 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Real: {         
72c0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
72d0: 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65  _FLOAT, out2-pre
72e0: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75  release */.  pOu
72f0: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52  t->flags = MEM_R
7300: 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21  eal;.  assert( !
7310: 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f  sqlite3IsNaN(*pO
7320: 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a  p->p4.pReal) );.
7330: 20 20 70 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f 70    pOut->r = *pOp
7340: 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72  ->p4.pReal;.  br
7350: 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
7360: 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67  * Opcode: String
7370: 38 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a  8 * P2 * P4 *.**
7380: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
7390: 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70  ='P4'.**.** P4 p
73a0: 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20 74  oints to a nul t
73b0: 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20  erminated UTF-8 
73c0: 73 74 72 69 6e 67 2e 20 54 68 69 73 20 6f 70 63  string. This opc
73d0: 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d  ode is transform
73e0: 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 6e 20 4f  ed .** into an O
73f0: 50 5f 53 74 72 69 6e 67 20 62 65 66 6f 72 65 20  P_String before 
7400: 69 74 20 69 73 20 65 78 65 63 75 74 65 64 20 66  it is executed f
7410: 6f 72 20 74 68 65 20 66 69 72 73 74 20 74 69 6d  or the first tim
7420: 65 2e 20 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68  e.  During.** th
7430: 69 73 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f  is transformatio
7440: 6e 2c 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66  n, the length of
7450: 20 73 74 72 69 6e 67 20 50 34 20 69 73 20 63 6f   string P4 is co
7460: 6d 70 75 74 65 64 20 61 6e 64 20 73 74 6f 72 65  mputed and store
7470: 64 0a 2a 2a 20 61 73 20 74 68 65 20 50 31 20 70  d.** as the P1 p
7480: 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73  arameter..*/.cas
7490: 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20  e OP_String8: { 
74a0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
74b0: 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75  as TK_STRING, ou
74c0: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
74d0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
74e0: 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 70  p4.z!=0 );.  pOp
74f0: 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74  ->opcode = OP_St
7500: 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20  ring;.  pOp->p1 
7510: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
7520: 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23  0(pOp->p4.z);..#
7530: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
7540: 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65  IT_UTF16.  if( e
7550: 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f  ncoding!=SQLITE_
7560: 55 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d  UTF8 ){.    rc =
7570: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
7580: 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d  etStr(pOut, pOp-
7590: 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54  >p4.z, -1, SQLIT
75a0: 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53  E_UTF8, SQLITE_S
75b0: 54 41 54 49 43 29 3b 0a 20 20 20 20 69 66 28 20  TATIC);.    if( 
75c0: 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49  rc==SQLITE_TOOBI
75d0: 47 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67  G ) goto too_big
75e0: 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45  ;.    if( SQLITE
75f0: 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65  _OK!=sqlite3Vdbe
7600: 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
7610: 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29  Out, encoding) )
7620: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
7630: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e    assert( pOut->
7640: 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a  zMalloc==pOut->z
7650: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
7660: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pOut->flags & ME
7670: 4d 5f 44 79 6e 20 29 3b 0a 20 20 20 20 70 4f 75  M_Dyn );.    pOu
7680: 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  t->zMalloc = 0;.
7690: 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
76a0: 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20  |= MEM_Static;. 
76b0: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26     pOut->flags &
76c0: 3d 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20  = ~MEM_Dyn;.    
76d0: 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
76e0: 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20  =P4_DYNAMIC ){. 
76f0: 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
7700: 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a  ee(db, pOp->p4.z
7710: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70  );.    }.    pOp
7720: 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59  ->p4type = P4_DY
7730: 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e  NAMIC;.    pOp->
7740: 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a  p4.z = pOut->z;.
7750: 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f      pOp->p1 = pO
7760: 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69  ut->n;.  }.#endi
7770: 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e  f.  if( pOp->p1>
7780: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
7790: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
77a0: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
77b0: 62 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61  big;.  }.  /* Fa
77c0: 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
77d0: 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f  e next case, OP_
77e0: 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f  String */.}.  ./
77f0: 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67  * Opcode: String
7800: 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
7810: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
7820: 3d 27 50 34 27 20 28 6c 65 6e 3d 50 31 29 0a 2a  ='P4' (len=P1).*
7830: 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20  *.** The string 
7840: 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67  value P4 of leng
7850: 74 68 20 50 31 20 28 62 79 74 65 73 29 20 69 73  th P1 (bytes) is
7860: 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
7870: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
7880: 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20  OP_String: {    
7890: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
78a0: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73  erelease */.  as
78b0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21  sert( pOp->p4.z!
78c0: 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  =0 );.  pOut->fl
78d0: 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45  ags = MEM_Str|ME
78e0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72  M_Static|MEM_Ter
78f0: 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70  m;.  pOut->z = p
7900: 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74  Op->p4.z;.  pOut
7910: 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  ->n = pOp->p1;. 
7920: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
7930: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
7940: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
7950: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
7960: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20  /* Opcode: Null 
7970: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
7980: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32 2e  Synopsis:  r[P2.
7990: 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20  .P3]=NULL.**.** 
79a0: 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74  Write a NULL int
79b0: 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 20  o registers P2. 
79c0: 20 49 66 20 50 33 20 67 72 65 61 74 65 72 20 74   If P3 greater t
79d0: 68 61 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c 73  han P2, then als
79e0: 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20  o write.** NULL 
79f0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
7a00: 20 61 6e 64 20 65 76 65 72 79 20 72 65 67 69 73   and every regis
7a10: 74 65 72 20 69 6e 20 62 65 74 77 65 65 6e 20 50  ter in between P
7a20: 32 20 61 6e 64 20 50 33 2e 20 20 49 66 20 50 33  2 and P3.  If P3
7a30: 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
7a40: 20 50 32 20 28 74 79 70 69 63 61 6c 6c 79 20 50   P2 (typically P
7a50: 33 20 69 73 20 7a 65 72 6f 29 20 74 68 65 6e 20  3 is zero) then 
7a60: 6f 6e 6c 79 20 72 65 67 69 73 74 65 72 20 50 32  only register P2
7a70: 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55   is.** set to NU
7a80: 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  LL..**.** If the
7a90: 20 50 31 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e   P1 value is non
7aa0: 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f  -zero, then also
7ab0: 20 73 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65   set the MEM_Cle
7ac0: 61 72 65 64 20 66 6c 61 67 20 73 6f 20 74 68 61  ared flag so tha
7ad0: 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73  t.** NULL values
7ae0: 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72   will not compar
7af0: 65 20 65 71 75 61 6c 20 65 76 65 6e 20 69 66 20  e equal even if 
7b00: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
7b10: 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65   set on.** OP_Ne
7b20: 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61   or OP_Eq..*/.ca
7b30: 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20  se OP_Null: {   
7b40: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
7b50: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7b60: 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36 20 6e  int cnt;.  u16 n
7b70: 75 6c 6c 46 6c 61 67 3b 0a 20 20 63 6e 74 20 3d  ullFlag;.  cnt =
7b80: 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32   pOp->p3-pOp->p2
7b90: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
7ba0: 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
7bb0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
7bc0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c  Out->flags = nul
7bd0: 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20  lFlag = pOp->p1 
7be0: 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f  ? (MEM_Null|MEM_
7bf0: 43 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e  Cleared) : MEM_N
7c00: 75 6c 6c 3b 0a 20 20 77 68 69 6c 65 28 20 63 6e  ull;.  while( cn
7c10: 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b  t>0 ){.    pOut+
7c20: 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  +;.    memAboutT
7c30: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
7c40: 3b 0a 20 20 20 20 56 64 62 65 4d 65 6d 52 65 6c  ;.    VdbeMemRel
7c50: 65 61 73 65 28 70 4f 75 74 29 3b 0a 20 20 20 20  ease(pOut);.    
7c60: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75  pOut->flags = nu
7c70: 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 63 6e 74 2d  llFlag;.    cnt-
7c80: 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  -;.  }.  break;.
7c90: 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  }.../* Opcode: B
7ca0: 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34 20 2a  lob P1 P2 * P4 *
7cb0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
7cc0: 50 32 5d 3d 50 34 20 28 6c 65 6e 3d 50 31 29 0a  P2]=P4 (len=P1).
7cd0: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
7ce0: 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61 74  to a blob of dat
7cf0: 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e  a P1 bytes long.
7d00: 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20    Store this.** 
7d10: 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72  blob in register
7d20: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
7d30: 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20  Blob: {         
7d40: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
7d50: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
7d60: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c  ssert( pOp->p1 <
7d70: 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e  = SQLITE_MAX_LEN
7d80: 47 54 48 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  GTH );.  sqlite3
7d90: 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f  VdbeMemSetStr(pO
7da0: 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70  ut, pOp->p4.z, p
7db0: 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20  Op->p1, 0, 0);. 
7dc0: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
7dd0: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
7de0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
7df0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
7e00: 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61  /* Opcode: Varia
7e10: 62 6c 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ble P1 P2 * P4 *
7e20: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
7e30: 50 32 5d 3d 70 61 72 61 6d 65 74 65 72 28 50 31  P2]=parameter(P1
7e40: 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73  ,P4).**.** Trans
7e50: 66 65 72 20 74 68 65 20 76 61 6c 75 65 73 20 6f  fer the values o
7e60: 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65  f bound paramete
7e70: 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74  r P1 into regist
7e80: 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74  er P2.**.** If t
7e90: 68 65 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  he parameter is 
7ea0: 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69 74 73 20  named, then its 
7eb0: 6e 61 6d 65 20 61 70 70 65 61 72 73 20 69 6e 20  name appears in 
7ec0: 50 34 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61  P4..** The P4 va
7ed0: 6c 75 65 20 69 73 20 75 73 65 64 20 62 79 20 73  lue is used by s
7ee0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
7ef0: 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f  meter_name()..*/
7f00: 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c  .case OP_Variabl
7f10: 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
7f20: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
7f30: 73 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61  se */.  Mem *pVa
7f40: 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75  r;       /* Valu
7f50: 65 20 62 65 69 6e 67 20 74 72 61 6e 73 66 65 72  e being transfer
7f60: 72 65 64 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74  red */..  assert
7f70: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70  ( pOp->p1>0 && p
7f80: 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61 72 20  Op->p1<=p->nVar 
7f90: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
7fa0: 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70  ->p4.z==0 || pOp
7fb0: 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e 61 7a 56 61 72  ->p4.z==p->azVar
7fc0: 5b 70 4f 70 2d 3e 70 31 2d 31 5d 20 29 3b 0a 20  [pOp->p1-1] );. 
7fd0: 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61 72   pVar = &p->aVar
7fe0: 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20  [pOp->p1 - 1];. 
7ff0: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
8000: 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20  MemTooBig(pVar) 
8010: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
8020: 62 69 67 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  big;.  }.  sqlit
8030: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
8040: 43 6f 70 79 28 70 4f 75 74 2c 20 70 56 61 72 2c  Copy(pOut, pVar,
8050: 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20   MEM_Static);.  
8060: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
8070: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
8080: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
8090: 3a 20 4d 6f 76 65 20 50 31 20 50 32 20 50 33 20  : Move P1 P2 P3 
80a0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
80b0: 20 20 72 5b 50 32 40 50 33 5d 3d 72 5b 50 31 40    r[P2@P3]=r[P1@
80c0: 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74  P3].**.** Move t
80d0: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
80e0: 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 20  ister P1..P1+P3 
80f0: 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  over into.** reg
8100: 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33  isters P2..P2+P3
8110: 2e 20 20 52 65 67 69 73 74 65 72 73 20 50 31 2e  .  Registers P1.
8120: 2e 50 31 2b 50 33 20 61 72 65 0a 2a 2a 20 6c 65  .P1+P3 are.** le
8130: 66 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c  ft holding a NUL
8140: 4c 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72 72  L.  It is an err
8150: 6f 72 20 66 6f 72 20 72 65 67 69 73 74 65 72 20  or for register 
8160: 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31  ranges.** P1..P1
8170: 2b 50 33 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50  +P3 and P2..P2+P
8180: 33 20 74 6f 20 6f 76 65 72 6c 61 70 2e 0a 2a 2f  3 to overlap..*/
8190: 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b  .case OP_Move: {
81a0: 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63  .  char *zMalloc
81b0: 3b 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 76  ;   /* Holding v
81c0: 61 72 69 61 62 6c 65 20 66 6f 72 20 61 6c 6c 6f  ariable for allo
81d0: 63 61 74 65 64 20 6d 65 6d 6f 72 79 20 2a 2f 0a  cated memory */.
81e0: 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
81f0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
8200: 72 65 67 69 73 74 65 72 73 20 6c 65 66 74 20 74  registers left t
8210: 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20  o copy */.  int 
8220: 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p1;          /* 
8230: 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79  Register to copy
8240: 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70   from */.  int p
8250: 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  2;          /* R
8260: 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20  egister to copy 
8270: 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70  to */..  n = pOp
8280: 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70  ->p3;.  p1 = pOp
8290: 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70  ->p1;.  p2 = pOp
82a0: 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
82b0: 6e 3e 3d 30 20 26 26 20 70 31 3e 30 20 26 26 20  n>=0 && p1>0 && 
82c0: 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p2>0 );.  assert
82d0: 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32  ( p1+n<=p2 || p2
82e0: 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e  +n<=p1 );..  pIn
82f0: 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20  1 = &aMem[p1];. 
8300: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32   pOut = &aMem[p2
8310: 5d 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73  ];.  do{.    ass
8320: 65 72 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d  ert( pOut<=&aMem
8330: 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  [(p->nMem-p->nCu
8340: 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73  rsor)] );.    as
8350: 73 65 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65  sert( pIn1<=&aMe
8360: 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  m[(p->nMem-p->nC
8370: 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61  ursor)] );.    a
8380: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
8390: 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d  d(pIn1) );.    m
83a0: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
83b0: 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 7a 4d  p, pOut);.    zM
83c0: 61 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d  alloc = pOut->zM
83d0: 61 6c 6c 6f 63 3b 0a 20 20 20 20 70 4f 75 74 2d  alloc;.    pOut-
83e0: 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  >zMalloc = 0;.  
83f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
8400: 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31 29  Move(pOut, pIn1)
8410: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
8420: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 4f  DEBUG.    if( pO
8430: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e 3d  ut->pScopyFrom>=
8440: 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f 75  &aMem[p1] && pOu
8450: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 26 61  t->pScopyFrom<&a
8460: 4d 65 6d 5b 70 31 2b 70 4f 70 2d 3e 70 33 5d 20  Mem[p1+pOp->p3] 
8470: 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 70  ){.      pOut->p
8480: 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20 70 31 20  ScopyFrom += p1 
8490: 2d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 20 20 7d  - pOp->p2;.    }
84a0: 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 49 6e 31  .#endif.    pIn1
84b0: 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c  ->zMalloc = zMal
84c0: 6c 6f 63 3b 0a 20 20 20 20 52 45 47 49 53 54 45  loc;.    REGISTE
84d0: 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f  R_TRACE(p2++, pO
84e0: 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b  ut);.    pIn1++;
84f0: 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d  .    pOut++;.  }
8500: 77 68 69 6c 65 28 20 6e 2d 2d 20 29 3b 0a 20 20  while( n-- );.  
8510: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
8520: 6f 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20  ode: Copy P1 P2 
8530: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
8540: 69 73 3a 20 72 5b 50 32 40 50 33 2b 31 5d 3d 72  is: r[P2@P3+1]=r
8550: 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20  [P1@P3+1].**.** 
8560: 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72  Make a copy of r
8570: 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b  egisters P1..P1+
8580: 50 33 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P3 into register
8590: 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a  s P2..P2+P3..**.
85a0: 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
85b0: 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70  ion makes a deep
85c0: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c   copy of the val
85d0: 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65  ue.  A duplicate
85e0: 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61  .** is made of a
85f0: 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f  ny string or blo
8600: 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65  b constant.  See
8610: 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a   also OP_SCopy..
8620: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a  */.case OP_Copy:
8630: 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e   {.  int n;..  n
8640: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49   = pOp->p3;.  pI
8650: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
8660: 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
8670: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
8680: 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49  assert( pOut!=pI
8690: 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 31  n1 );.  while( 1
86a0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
86b0: 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
86c0: 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45  y(pOut, pIn1, ME
86d0: 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20 44 65  M_Ephem);.    De
86e0: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75  ephemeralize(pOu
86f0: 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
8700: 45 5f 44 45 42 55 47 0a 20 20 20 20 70 4f 75 74  E_DEBUG.    pOut
8710: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30  ->pScopyFrom = 0
8720: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 52 45 47  ;.#endif.    REG
8730: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
8740: 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70  >p2+pOp->p3-n, p
8750: 4f 75 74 29 3b 0a 20 20 20 20 69 66 28 20 28 6e  Out);.    if( (n
8760: 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  --)==0 ) break;.
8770: 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20      pOut++;.    
8780: 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72  pIn1++;.  }.  br
8790: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
87a0: 65 3a 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a  e: SCopy P1 P2 *
87b0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
87c0: 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a  : r[P2]=r[P1].**
87d0: 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c  .** Make a shall
87e0: 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73  ow copy of regis
87f0: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
8800: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
8810: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
8820: 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20  makes a shallow 
8830: 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75  copy of the valu
8840: 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  e.  If the value
8850: 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20  .** is a string 
8860: 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68  or blob, then th
8870: 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61  e copy is only a
8880: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0a   pointer to the.
8890: 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20  ** original and 
88a0: 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f 72 69  hence if the ori
88b0: 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20 73 6f  ginal changes so
88c0: 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a   will the copy..
88d0: 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74 68 65  ** Worse, if the
88e0: 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64 65 61   original is dea
88f0: 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20 63 6f  llocated, the co
8900: 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c  py becomes inval
8910: 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65 20  id..** Thus the 
8920: 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67 75 61  program must gua
8930: 72 61 6e 74 65 65 20 74 68 61 74 20 74 68 65 20  rantee that the 
8940: 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f  original will no
8950: 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69  t change.** duri
8960: 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20  ng the lifetime 
8970: 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20 55 73  of the copy.  Us
8980: 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b  e OP_Copy to mak
8990: 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20  e a complete.** 
89a0: 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  copy..*/.case OP
89b0: 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20  _SCopy: {       
89c0: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
89d0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
89e0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
89f0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
8a00: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74  ;.  assert( pOut
8a10: 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69  !=pIn1 );.  sqli
8a20: 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
8a30: 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31  wCopy(pOut, pIn1
8a40: 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69  , MEM_Ephem);.#i
8a50: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
8a60: 47 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53  G.  if( pOut->pS
8a70: 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29 20 70 4f  copyFrom==0 ) pO
8a80: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d  ut->pScopyFrom =
8a90: 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66 0a 20 20   pIn1;.#endif.  
8aa0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
8ab0: 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77 20 50  ode: ResultRow P
8ac0: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
8ad0: 6e 6f 70 73 69 73 3a 20 20 6f 75 74 70 75 74 3d  nopsis:  output=
8ae0: 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  r[P1@P2].**.** T
8af0: 68 65 20 72 65 67 69 73 74 65 72 73 20 50 31 20  he registers P1 
8b00: 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d 31 20  through P1+P2-1 
8b10: 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65  contain a single
8b20: 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c   row of.** resul
8b30: 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20  ts. This opcode 
8b40: 63 61 75 73 65 73 20 74 68 65 20 73 71 6c 69 74  causes the sqlit
8b50: 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 20 74  e3_step() call t
8b60: 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77  o terminate.** w
8b70: 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f  ith an SQLITE_RO
8b80: 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e  W return code an
8b90: 64 20 69 74 20 73 65 74 73 20 75 70 20 74 68 65  d it sets up the
8ba0: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a   sqlite3_stmt.**
8bb0: 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 70 72   structure to pr
8bc0: 6f 76 69 64 65 20 61 63 63 65 73 73 20 74 6f 20  ovide access to 
8bd0: 74 68 65 20 72 5b 50 31 5d 2e 2e 72 5b 50 31 2b  the r[P1]..r[P1+
8be0: 50 32 2d 31 5d 20 76 61 6c 75 65 73 20 61 73 0a  P2-1] values as.
8bf0: 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f  ** the result ro
8c00: 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  w..*/.case OP_Re
8c10: 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d  sultRow: {.  Mem
8c20: 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b   *pMem;.  int i;
8c30: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52  .  assert( p->nR
8c40: 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70  esColumn==pOp->p
8c50: 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  2 );.  assert( p
8c60: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73  Op->p1>0 );.  as
8c70: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f  sert( pOp->p1+pO
8c80: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p2<=(p->nMem-
8c90: 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
8ca0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
8cb0: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
8cc0: 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 52 75 6e  ALLBACK.  /* Run
8cd0: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 6f   the progress co
8ce0: 75 6e 74 65 72 20 6a 75 73 74 20 62 65 66 6f 72  unter just befor
8cf0: 65 20 72 65 74 75 72 6e 69 6e 67 2e 0a 20 20 2a  e returning..  *
8d00: 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f  /.  if( db->xPro
8d10: 67 72 65 73 73 21 3d 30 0a 20 20 20 26 26 20 6e  gress!=0.   && n
8d20: 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73  VmStep>=nProgres
8d30: 73 4c 69 6d 69 74 0a 20 20 20 26 26 20 64 62 2d  sLimit.   && db-
8d40: 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70  >xProgress(db->p
8d50: 50 72 6f 67 72 65 73 73 41 72 67 29 21 3d 30 0a  ProgressArg)!=0.
8d60: 20 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51    ){.    rc = SQ
8d70: 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a  LITE_INTERRUPT;.
8d80: 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72      goto vdbe_er
8d90: 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 7d 0a 23 65  ror_halt;.  }.#e
8da0: 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68  ndif..  /* If th
8db0: 69 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73  is statement has
8dc0: 20 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69   violated immedi
8dd0: 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
8de0: 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a  constraints, do.
8df0: 20 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20    ** not return 
8e00: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
8e10: 77 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64  ws modified. And
8e20: 20 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45 20   do not RELEASE 
8e30: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20  the statement.  
8e40: 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  ** transaction. 
8e50: 49 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72  It needs to be r
8e60: 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a  olled back.  */.
8e70: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21    if( SQLITE_OK!
8e80: 3d 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64  =(rc = sqlite3Vd
8e90: 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29 29  beCheckFk(p, 0))
8ea0: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
8eb0: 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45  db->flags&SQLITE
8ec0: 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20  _CountRows );.  
8ed0: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73 65    assert( p->use
8ee0: 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a  sStmtJournal );.
8ef0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
8f00: 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49    /* If the SQLI
8f10: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61  TE_CountRows fla
8f20: 67 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69  g is set in sqli
8f30: 74 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  te3.flags mask, 
8f40: 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73  then .  ** DML s
8f50: 74 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65  tatements invoke
8f60: 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20   this opcode to 
8f70: 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  return the numbe
8f80: 72 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20  r of rows .  ** 
8f90: 6d 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65 20  modified to the 
8fa0: 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 68  user. This is th
8fb0: 65 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20  e only way that 
8fc0: 61 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f  a VM that.  ** o
8fd0: 70 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74  pens a statement
8fe0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79   transaction may
8ff0: 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63   invoke this opc
9000: 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49  ode..  **.  ** I
9010: 6e 20 63 61 73 65 20 74 68 69 73 20 69 73 20 73  n case this is s
9020: 75 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c  uch a statement,
9030: 20 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65   close any state
9040: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
9050: 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20  .  ** opened by 
9060: 74 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72  this VM before r
9070: 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c  eturning control
9080: 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68   to the user. Th
9090: 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e  is is to.  ** en
90a0: 73 75 72 65 20 74 68 61 74 20 73 74 61 74 65 6d  sure that statem
90b0: 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73  ent-transactions
90c0: 20 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74   are always nest
90d0: 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70  ed, not overlapp
90e0: 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65  ing..  ** If the
90f0: 20 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d   open statement-
9100: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
9110: 6f 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20  ot closed here, 
9120: 74 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20  then the user.  
9130: 2a 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74  ** may step anot
9140: 68 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e  her VM that open
9150: 73 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d  s its own statem
9160: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ent transaction.
9170: 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c   This.  ** may l
9180: 65 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69  ead to overlappi
9190: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  ng statement tra
91a0: 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a  nsactions..  **.
91b0: 20 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65    ** The stateme
91c0: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt transaction i
91d0: 73 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c 65  s never a top-le
91e0: 76 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  vel transaction.
91f0: 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65    Hence.  ** the
9200: 20 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62 65   RELEASE call be
9210: 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66 61  low can never fa
9220: 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  il..  */.  asser
9230: 74 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  t( p->iStatement
9240: 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73  ==0 || db->flags
9250: 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77  &SQLITE_CountRow
9260: 73 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  s );.  rc = sqli
9270: 74 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74  te3VdbeCloseStat
9280: 65 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49  ement(p, SAVEPOI
9290: 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20 69  NT_RELEASE);.  i
92a0: 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c  f( NEVER(rc!=SQL
92b0: 49 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62  ITE_OK) ){.    b
92c0: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  reak;.  }..  /* 
92d0: 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65  Invalidate all e
92e0: 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20  phemeral cursor 
92f0: 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20  row caches */.  
9300: 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70  p->cacheCtr = (p
9310: 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c  ->cacheCtr + 2)|
9320: 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75  1;..  /* Make su
9330: 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  re the results o
9340: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  f the current ro
9350: 77 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69  w are \000 termi
9360: 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68  nated.  ** and h
9370: 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20  ave an assigned 
9380: 74 79 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c  type.  The resul
9390: 74 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65  ts are de-epheme
93a0: 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20  ralized as.  ** 
93b0: 61 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20  a side effect.. 
93c0: 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e   */.  pMem = p->
93d0: 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61 4d  pResultSet = &aM
93e0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66  em[pOp->p1];.  f
93f0: 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70  or(i=0; i<pOp->p
9400: 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73  2; i++){.    ass
9410: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
9420: 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20  &pMem[i]) );.   
9430: 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
9440: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61  &pMem[i]);.    a
9450: 73 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e  ssert( (pMem[i].
9460: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65  flags & MEM_Ephe
9470: 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20  m)==0.          
9480: 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c    || (pMem[i].fl
9490: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
94a0: 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a  EM_Blob))==0 );.
94b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
94c0: 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26  emNulTerminate(&
94d0: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 73 71  pMem[i]);.    sq
94e0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72  lite3VdbeMemStor
94f0: 65 54 79 70 65 28 26 70 4d 65 6d 5b 69 5d 29 3b  eType(&pMem[i]);
9500: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
9510: 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26  ACE(pOp->p1+i, &
9520: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20  pMem[i]);.  }.  
9530: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
9540: 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  iled ) goto no_m
9550: 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e  em;..  /* Return
9560: 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f   SQLITE_ROW.  */
9570: 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20  .  p->pc = pc + 
9580: 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  1;.  rc = SQLITE
9590: 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62  _ROW;.  goto vdb
95a0: 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20  e_return;.}../* 
95b0: 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50  Opcode: Concat P
95c0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
95d0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
95e0: 5b 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]+r[P1].**.**
95f0: 20 41 64 64 20 74 68 65 20 74 65 78 74 20 69 6e   Add the text in
9600: 20 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74   register P1 ont
9610: 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  o the end of the
9620: 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69   text in.** regi
9630: 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72  ster P2 and stor
9640: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
9650: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
9660: 49 66 20 65 69 74 68 65 72 20 74 68 65 20 50 31  If either the P1
9670: 20 6f 72 20 50 32 20 74 65 78 74 20 61 72 65 20   or P2 text are 
9680: 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20  NULL then store 
9690: 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a  NULL in P3..**.*
96a0: 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50  *   P3 = P2 || P
96b0: 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c  1.**.** It is il
96c0: 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64  legal for P1 and
96d0: 20 50 33 20 74 6f 20 62 65 20 74 68 65 20 73 61   P3 to be the sa
96e0: 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d  me register. Som
96f0: 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33  etimes,.** if P3
9700: 20 69 73 20 74 68 65 20 73 61 6d 65 20 72 65 67   is the same reg
9710: 69 73 74 65 72 20 61 73 20 50 32 2c 20 74 68 65  ister as P2, the
9720: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
9730: 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76  is able.** to av
9740: 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a  oid a memcpy()..
9750: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61  */.case OP_Conca
9760: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  t: {           /
9770: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e  * same as TK_CON
9780: 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  CAT, in1, in2, o
9790: 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79  ut3 */.  i64 nBy
97a0: 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  te;..  pIn1 = &a
97b0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
97c0: 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
97d0: 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p2];.  pOut = 
97e0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
97f0: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d    assert( pIn1!=
9800: 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70  pOut );.  if( (p
9810: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
9820: 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f  2->flags) & MEM_
9830: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69  Null ){.    sqli
9840: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
9850: 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65  l(pOut);.    bre
9860: 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45 78  ak;.  }.  if( Ex
9870: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c  pandBlob(pIn1) |
9880: 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  | ExpandBlob(pIn
9890: 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  2) ) goto no_mem
98a0: 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49  ;.  Stringify(pI
98b0: 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n1, encoding);. 
98c0: 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c   Stringify(pIn2,
98d0: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42   encoding);.  nB
98e0: 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20  yte = pIn1->n + 
98f0: 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e  pIn2->n;.  if( n
9900: 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  Byte>db->aLimit[
9910: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
9920: 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
9930: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
9940: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
9950: 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20  Out, MEM_Str);. 
9960: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
9970: 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69  MemGrow(pOut, (i
9980: 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74  nt)nByte+2, pOut
9990: 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67  ==pIn2) ){.    g
99a0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
99b0: 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32    if( pOut!=pIn2
99c0: 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70   ){.    memcpy(p
99d0: 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c  Out->z, pIn2->z,
99e0: 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20   pIn2->n);.  }. 
99f0: 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a   memcpy(&pOut->z
9a00: 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d  [pIn2->n], pIn1-
9a10: 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20  >z, pIn1->n);.  
9a20: 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30  pOut->z[nByte]=0
9a30: 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74  ;.  pOut->z[nByt
9a40: 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74  e+1] = 0;.  pOut
9a50: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54  ->flags |= MEM_T
9a60: 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  erm;.  pOut->n =
9a70: 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70   (int)nByte;.  p
9a80: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
9a90: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
9aa0: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
9ab0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
9ac0: 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20   Opcode: Add P1 
9ad0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
9ae0: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
9af0: 50 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  P1]+r[P2].**.** 
9b00: 41 64 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e  Add the value in
9b10: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
9b20: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
9b30: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
9b40: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
9b50: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
9b60: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
9b70: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
9b80: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
9b90: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .*/./* Opcode: M
9ba0: 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50 33  ultiply P1 P2 P3
9bb0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
9bc0: 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72  :  r[P3]=r[P1]*r
9bd0: 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75  [P2].**.**.** Mu
9be0: 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65  ltiply the value
9bf0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
9c00: 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  by the value in 
9c10: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
9c20: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
9c30: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
9c40: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
9c50: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
9c60: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
9c70: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
9c80: 3a 20 53 75 62 74 72 61 63 74 20 50 31 20 50 32  : Subtract P1 P2
9c90: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
9ca0: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32  sis:  r[P3]=r[P2
9cb0: 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75  ]-r[P1].**.** Su
9cc0: 62 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65  btract the value
9cd0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
9ce0: 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69  from the value i
9cf0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
9d00: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
9d10: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
9d20: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
9d30: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
9d40: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
9d50: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
9d60: 64 65 3a 20 44 69 76 69 64 65 20 50 31 20 50 32  de: Divide P1 P2
9d70: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
9d80: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32  sis:  r[P3]=r[P2
9d90: 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69  ]/r[P1].**.** Di
9da0: 76 69 64 65 20 74 68 65 20 76 61 6c 75 65 20 69  vide the value i
9db0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79  n register P1 by
9dc0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
9dd0: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
9de0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
9df0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
9e00: 20 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20   (P3=P2/P1). If 
9e10: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a  the value in .**
9e20: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
9e30: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72  zero, then the r
9e40: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49  esult is NULL. I
9e50: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
9e60: 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20  s .** NULL, the 
9e70: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
9e80: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  */./* Opcode: Re
9e90: 6d 61 69 6e 64 65 72 20 50 31 20 50 32 20 50 33  mainder P1 P2 P3
9ea0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
9eb0: 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25 72  :  r[P3]=r[P2]%r
9ec0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75  [P1].**.** Compu
9ed0: 74 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72  te the remainder
9ee0: 20 61 66 74 65 72 20 69 6e 74 65 67 65 72 20 72   after integer r
9ef0: 65 67 69 73 74 65 72 20 50 32 20 69 73 20 64 69  egister P2 is di
9f00: 76 69 64 65 64 20 62 79 20 0a 2a 2a 20 72 65 67  vided by .** reg
9f10: 69 73 74 65 72 20 50 31 20 61 6e 64 20 73 74 6f  ister P1 and sto
9f20: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
9f30: 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 0a 2a   register P3. .*
9f40: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
9f50: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
9f60: 20 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74   zero the result
9f70: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20   is NULL..** If 
9f80: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
9f90: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
9fa0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  lt is NULL..*/.c
9fb0: 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20  ase OP_Add:     
9fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9fd0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53   same as TK_PLUS
9fe0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
9ff0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74   */.case OP_Subt
a000: 72 61 63 74 3a 20 20 20 20 20 20 20 20 20 20 20  ract:           
a010: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
a020: 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32  _MINUS, in1, in2
a030: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
a040: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20  P_Multiply:     
a050: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
a060: 20 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31   as TK_STAR, in1
a070: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
a080: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20  ase OP_Divide:  
a090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a0a0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53   same as TK_SLAS
a0b0: 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  H, in1, in2, out
a0c0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d  3 */.case OP_Rem
a0d0: 61 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20  ainder: {       
a0e0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
a0f0: 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c  K_REM, in1, in2,
a100: 20 6f 75 74 33 20 2a 2f 0a 20 20 63 68 61 72 20   out3 */.  char 
a110: 62 49 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53 74  bIntint;   /* St
a120: 61 72 74 65 64 20 6f 75 74 20 61 73 20 74 77 6f  arted out as two
a130: 20 69 6e 74 65 67 65 72 20 6f 70 65 72 61 6e 64   integer operand
a140: 73 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73  s */.  int flags
a150: 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e  ;      /* Combin
a160: 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66  ed MEM_* flags f
a170: 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74 73 20  rom both inputs 
a180: 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20 20  */.  i64 iA;    
a190: 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20       /* Integer 
a1a0: 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70  value of left op
a1b0: 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69  erand */.  i64 i
a1c0: 42 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  B;         /* In
a1d0: 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 72  teger value of r
a1e0: 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  ight operand */.
a1f0: 20 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20 20    double rA;    
a200: 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20    /* Real value 
a210: 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20  of left operand 
a220: 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b 20  */.  double rB; 
a230: 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c       /* Real val
a240: 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72  ue of right oper
a250: 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d  and */..  pIn1 =
a260: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
a270: 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41  .  applyNumericA
a280: 66 66 69 6e 69 74 79 28 70 49 6e 31 29 3b 0a 20  ffinity(pIn1);. 
a290: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
a2a0: 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 70 6c 79 4e  p->p2];.  applyN
a2b0: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
a2c0: 49 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  In2);.  pOut = &
a2d0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
a2e0: 20 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66   flags = pIn1->f
a2f0: 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61  lags | pIn2->fla
a300: 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73  gs;.  if( (flags
a310: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20   & MEM_Null)!=0 
a320: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
a330: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
a340: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
a350: 6c 61 67 73 20 26 20 70 49 6e 32 2d 3e 66 6c 61  lags & pIn2->fla
a360: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 4d  gs & MEM_Int)==M
a370: 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 69 41  EM_Int ){.    iA
a380: 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20   = pIn1->u.i;.  
a390: 20 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69    iB = pIn2->u.i
a3a0: 3b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20  ;.    bIntint = 
a3b0: 31 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70  1;.    switch( p
a3c0: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20  Op->opcode ){.  
a3d0: 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a      case OP_Add:
a3e0: 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
a3f0: 65 33 41 64 64 49 6e 74 36 34 28 26 69 42 2c 69  e3AddInt64(&iB,i
a400: 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74  A) ) goto fp_mat
a410: 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  h;  break;.     
a420: 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63   case OP_Subtrac
a430: 74 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  t:  if( sqlite3S
a440: 75 62 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ubInt64(&iB,iA) 
a450: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
a460: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
a470: 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20  se OP_Multiply: 
a480: 20 69 66 28 20 73 71 6c 69 74 65 33 4d 75 6c 49   if( sqlite3MulI
a490: 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67  nt64(&iB,iA) ) g
a4a0: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72  oto fp_math;  br
a4b0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
a4c0: 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20  OP_Divide: {.   
a4d0: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29       if( iA==0 )
a4e0: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
a4f0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
a500: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
a510: 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c  =-1 && iB==SMALL
a520: 45 53 54 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f  EST_INT64 ) goto
a530: 20 66 70 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20   fp_math;.      
a540: 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20    iB /= iA;.    
a550: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
a560: 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74   }.      default
a570: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  : {.        if( 
a580: 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  iA==0 ) goto ari
a590: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
a5a0: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
a5b0: 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20  if( iA==-1 ) iA 
a5c0: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20  = 1;.        iB 
a5d0: 25 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62  %= iA;.        b
a5e0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
a5f0: 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e    }.    pOut->u.
a600: 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53  i = iB;.    MemS
a610: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
a620: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c   MEM_Int);.  }el
a630: 73 65 7b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20  se{.    bIntint 
a640: 3d 20 30 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20  = 0;.fp_math:.  
a650: 20 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64    rA = sqlite3Vd
a660: 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31  beRealValue(pIn1
a670: 29 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69  );.    rB = sqli
a680: 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
a690: 28 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74  (pIn2);.    swit
a6a0: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
a6b0: 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  ){.      case OP
a6c0: 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 72 42  _Add:         rB
a6d0: 20 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72   += rA;       br
a6e0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
a6f0: 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20  OP_Subtract:    
a700: 72 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20  rB -= rA;       
a710: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
a720: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
a730: 20 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20    rB *= rA;     
a740: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
a750: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b  ase OP_Divide: {
a760: 0a 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75  .        /* (dou
a770: 62 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66  ble)0 In case of
a780: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
a790: 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a  ATING_POINT... *
a7a0: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 41  /.        if( rA
a7b0: 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f  ==(double)0 ) go
a7c0: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
a7d0: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
a7e0: 20 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a        rB /= rA;.
a7f0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
a800: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66       }.      def
a810: 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20  ault: {.        
a820: 69 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20 20  iA = (i64)rA;.  
a830: 20 20 20 20 20 20 69 42 20 3d 20 28 69 36 34 29        iB = (i64)
a840: 72 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  rB;.        if( 
a850: 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  iA==0 ) goto ari
a860: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
a870: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
a880: 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20  if( iA==-1 ) iA 
a890: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20  = 1;.        rB 
a8a0: 3d 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20  = (double)(iB % 
a8b0: 69 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65  iA);.        bre
a8c0: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
a8d0: 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  }.#ifdef SQLITE_
a8e0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
a8f0: 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  INT.    pOut->u.
a900: 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53  i = rB;.    MemS
a910: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
a920: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65   MEM_Int);.#else
a930: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
a940: 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20  IsNaN(rB) ){.   
a950: 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74     goto arithmet
a960: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
a970: 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75  l;.    }.    pOu
a980: 74 2d 3e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d  t->r = rB;.    M
a990: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
a9a0: 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20  ut, MEM_Real);. 
a9b0: 20 20 20 69 66 28 20 28 66 6c 61 67 73 20 26 20     if( (flags & 
a9c0: 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20  MEM_Real)==0 && 
a9d0: 21 62 49 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20  !bIntint ){.    
a9e0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74    sqlite3VdbeInt
a9f0: 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75  egerAffinity(pOu
aa00: 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  t);.    }.#endif
aa10: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61  .  }.  break;..a
aa20: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
aa30: 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69  _is_null:.  sqli
aa40: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
aa50: 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  l(pOut);.  break
aa60: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
aa70: 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20 2a 20 50  CollSeq P1 * * P
aa80: 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  4.**.** P4 is a 
aa90: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c  pointer to a Col
aaa0: 6c 53 65 71 20 73 74 72 75 63 74 2e 20 49 66 20  lSeq struct. If 
aab0: 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f  the next call to
aac0: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
aad0: 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65  .** or aggregate
aae0: 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65   calls sqlite3Ge
aaf0: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20  tFuncCollSeq(), 
ab00: 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  this collation s
ab10: 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20  equence will.** 
ab20: 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69  be returned. Thi
ab30: 73 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  s is used by the
ab40: 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c   built-in min(),
ab50: 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69   max() and nulli
ab60: 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  f().** functions
ab70: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73  ..**.** If P1 is
ab80: 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
ab90: 69 74 20 69 73 20 61 20 72 65 67 69 73 74 65 72  it is a register
aba0: 20 74 68 61 74 20 61 20 73 75 62 73 65 71 75 65   that a subseque
abb0: 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d  nt min() or.** m
abc0: 61 78 28 29 20 61 67 67 72 65 67 61 74 65 20 77  ax() aggregate w
abd0: 69 6c 6c 20 73 65 74 20 74 6f 20 31 20 69 66 20  ill set to 1 if 
abe0: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
abf0: 69 73 20 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d  is not the minim
ac00: 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d  um or.** maximum
ac10: 2e 20 20 54 68 65 20 50 31 20 72 65 67 69 73 74  .  The P1 regist
ac20: 65 72 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  er is initialize
ac30: 64 20 74 6f 20 30 20 62 79 20 74 68 69 73 20 69  d to 0 by this i
ac40: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
ac50: 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
ac60: 75 73 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c  used by the impl
ac70: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
ac80: 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64  e aforementioned
ac90: 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f   functions.** to
aca0: 20 72 65 74 72 69 65 76 65 20 74 68 65 20 63 6f   retrieve the co
acb0: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
acc0: 20 73 65 74 20 62 79 20 74 68 69 73 20 6f 70 63   set by this opc
acd0: 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  ode is not avail
ace0: 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79  able.** publicly
acf0: 2c 20 6f 6e 6c 79 20 74 6f 20 75 73 65 72 20 66  , only to user f
ad00: 75 6e 63 74 69 6f 6e 73 20 64 65 66 69 6e 65 64  unctions defined
ad10: 20 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a 2f 0a 63   in func.c..*/.c
ad20: 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20  ase OP_CollSeq: 
ad30: 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
ad40: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c  >p4type==P4_COLL
ad50: 53 45 51 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  SEQ );.  if( pOp
ad60: 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69  ->p1 ){.    sqli
ad70: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
ad80: 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  64(&aMem[pOp->p1
ad90: 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65  ], 0);.  }.  bre
ada0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
adb0: 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31 20 50 32  : Function P1 P2
adc0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
add0: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66 75 6e  opsis: r[P3]=fun
ade0: 63 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a  c(r[P2@P5]).**.*
adf0: 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72 20  * Invoke a user 
ae00: 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73 20  function (P4 is 
ae10: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 46  a pointer to a F
ae20: 75 6e 63 74 69 6f 6e 20 73 74 72 75 63 74 75 72  unction structur
ae30: 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65  e that.** define
ae40: 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 29 20  s the function) 
ae50: 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74  with P5 argument
ae60: 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67  s taken from reg
ae70: 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20  ister P2 and.** 
ae80: 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65  successors.  The
ae90: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66   result of the f
aea0: 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65  unction is store
aeb0: 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
aec0: 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33  ..** Register P3
aed0: 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65   must not be one
aee0: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
aef0: 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50   inputs..**.** P
af00: 31 20 69 73 20 61 20 33 32 2d 62 69 74 20 62 69  1 is a 32-bit bi
af10: 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67  tmask indicating
af20: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
af30: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f  each argument to
af40: 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f   the .** functio
af50: 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64  n was determined
af60: 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20   to be constant 
af70: 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e  at compile time.
af80: 20 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   If the first.**
af90: 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f   argument was co
afa0: 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20  nstant then bit 
afb0: 30 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20  0 of P1 is set. 
afc0: 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20  This is used to 
afd0: 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65  determine.** whe
afe0: 74 68 65 72 20 6d 65 74 61 20 64 61 74 61 20 61  ther meta data a
aff0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
b000: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61   user function a
b010: 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68  rgument using th
b020: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74  e.** sqlite3_set
b030: 5f 61 75 78 64 61 74 61 28 29 20 41 50 49 20 6d  _auxdata() API m
b040: 61 79 20 62 65 20 73 61 66 65 6c 79 20 72 65 74  ay be safely ret
b050: 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20  ained until the 
b060: 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  next.** invocati
b070: 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64  on of this opcod
b080: 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
b090: 6f 3a 20 41 67 67 53 74 65 70 20 61 6e 64 20 41  o: AggStep and A
b0a0: 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20  ggFinal.*/.case 
b0b0: 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20  OP_Function: {. 
b0c0: 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70   int i;.  Mem *p
b0d0: 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  Arg;.  sqlite3_c
b0e0: 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71  ontext ctx;.  sq
b0f0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70  lite3_value **ap
b100: 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20  Val;.  int n;.. 
b110: 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20   n = pOp->p5;.  
b120: 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67  apVal = p->apArg
b130: 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56 61  ;.  assert( apVa
b140: 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 61  l || n==0 );.  a
b150: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
b160: 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
b170: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
b180: 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  ) );.  pOut = &a
b190: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
b1a0: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
b1b0: 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 61 73  (p, pOut);..  as
b1c0: 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70  sert( n==0 || (p
b1d0: 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
b1e0: 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  >p2+n<=(p->nMem-
b1f0: 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29  p->nCursor)+1) )
b200: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
b210: 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70  >p3<pOp->p2 || p
b220: 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b  Op->p3>=pOp->p2+
b230: 6e 20 29 3b 0a 20 20 70 41 72 67 20 3d 20 26 61  n );.  pArg = &a
b240: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
b250: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
b260: 2b 2c 20 70 41 72 67 2b 2b 29 7b 0a 20 20 20 20  +, pArg++){.    
b270: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
b280: 69 64 28 70 41 72 67 29 20 29 3b 0a 20 20 20 20  id(pArg) );.    
b290: 61 70 56 61 6c 5b 69 5d 20 3d 20 70 41 72 67 3b  apVal[i] = pArg;
b2a0: 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c  .    Deephemeral
b2b0: 69 7a 65 28 70 41 72 67 29 3b 0a 20 20 20 20 73  ize(pArg);.    s
b2c0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f  qlite3VdbeMemSto
b2d0: 72 65 54 79 70 65 28 70 41 72 67 29 3b 0a 20 20  reType(pArg);.  
b2e0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
b2f0: 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 41 72 67  (pOp->p2+i, pArg
b300: 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74  );.  }..  assert
b310: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
b320: 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 63  4_FUNCDEF );.  c
b330: 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e  tx.pFunc = pOp->
b340: 70 34 2e 70 46 75 6e 63 3b 0a 20 20 63 74 78 2e  p4.pFunc;.  ctx.
b350: 69 4f 70 20 3d 20 70 63 3b 0a 20 20 63 74 78 2e  iOp = pc;.  ctx.
b360: 70 56 64 62 65 20 3d 20 70 3b 0a 0a 20 20 2f 2a  pVdbe = p;..  /*
b370: 20 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c 6c   The output cell
b380: 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61 76   may already hav
b390: 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f 63  e a buffer alloc
b3a0: 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20  ated. Move.  ** 
b3b0: 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 63  the pointer to c
b3c0: 74 78 2e 73 20 73 6f 20 69 6e 20 63 61 73 65 20  tx.s so in case 
b3d0: 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f  the user-functio
b3e0: 6e 20 63 61 6e 20 75 73 65 0a 20 20 2a 2a 20 74  n can use.  ** t
b3f0: 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63  he already alloc
b400: 61 74 65 64 20 62 75 66 66 65 72 20 69 6e 73 74  ated buffer inst
b410: 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e  ead of allocatin
b420: 67 20 61 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a  g a new one..  *
b430: 2f 0a 20 20 6d 65 6d 63 70 79 28 26 63 74 78 2e  /.  memcpy(&ctx.
b440: 73 2c 20 70 4f 75 74 2c 20 73 69 7a 65 6f 66 28  s, pOut, sizeof(
b450: 4d 65 6d 29 29 3b 0a 20 20 70 4f 75 74 2d 3e 66  Mem));.  pOut->f
b460: 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
b470: 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d 20  .  pOut->xDel = 
b480: 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c  0;.  pOut->zMall
b490: 6f 63 20 3d 20 30 3b 0a 20 20 4d 65 6d 53 65 74  oc = 0;.  MemSet
b4a0: 54 79 70 65 46 6c 61 67 28 26 63 74 78 2e 73 2c  TypeFlag(&ctx.s,
b4b0: 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 63   MEM_Null);..  c
b4c0: 74 78 2e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d  tx.fErrorOrAux =
b4d0: 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46   0;.  if( ctx.pF
b4e0: 75 6e 63 2d 3e 66 75 6e 63 46 6c 61 67 73 20 26  unc->funcFlags &
b4f0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45   SQLITE_FUNC_NEE
b500: 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73  DCOLL ){.    ass
b510: 65 72 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a  ert( pOp>aOp );.
b520: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
b530: 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43  -1].p4type==P4_C
b540: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73  OLLSEQ );.    as
b550: 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70  sert( pOp[-1].op
b560: 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71  code==OP_CollSeq
b570: 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c   );.    ctx.pCol
b580: 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70  l = pOp[-1].p4.p
b590: 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e  Coll;.  }.  db->
b5a0: 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74  lastRowid = last
b5b0: 52 6f 77 69 64 3b 0a 20 20 28 2a 63 74 78 2e 70  Rowid;.  (*ctx.p
b5c0: 46 75 6e 63 2d 3e 78 46 75 6e 63 29 28 26 63 74  Func->xFunc)(&ct
b5d0: 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a  x, n, apVal); /*
b5e0: 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33   IMP: R-24505-23
b5f0: 32 33 30 20 2a 2f 0a 20 20 6c 61 73 74 52 6f 77  230 */.  lastRow
b600: 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77  id = db->lastRow
b610: 69 64 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e 6d  id;..  if( db->m
b620: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20  allocFailed ){. 
b630: 20 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75 67     /* Even thoug
b640: 68 20 61 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73  h a malloc() has
b650: 20 66 61 69 6c 65 64 2c 20 74 68 65 20 69 6d 70   failed, the imp
b660: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  lementation of t
b670: 68 65 0a 20 20 20 20 2a 2a 20 75 73 65 72 20 66  he.    ** user f
b680: 75 6e 63 74 69 6f 6e 20 6d 61 79 20 68 61 76 65  unction may have
b690: 20 63 61 6c 6c 65 64 20 61 6e 20 73 71 6c 69 74   called an sqlit
b6a0: 65 33 5f 72 65 73 75 6c 74 5f 58 58 58 28 29 20  e3_result_XXX() 
b6b0: 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 2a 2a 20  function.    ** 
b6c0: 74 6f 20 72 65 74 75 72 6e 20 61 20 76 61 6c 75  to return a valu
b6d0: 65 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  e. The following
b6e0: 20 63 61 6c 6c 20 72 65 6c 65 61 73 65 73 20 61   call releases a
b6f0: 6e 79 20 72 65 73 6f 75 72 63 65 73 0a 20 20 20  ny resources.   
b700: 20 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77   ** associated w
b710: 69 74 68 20 73 75 63 68 20 61 20 76 61 6c 75 65  ith such a value
b720: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c  ..    */.    sql
b730: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
b740: 73 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 20 20  se(&ctx.s);.    
b750: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
b760: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75  ..  /* If the fu
b770: 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20  nction returned 
b780: 61 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20  an error, throw 
b790: 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a  an exception */.
b7a0: 20 20 69 66 28 20 63 74 78 2e 66 45 72 72 6f 72    if( ctx.fError
b7b0: 4f 72 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28  OrAux ){.    if(
b7c0: 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a   ctx.isError ){.
b7d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
b7e0: 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
b7f0: 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
b800: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
b810: 28 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 20  (&ctx.s));.     
b820: 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f   rc = ctx.isErro
b830: 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  r;.    }.    sql
b840: 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 41 75  ite3VdbeDeleteAu
b850: 78 44 61 74 61 28 70 2c 20 70 63 2c 20 70 4f 70  xData(p, pc, pOp
b860: 2d 3e 70 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  ->p1);.  }..  /*
b870: 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74   Copy the result
b880: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
b890: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
b8a0: 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64  3 */.  sqlite3Vd
b8b0: 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
b8c0: 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64 69 6e  (&ctx.s, encodin
b8d0: 67 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  g);.  assert( pO
b8e0: 75 74 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e  ut->flags==MEM_N
b8f0: 75 6c 6c 20 29 3b 0a 20 20 6d 65 6d 63 70 79 28  ull );.  memcpy(
b900: 70 4f 75 74 2c 20 26 63 74 78 2e 73 2c 20 73 69  pOut, &ctx.s, si
b910: 7a 65 6f 66 28 4d 65 6d 29 29 3b 0a 20 20 69 66  zeof(Mem));.  if
b920: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
b930: 54 6f 6f 42 69 67 28 70 4f 75 74 29 20 29 7b 0a  TooBig(pOut) ){.
b940: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
b950: 3b 0a 20 20 7d 0a 0a 23 69 66 20 30 0a 20 20 2f  ;.  }..#if 0.  /
b960: 2a 20 54 68 65 20 61 70 70 2d 64 65 66 69 6e 65  * The app-define
b970: 64 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 64  d function has d
b980: 6f 6e 65 20 73 6f 6d 65 74 68 69 6e 67 20 74 68  one something th
b990: 61 74 20 61 73 20 63 61 75 73 65 64 20 74 68 69  at as caused thi
b9a0: 73 0a 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74  s.  ** statement
b9b0: 20 74 6f 20 65 78 70 69 72 65 2e 20 20 28 50 65   to expire.  (Pe
b9c0: 72 68 61 70 73 20 74 68 65 20 66 75 6e 63 74 69  rhaps the functi
b9d0: 6f 6e 20 63 61 6c 6c 65 64 20 73 71 6c 69 74 65  on called sqlite
b9e0: 33 5f 65 78 65 63 28 29 0a 20 20 2a 2a 20 77 69  3_exec().  ** wi
b9f0: 74 68 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  th a CREATE TABL
ba00: 45 20 73 74 61 74 65 6d 65 6e 74 2e 29 0a 20 20  E statement.).  
ba10: 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69  */.  if( p->expi
ba20: 72 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54  red ) rc = SQLIT
ba30: 45 5f 41 42 4f 52 54 3b 0a 23 65 6e 64 69 66 0a  E_ABORT;.#endif.
ba40: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
ba50: 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29  E(pOp->p3, pOut)
ba60: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
ba70: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
ba80: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
ba90: 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20  code: BitAnd P1 
baa0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
bab0: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
bac0: 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  P1]&r[P2].**.** 
bad0: 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73  Take the bit-wis
bae0: 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c  e AND of the val
baf0: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
bb00: 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
bb10: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
bb20: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
bb30: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
bb40: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
bb50: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
bb60: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
bb70: 42 69 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a  BitOr P1 P2 P3 *
bb80: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
bb90: 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50   r[P3]=r[P1]|r[P
bba0: 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68  2].**.** Take th
bbb0: 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66  e bit-wise OR of
bbc0: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
bbd0: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
bbe0: 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
bbf0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
bc00: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
bc10: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
bc20: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
bc30: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
bc40: 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66  Opcode: ShiftLef
bc50: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
bc60: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
bc70: 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a  3]=r[P2]<<r[P1].
bc80: 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20  **.** Shift the 
bc90: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e  integer value in
bca0: 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
bcb0: 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a  the left by the.
bcc0: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  ** number of bit
bcd0: 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  s specified by t
bce0: 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65  he integer in re
bcf0: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74  gister P1..** St
bd00: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
bd10: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
bd20: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
bd30: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
bd40: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
bd50: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69  /./* Opcode: Shi
bd60: 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50 33  ftRight P1 P2 P3
bd70: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
bd80: 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e  :  r[P3]=r[P2]>>
bd90: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66  r[P1].**.** Shif
bda0: 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  t the integer va
bdb0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
bdc0: 50 32 20 74 6f 20 74 68 65 20 72 69 67 68 74 20  P2 to the right 
bdd0: 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72  by the.** number
bde0: 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69   of bits specifi
bdf0: 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65  ed by the intege
be00: 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  r in register P1
be10: 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72  ..** Store the r
be20: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
be30: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
be40: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
be50: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
be60: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
be70: 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20  _BitAnd:        
be80: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
be90: 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69   as TK_BITAND, i
bea0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
beb0: 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20  .case OP_BitOr: 
bec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bed0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42   /* same as TK_B
bee0: 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  ITOR, in1, in2, 
bef0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
bf00: 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20  ShiftLeft:      
bf10: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
bf20: 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e  as TK_LSHIFT, in
bf30: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
bf40: 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67  case OP_ShiftRig
bf50: 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ht: {           
bf60: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53  /* same as TK_RS
bf70: 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  HIFT, in1, in2, 
bf80: 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41  out3 */.  i64 iA
bf90: 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36  ;.  u64 uA;.  i6
bfa0: 34 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a  4 iB;.  u8 op;..
bfb0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
bfc0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20  Op->p1];.  pIn2 
bfd0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
bfe0: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
bff0: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
c000: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20   (pIn1->flags | 
c010: 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d  pIn2->flags) & M
c020: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
c030: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
c040: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  Null(pOut);.    
c050: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20  break;.  }.  iA 
c060: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
c070: 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69  Value(pIn2);.  i
c080: 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  B = sqlite3VdbeI
c090: 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  ntValue(pIn1);. 
c0a0: 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64   op = pOp->opcod
c0b0: 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f  e;.  if( op==OP_
c0c0: 42 69 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41  BitAnd ){.    iA
c0d0: 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20   &= iB;.  }else 
c0e0: 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72  if( op==OP_BitOr
c0f0: 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42   ){.    iA |= iB
c100: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42  ;.  }else if( iB
c110: 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  !=0 ){.    asser
c120: 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52  t( op==OP_ShiftR
c130: 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53  ight || op==OP_S
c140: 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20  hiftLeft );..   
c150: 20 2f 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20   /* If shifting 
c160: 62 79 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d  by a negative am
c170: 6f 75 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74  ount, shift in t
c180: 68 65 20 6f 74 68 65 72 20 64 69 72 65 63 74 69  he other directi
c190: 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42  on */.    if( iB
c1a0: 3c 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  <0 ){.      asse
c1b0: 72 74 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68  rt( OP_ShiftRigh
c1c0: 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b  t==OP_ShiftLeft+
c1d0: 31 20 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20  1 );.      op = 
c1e0: 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b  2*OP_ShiftLeft +
c1f0: 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69   1 - op;.      i
c200: 42 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d  B = iB>(-64) ? -
c210: 69 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a  iB : 64;.    }..
c220: 20 20 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29      if( iB>=64 )
c230: 7b 0a 20 20 20 20 20 20 69 41 20 3d 20 28 69 41  {.      iA = (iA
c240: 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68  >=0 || op==OP_Sh
c250: 69 66 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d  iftLeft) ? 0 : -
c260: 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  1;.    }else{.  
c270: 20 20 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20      memcpy(&uA, 
c280: 26 69 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29  &iA, sizeof(uA))
c290: 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d  ;.      if( op==
c2a0: 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a  OP_ShiftLeft ){.
c2b0: 20 20 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69          uA <<= i
c2c0: 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  B;.      }else{.
c2d0: 20 20 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69          uA >>= i
c2e0: 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69  B;.        /* Si
c2f0: 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72  gn-extend on a r
c300: 69 67 68 74 20 73 68 69 66 74 20 6f 66 20 61 20  ight shift of a 
c310: 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20  negative number 
c320: 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  */.        if( i
c330: 41 3c 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28  A<0 ) uA |= ((((
c340: 75 36 34 29 30 78 66 66 66 66 66 66 66 66 29 3c  u64)0xffffffff)<
c350: 3c 33 32 29 7c 30 78 66 66 66 66 66 66 66 66 29  <32)|0xffffffff)
c360: 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20   << (64-iB);.   
c370: 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70     }.      memcp
c380: 79 28 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65  y(&iA, &uA, size
c390: 6f 66 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20  of(iA));.    }. 
c3a0: 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d   }.  pOut->u.i =
c3b0: 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70   iA;.  MemSetTyp
c3c0: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
c3d0: 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Int);.  break;.}
c3e0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64  ../* Opcode: Add
c3f0: 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a  Imm  P1 P2 * * *
c400: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
c410: 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a  [P1]=r[P1]+P2.**
c420: 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e   .** Add the con
c430: 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20  stant P2 to the 
c440: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
c450: 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73  r P1..** The res
c460: 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e  ult is always an
c470: 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20   integer..**.** 
c480: 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67  To force any reg
c490: 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69  ister to be an i
c4a0: 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64  nteger, just add
c4b0: 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41   0..*/.case OP_A
c4c0: 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20  ddImm: {        
c4d0: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
c4e0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
c4f0: 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p1];.  memAbou
c500: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
c510: 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
c520: 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
c530: 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  In1);.  pIn1->u.
c540: 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  i += pOp->p2;.  
c550: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
c560: 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50  ode: MustBeInt P
c570: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a  1 P2 * * *.** .*
c580: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
c590: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
c5a0: 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
c5b0: 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  r.  If the value
c5c0: 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74  .** in P1 is not
c5d0: 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20   an integer and 
c5e0: 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  cannot be conver
c5f0: 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65  ted into an inte
c600: 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64  ger.** without d
c610: 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a  ata loss, then j
c620: 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
c630: 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d  to P2, or if P2=
c640: 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53  =0.** raise an S
c650: 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65  QLITE_MISMATCH e
c660: 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  xception..*/.cas
c670: 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20  e OP_MustBeInt: 
c680: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
c690: 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
c6a0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
c6b0: 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p1];.  if( (pIn
c6c0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
c6d0: 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70  nt)==0 ){.    ap
c6e0: 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31  plyAffinity(pIn1
c6f0: 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  , SQLITE_AFF_NUM
c700: 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  ERIC, encoding);
c710: 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  .    if( (pIn1->
c720: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
c730: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
c740: 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20   pOp->p2==0 ){. 
c750: 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
c760: 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20  TE_MISMATCH;.   
c770: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
c780: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
c790: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
c7a0: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
c7b0: 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 62 72 65  - 1;.        bre
c7c0: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
c7d0: 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79  }.  }.  MemSetTy
c7e0: 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d  peFlag(pIn1, MEM
c7f0: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
c800: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
c810: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
c820: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
c830: 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31   RealAffinity P1
c840: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49   * * * *.**.** I
c850: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f  f register P1 ho
c860: 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63  lds an integer c
c870: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72  onvert it to a r
c880: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a  eal value..**.**
c890: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
c8a0: 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63  used when extrac
c8b0: 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ting information
c8c0: 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74   from a column t
c8d0: 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20  hat.** has REAL 
c8e0: 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20  affinity.  Such 
c8f0: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61  column values ma
c900: 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65  y still be store
c910: 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73  d as.** integers
c920: 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69  , for space effi
c930: 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65  ciency, but afte
c940: 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20  r extraction we 
c950: 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20  want them.** to 
c960: 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c  have only a real
c970: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
c980: 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a  OP_RealAffinity:
c990: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
c9a0: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
c9b0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
c9c0: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
c9d0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
c9e0: 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  nt ){.    sqlite
c9f0: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
ca00: 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
ca10: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
ca20: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
ca30: 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65  T_CAST./* Opcode
ca40: 3a 20 54 6f 54 65 78 74 20 50 31 20 2a 20 2a 20  : ToText P1 * * 
ca50: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
ca60: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
ca70: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74  ister P1 to be t
ca80: 65 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  ext..** If the v
ca90: 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c  alue is numeric,
caa0: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
cab0: 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20 74 68   string using th
cac0: 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20  e.** equivalent 
cad0: 6f 66 20 73 70 72 69 6e 74 66 28 29 2e 20 20 42  of sprintf().  B
cae0: 6c 6f 62 20 76 61 6c 75 65 73 20 61 72 65 20 75  lob values are u
caf0: 6e 63 68 61 6e 67 65 64 20 61 6e 64 0a 2a 2a 20  nchanged and.** 
cb00: 61 72 65 20 61 66 74 65 72 77 61 72 64 73 20 73  are afterwards s
cb10: 69 6d 70 6c 79 20 69 6e 74 65 72 70 72 65 74 65  imply interprete
cb20: 64 20 61 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a  d as text..**.**
cb30: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
cb40: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
cb50: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
cb60: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
cb70: 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 54 65 78  */.case OP_ToTex
cb80: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
cb90: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
cba0: 20 54 4b 5f 54 4f 5f 54 45 58 54 2c 20 69 6e 31   TK_TO_TEXT, in1
cbb0: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
cbc0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d  em[pOp->p1];.  m
cbd0: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
cbe0: 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66 28 20  p, pIn1);.  if( 
cbf0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
cc00: 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a  M_Null ) break;.
cc10: 20 20 61 73 73 65 72 74 28 20 4d 45 4d 5f 53 74    assert( MEM_St
cc20: 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e 33 29  r==(MEM_Blob>>3)
cc30: 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
cc40: 73 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67  s |= (pIn1->flag
cc50: 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33 3b 0a  s&MEM_Blob)>>3;.
cc60: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
cc70: 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46  pIn1, SQLITE_AFF
cc80: 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29  _TEXT, encoding)
cc90: 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42  ;.  rc = ExpandB
cca0: 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61 73 73  lob(pIn1);.  ass
ccb0: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
ccc0: 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62   & MEM_Str || db
ccd0: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
cce0: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
ccf0: 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  &= ~(MEM_Int|MEM
cd00: 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62 7c 4d  _Real|MEM_Blob|M
cd10: 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50 44 41  EM_Zero);.  UPDA
cd20: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
cd30: 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pIn1);.  break;.
cd40: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f  }../* Opcode: To
cd50: 42 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  Blob P1 * * * *.
cd60: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
cd70: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
cd80: 72 20 50 31 20 74 6f 20 62 65 20 61 20 42 4c 4f  r P1 to be a BLO
cd90: 42 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  B..** If the val
cda0: 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63  ue is numeric, c
cdb0: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 73  onvert it to a s
cdc0: 74 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a 2a 20  tring first..** 
cdd0: 53 74 72 69 6e 67 73 20 61 72 65 20 73 69 6d 70  Strings are simp
cde0: 6c 79 20 72 65 69 6e 74 65 72 70 72 65 74 65 64  ly reinterpreted
cdf0: 20 61 73 20 62 6c 6f 62 73 20 77 69 74 68 20 6e   as blobs with n
ce00: 6f 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f 20 74  o change.** to t
ce10: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61  he underlying da
ce20: 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  ta..**.** A NULL
ce30: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
ce40: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
ce50: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
ce60: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
ce70: 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20 20   OP_ToBlob: {   
ce80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ce90: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
cea0: 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  BLOB, in1 */.  p
ceb0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
cec0: 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p1];.  if( pIn1
ced0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
cee0: 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 69 66  ll ) break;.  if
cef0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
cf00: 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b   MEM_Blob)==0 ){
cf10: 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
cf20: 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f  ty(pIn1, SQLITE_
cf30: 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69  AFF_TEXT, encodi
cf40: 6e 67 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ng);.    assert(
cf50: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
cf60: 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61  EM_Str || db->ma
cf70: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
cf80: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
cf90: 28 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29  (pIn1, MEM_Blob)
cfa0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
cfb0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28  In1->flags &= ~(
cfc0: 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e 4d 45  MEM_TypeMask&~ME
cfd0: 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20 55  M_Blob);.  }.  U
cfe0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
cff0: 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61  ZE(pIn1);.  brea
d000: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
d010: 20 54 6f 4e 75 6d 65 72 69 63 20 50 31 20 2a 20   ToNumeric P1 * 
d020: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  * * *.**.** Forc
d030: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
d040: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
d050: 20 6e 75 6d 65 72 69 63 20 28 65 69 74 68 65 72   numeric (either
d060: 20 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72 20 6f   an.** integer o
d070: 72 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69  r a floating-poi
d080: 6e 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20 49  nt number.).** I
d090: 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74  f the value is t
d0a0: 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79  ext or blob, try
d0b0: 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74   to convert it t
d0c0: 6f 20 61 6e 20 75 73 69 6e 67 20 74 68 65 0a 2a  o an using the.*
d0d0: 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  * equivalent of 
d0e0: 61 74 6f 69 28 29 20 6f 72 20 61 74 6f 66 28 29  atoi() or atof()
d0f0: 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20   and store 0 if 
d100: 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69  no such conversi
d110: 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73 69 62  on .** is possib
d120: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  le..**.** A NULL
d130: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
d140: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
d150: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
d160: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
d170: 20 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a 20 7b   OP_ToNumeric: {
d180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d190: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
d1a0: 54 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e 31 20  TO_NUMERIC, in1 
d1b0: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
d1c0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 73 71  m[pOp->p1];.  sq
d1d0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d 65  lite3VdbeMemNume
d1e0: 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 62 72  rify(pIn1);.  br
d1f0: 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
d200: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53   SQLITE_OMIT_CAS
d210: 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T */../* Opcode:
d220: 20 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20 2a 20   ToInt P1 * * * 
d230: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
d240: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
d250: 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e 20  ter P1 to be an 
d260: 69 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a 2a 20  integer.  If.** 
d270: 54 68 65 20 76 61 6c 75 65 20 69 73 20 63 75 72  The value is cur
d280: 72 65 6e 74 6c 79 20 61 20 72 65 61 6c 20 6e 75  rently a real nu
d290: 6d 62 65 72 2c 20 64 72 6f 70 20 69 74 73 20 66  mber, drop its f
d2a0: 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 2e 0a  ractional part..
d2b0: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
d2c0: 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c  is text or blob,
d2d0: 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   try to convert 
d2e0: 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  it to an integer
d2f0: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71   using the.** eq
d300: 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69  uivalent of atoi
d310: 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69  () and store 0 i
d320: 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72  f no such conver
d330: 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65  sion is possible
d340: 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76  ..**.** A NULL v
d350: 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e  alue is not chan
d360: 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74  ged by this rout
d370: 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73  ine.  It remains
d380: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
d390: 50 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20 20 20  P_ToInt: {      
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
d3b0: 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49 4e 54  ame as TK_TO_INT
d3c0: 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
d3d0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
d3e0: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
d3f0: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
d400: 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
d410: 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
d420: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  ify(pIn1);.  }. 
d430: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 20 21   break;.}..#if !
d440: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
d450: 4d 49 54 5f 43 41 53 54 29 20 26 26 20 21 64 65  MIT_CAST) && !de
d460: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
d470: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
d480: 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 52  )./* Opcode: ToR
d490: 65 61 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  eal P1 * * * *.*
d4a0: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
d4b0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
d4c0: 20 50 31 20 74 6f 20 62 65 20 61 20 66 6c 6f 61   P1 to be a floa
d4d0: 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65  ting point numbe
d4e0: 72 2e 0a 2a 2a 20 49 66 20 54 68 65 20 76 61 6c  r..** If The val
d4f0: 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  ue is currently 
d500: 61 6e 20 69 6e 74 65 67 65 72 2c 20 63 6f 6e 76  an integer, conv
d510: 65 72 74 20 69 74 2e 0a 2a 2a 20 49 66 20 74 68  ert it..** If th
d520: 65 20 76 61 6c 75 65 20 69 73 20 74 65 78 74 20  e value is text 
d530: 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20  or blob, try to 
d540: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e  convert it to an
d550: 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67 20 74   integer using t
d560: 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74  he.** equivalent
d570: 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64 20 73   of atoi() and s
d580: 74 6f 72 65 20 30 2e 30 20 69 66 20 6e 6f 20 73  tore 0.0 if no s
d590: 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  uch conversion i
d5a0: 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a  s possible..**.*
d5b0: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
d5c0: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
d5d0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
d5e0: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
d5f0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 52 65  .*/.case OP_ToRe
d600: 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  al: {           
d610: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
d620: 73 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c 20 69 6e  s TK_TO_REAL, in
d630: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
d640: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
d650: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
d660: 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66 28  (p, pIn1);.  if(
d670: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
d680: 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
d690: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
d6a0: 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b  emRealify(pIn1);
d6b0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
d6c0: 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e  #endif /* !defin
d6d0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ed(SQLITE_OMIT_C
d6e0: 41 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  AST) && !defined
d6f0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f  (SQLITE_OMIT_FLO
d700: 41 54 49 4e 47 5f 50 4f 49 4e 54 29 20 2a 2f 0a  ATING_POINT) */.
d710: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50  ./* Opcode: Lt P
d720: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
d730: 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
d740: 50 31 5d 3c 72 5b 50 33 5d 20 67 6f 74 6f 20 50  P1]<r[P3] goto P
d750: 32 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20  2.**.** Compare 
d760: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
d770: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 33  gister P1 and P3
d780: 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c 72 65  .  If reg(P3)<re
d790: 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75  g(P1) then.** ju
d7a0: 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32  mp to address P2
d7b0: 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  .  .**.** If the
d7c0: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
d7d0: 4c 4c 20 62 69 74 20 6f 66 20 50 35 20 69 73 20  LL bit of P5 is 
d7e0: 73 65 74 20 61 6e 64 20 65 69 74 68 65 72 20 72  set and either r
d7f0: 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67  eg(P1) or.** reg
d800: 28 50 33 29 20 69 73 20 4e 55 4c 4c 20 74 68 65  (P3) is NULL the
d810: 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e  n take the jump.
d820: 20 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f    If the SQLITE_
d830: 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62  JUMPIFNULL .** b
d840: 69 74 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e  it is clear then
d850: 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 66   fall through if
d860: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
d870: 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54  is NULL..**.** T
d880: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
d890: 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35  SK portion of P5
d8a0: 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66 69   must be an affi
d8b0: 6e 69 74 79 20 63 68 61 72 61 63 74 65 72 20 2d  nity character -
d8c0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  .** SQLITE_AFF_T
d8d0: 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  EXT, SQLITE_AFF_
d8e0: 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20  INTEGER, and so 
d8f0: 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70  forth. An attemp
d900: 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f  t is made .** to
d910: 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70   coerce both inp
d920: 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  uts according to
d930: 20 74 68 69 73 20 61 66 66 69 6e 69 74 79 20 62   this affinity b
d940: 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d  efore the.** com
d950: 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e  parison is made.
d960: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41   If the SQLITE_A
d970: 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c  FF_MASK is 0x00,
d980: 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a   then numeric.**
d990: 20 61 66 66 69 6e 69 74 79 20 69 73 20 75 73 65   affinity is use
d9a0: 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  d. Note that the
d9b0: 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72   affinity conver
d9c0: 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64  sions are stored
d9d0: 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68  .** back into th
d9e0: 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72  e input register
d9f0: 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f  s P1 and P3.  So
da00: 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e   this opcode can
da10: 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73   cause.** persis
da20: 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20  tent changes to 
da30: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
da40: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20   P3..**.** Once 
da50: 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  any conversions 
da60: 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65  have taken place
da70: 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61  , and neither va
da80: 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a  lue is NULL, .**
da90: 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20   the values are 
daa0: 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74  compared. If bot
dab0: 68 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f  h values are blo
dac0: 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29  bs then memcmp()
dad0: 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64   is.** used to d
dae0: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73  etermine the res
daf0: 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70  ults of the comp
db00: 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68  arison.  If both
db10: 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74   values.** are t
db20: 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70  ext, then the ap
db30: 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74  propriate collat
db40: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65  ing function spe
db50: 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20  cified in.** P4 
db60: 69 73 20 20 75 73 65 64 20 74 6f 20 64 6f 20 74  is  used to do t
db70: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
db80: 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65  If P4 is not spe
db90: 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d  cified then.** m
dba0: 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64 20  emcmp() is used 
dbb0: 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20  to compare text 
dbc0: 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68  string.  If both
dbd0: 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e   values are.** n
dbe0: 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e  umeric, then a n
dbf0: 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f  umeric compariso
dc00: 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20 74 68  n is used. If th
dc10: 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20  e two values.** 
dc20: 61 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74  are of different
dc30: 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d   types, then num
dc40: 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65  bers are conside
dc50: 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a  red less than.**
dc60: 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72   strings and str
dc70: 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65  ings are conside
dc80: 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c  red less than bl
dc90: 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  obs..**.** If th
dca0: 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  e SQLITE_STOREP2
dcb0: 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73 65   bit of P5 is se
dcc0: 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a  t, then do not j
dcd0: 75 6d 70 2e 20 20 49 6e 73 74 65 61 64 2c 0a 2a  ump.  Instead,.*
dce0: 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f 6c 65 61  * store a boolea
dcf0: 6e 20 72 65 73 75 6c 74 20 28 65 69 74 68 65 72  n result (either
dd00: 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20 4e 55 4c   0, or 1, or NUL
dd10: 4c 29 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  L) in register P
dd20: 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  2..**.** If the 
dd30: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 62 69  SQLITE_NULLEQ bi
dd40: 74 20 69 73 20 73 65 74 20 69 6e 20 50 35 2c 20  t is set in P5, 
dd50: 74 68 65 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73  then NULL values
dd60: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 0a   are considered.
dd70: 2a 2a 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20  ** equal to one 
dd80: 61 6e 6f 74 68 65 72 2c 20 70 72 6f 76 69 64 65  another, provide
dd90: 64 20 74 68 61 74 20 74 68 65 79 20 64 6f 20 6e  d that they do n
dda0: 6f 74 20 68 61 76 65 20 74 68 65 69 72 20 4d 45  ot have their ME
ddb0: 4d 5f 43 6c 65 61 72 65 64 0a 2a 2a 20 62 69 74  M_Cleared.** bit
ddc0: 20 73 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f   set..*/./* Opco
ddd0: 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50 33 20  de: Ne P1 P2 P3 
dde0: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
ddf0: 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 72 5b 50  s: if r[P1]!=r[P
de00: 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  3] goto P2.**.**
de10: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
de20: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
de30: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
de40: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
de50: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72  n if.** the oper
de60: 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72  ands in register
de70: 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20  s P1 and P3 are 
de80: 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65 20  not equal.  See 
de90: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
dea0: 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20  r.** additional 
deb0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a  information..**.
dec0: 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c  ** If SQLITE_NUL
ded0: 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20 50 35  LEQ is set in P5
dee0: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
def0: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
df00: 73 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a  s always either.
df10: 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  ** true or false
df20: 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55   and is never NU
df30: 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65  LL.  If both ope
df40: 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74  rands are NULL t
df50: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a  hen the result.*
df60: 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  * of comparison 
df70: 69 73 20 66 61 6c 73 65 2e 20 20 49 66 20 65 69  is false.  If ei
df80: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
df90: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
dfa0: 73 75 6c 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a  sult is true..**
dfb0: 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72   If neither oper
dfc0: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20  and is NULL the 
dfd0: 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61  result is the sa
dfe0: 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62  me as it would b
dff0: 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49  e if.** the SQLI
e000: 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77  TE_NULLEQ flag w
e010: 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d  ere omitted from
e020: 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64   P5..*/./* Opcod
e030: 65 3a 20 45 71 20 50 31 20 50 32 20 50 33 20 50  e: Eq P1 P2 P3 P
e040: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
e050: 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 72 5b 50 33  : if r[P1]==r[P3
e060: 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ] goto P2.**.** 
e070: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
e080: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
e090: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
e0a0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
e0b0: 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61   if.** the opera
e0c0: 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73  nds in registers
e0d0: 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 65   P1 and P3 are e
e0e0: 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65  qual..** See the
e0f0: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
e100: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
e110: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ation..**.** If 
e120: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
e130: 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20   set in P5 then 
e140: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f  the result of co
e150: 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61  mparison is alwa
e160: 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75  ys either.** tru
e170: 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69  e or false and i
e180: 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49  s never NULL.  I
e190: 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  f both operands 
e1a0: 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68  are NULL then th
e1b0: 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63  e result.** of c
e1c0: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75  omparison is tru
e1d0: 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70  e.  If either op
e1e0: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
e1f0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
e200: 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65   false..** If ne
e210: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
e220: 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74   NULL the result
e230: 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
e240: 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a  it would be if.*
e250: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c  * the SQLITE_NUL
e260: 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d  LEQ flag were om
e270: 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a  itted from P5..*
e280: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20  /./* Opcode: Le 
e290: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
e2a0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
e2b0: 5b 50 31 5d 3c 3d 72 5b 50 33 5d 20 67 6f 74 6f  [P1]<=r[P3] goto
e2c0: 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P2.**.** This w
e2d0: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
e2e0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
e2f0: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
e300: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
e310: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
e320: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6c  register P3 is l
e330: 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
e340: 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74  l to the content
e350: 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   of.** register 
e360: 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  P1.  See the Lt 
e370: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
e380: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
e390: 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
e3a0: 20 47 74 20 50 31 20 50 32 20 50 33 20 50 34 20   Gt P1 P2 P3 P4 
e3b0: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
e3c0: 69 66 20 72 5b 50 31 5d 3e 72 5b 50 33 5d 20 67  if r[P1]>r[P3] g
e3d0: 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  oto P2.**.** Thi
e3e0: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
e3f0: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
e400: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
e410: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
e420: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
e430: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
e440: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  s greater than t
e450: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
e460: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
e470: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
e480: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
e490: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
e4a0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20 50 31  /* Opcode: Ge P1
e4b0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
e4c0: 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
e4d0: 31 5d 3e 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50  1]>=r[P3] goto P
e4e0: 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  2.**.** This wor
e4f0: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
e500: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
e510: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
e520: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
e530: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
e540: 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65  gister P3 is gre
e550: 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
e560: 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e  al to the conten
e570: 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72  t of.** register
e580: 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74   P1.  See the Lt
e590: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
e5a0: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
e5b0: 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45  on..*/.case OP_E
e5c0: 71 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  q:              
e5d0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45   /* same as TK_E
e5e0: 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  Q, jump, in1, in
e5f0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a  3 */.case OP_Ne:
e600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e610: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c  * same as TK_NE,
e620: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
e630: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20  */.case OP_Lt:  
e640: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e650: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a  same as TK_LT, j
e660: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
e670: 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20  .case OP_Le:    
e680: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
e690: 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d  me as TK_LE, jum
e6a0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
e6b0: 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20  ase OP_Gt:      
e6c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
e6d0: 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c   as TK_GT, jump,
e6e0: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
e6f0: 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20  e OP_Ge: {      
e700: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
e710: 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69  s TK_GE, jump, i
e720: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  n1, in3 */.  int
e730: 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20   res;           
e740: 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 74 68   /* Result of th
e750: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20  e comparison of 
e760: 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70 49 6e  pIn1 against pIn
e770: 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  3 */.  char affi
e780: 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20 41 66  nity;      /* Af
e790: 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20 66 6f  finity to use fo
e7a0: 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a  r comparison */.
e7b0: 20 20 75 31 36 20 66 6c 61 67 73 31 3b 20 20 20    u16 flags1;   
e7c0: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
e7d0: 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f   initial value o
e7e0: 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f  f pIn1->flags */
e7f0: 0a 20 20 75 31 36 20 66 6c 61 67 73 33 3b 20 20  .  u16 flags3;  
e800: 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f         /* Copy o
e810: 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20  f initial value 
e820: 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a  of pIn3->flags *
e830: 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  /..  pIn1 = &aMe
e840: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
e850: 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
e860: 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20  p3];.  flags1 = 
e870: 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 66  pIn1->flags;.  f
e880: 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c  lags3 = pIn3->fl
e890: 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67  ags;.  if( (flag
e8a0: 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d  s1 | flags3)&MEM
e8b0: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20  _Null ){.    /* 
e8c0: 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70 65 72  One or both oper
e8d0: 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f  ands are NULL */
e8e0: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
e8f0: 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51   & SQLITE_NULLEQ
e900: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   ){.      /* If 
e910: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
e920: 20 73 65 74 20 28 77 68 69 63 68 20 77 69 6c 6c   set (which will
e930: 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69 66 20   only happen if 
e940: 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73 0a  the operator is.
e950: 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f        ** OP_Eq o
e960: 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74 61  r OP_Ne) then ta
e970: 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e  ke the jump or n
e980: 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ot depending on 
e990: 77 68 65 74 68 65 72 0a 20 20 20 20 20 20 2a 2a  whether.      **
e9a0: 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65   or not both ope
e9b0: 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a  rands are null..
e9c0: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61        */.      a
e9d0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
e9e0: 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70  de==OP_Eq || pOp
e9f0: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20  ->opcode==OP_Ne 
ea00: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
ea10: 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 43   (flags1 & MEM_C
ea20: 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a 20 20  leared)==0 );.  
ea30: 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 26      if( (flags1&
ea40: 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20  MEM_Null)!=0.   
ea50: 20 20 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d      && (flags3&M
ea60: 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20  EM_Null)!=0.    
ea70: 20 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45     && (flags3&ME
ea80: 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20  M_Cleared)==0.  
ea90: 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72      ){.        r
eaa0: 65 73 20 3d 20 30 3b 20 20 2f 2a 20 52 65 73 75  es = 0;  /* Resu
eab0: 6c 74 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f  lts are equal */
eac0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
ead0: 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 20 20        res = 1;  
eae0: 2f 2a 20 52 65 73 75 6c 74 73 20 61 72 65 20 6e  /* Results are n
eaf0: 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20  ot equal */.    
eb00: 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
eb10: 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e       /* SQLITE_N
eb20: 55 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20 61  ULLEQ is clear a
eb30: 6e 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20  nd at least one 
eb40: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c  operand is NULL,
eb50: 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74  .      ** then t
eb60: 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77  he result is alw
eb70: 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20  ays NULL..      
eb80: 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74  ** The jump is t
eb90: 61 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49  aken if the SQLI
eba0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69  TE_JUMPIFNULL bi
ebb0: 74 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20 20  t is set..      
ebc0: 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  */.      if( pOp
ebd0: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55  ->p5 & SQLITE_JU
ebe0: 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20  MPIFNULL ){.    
ebf0: 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
ec00: 2d 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  -1;.      }else 
ec10: 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
ec20: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a  LITE_STOREP2 ){.
ec30: 20 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26          pOut = &
ec40: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
ec50: 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70         MemSetTyp
ec60: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
ec70: 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 52  Null);.        R
ec80: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
ec90: 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
eca0: 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61      }.      brea
ecb0: 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  k;.    }.  }else
ecc0: 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72  {.    /* Neither
ecd0: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
ece0: 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73  .  Do a comparis
ecf0: 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e  on. */.    affin
ed00: 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20  ity = pOp->p5 & 
ed10: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b  SQLITE_AFF_MASK;
ed20: 0a 20 20 20 20 69 66 28 20 61 66 66 69 6e 69 74  .    if( affinit
ed30: 79 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79  y ){.      apply
ed40: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 61  Affinity(pIn1, a
ed50: 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e  ffinity, encodin
ed60: 67 29 3b 0a 20 20 20 20 20 20 61 70 70 6c 79 41  g);.      applyA
ed70: 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 61 66  ffinity(pIn3, af
ed80: 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67  finity, encoding
ed90: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d  );.      if( db-
eda0: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20  >mallocFailed ) 
edb0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
edc0: 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20   }..    assert( 
edd0: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
ede0: 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e  COLLSEQ || pOp->
edf0: 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20  p4.pColl==0 );. 
ee00: 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49     ExpandBlob(pI
ee10: 6e 31 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42  n1);.    ExpandB
ee20: 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 72  lob(pIn3);.    r
ee30: 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43  es = sqlite3MemC
ee40: 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70 49 6e  ompare(pIn3, pIn
ee50: 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c  1, pOp->p4.pColl
ee60: 29 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63 68 28  );.  }.  switch(
ee70: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
ee80: 20 20 20 20 63 61 73 65 20 4f 50 5f 45 71 3a 20      case OP_Eq: 
ee90: 20 20 20 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b     res = res==0;
eea0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
eeb0: 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72  case OP_Ne:    r
eec0: 65 73 20 3d 20 72 65 73 21 3d 30 3b 20 20 20 20  es = res!=0;    
eed0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
eee0: 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d   OP_Lt:    res =
eef0: 20 72 65 73 3c 30 3b 20 20 20 20 20 20 62 72 65   res<0;      bre
ef00: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
ef10: 4c 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Le:    res = res
ef20: 3c 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  <=0;     break;.
ef30: 20 20 20 20 63 61 73 65 20 4f 50 5f 47 74 3a 20      case OP_Gt: 
ef40: 20 20 20 72 65 73 20 3d 20 72 65 73 3e 30 3b 20     res = res>0; 
ef50: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
ef60: 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72  default:       r
ef70: 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20  es = res>=0;    
ef80: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69   break;.  }..  i
ef90: 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
efa0: 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20  ITE_STOREP2 ){. 
efb0: 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b     pOut = &aMem[
efc0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d 65  pOp->p2];.    me
efd0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
efe0: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d  , pOut);.    Mem
eff0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
f000: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20  , MEM_Int);.    
f010: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b  pOut->u.i = res;
f020: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
f030: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
f040: 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  t);.  }else if( 
f050: 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  res ){.    pc = 
f060: 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 0a  pOp->p2-1;.  }..
f070: 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68    /* Undo any ch
f080: 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61 70  anges made by ap
f090: 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f  plyAffinity() to
f0a0: 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
f0b0: 74 65 72 73 2e 20 2a 2f 0a 20 20 70 49 6e 31 2d  ters. */.  pIn1-
f0c0: 3e 66 6c 61 67 73 20 3d 20 28 70 49 6e 31 2d 3e  >flags = (pIn1->
f0d0: 66 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65 4d  flags&~MEM_TypeM
f0e0: 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 31 26 4d  ask) | (flags1&M
f0f0: 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20  EM_TypeMask);.  
f100: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 28 70  pIn3->flags = (p
f110: 49 6e 33 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f  In3->flags&~MEM_
f120: 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61  TypeMask) | (fla
f130: 67 73 33 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  gs3&MEM_TypeMask
f140: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
f150: 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74  * Opcode: Permut
f160: 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a  ation * * * P4 *
f170: 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70  .**.** Set the p
f180: 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20  ermutation used 
f190: 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72  by the OP_Compar
f1a0: 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65  e operator to be
f1b0: 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66   the array.** of
f1c0: 20 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e   integers in P4.
f1d0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75  .**.** The permu
f1e0: 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76  tation is only v
f1f0: 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e  alid until the n
f200: 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 74  ext OP_Compare t
f210: 68 61 74 20 68 61 73 0a 2a 2a 20 74 68 65 20 4f  hat has.** the O
f220: 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69  PFLAG_PERMUTE bi
f230: 74 20 73 65 74 20 69 6e 20 50 35 2e 20 54 79 70  t set in P5. Typ
f240: 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65  ically the OP_Pe
f250: 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64  rmutation should
f260: 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65 64   .** occur immed
f270: 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20  iately prior to 
f280: 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a  the OP_Compare..
f290: 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75  */.case OP_Permu
f2a0: 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65  tation: {.  asse
f2b0: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
f2c0: 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a  =P4_INTARRAY );.
f2d0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
f2e0: 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75  4.ai );.  aPermu
f2f0: 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b  te = pOp->p4.ai;
f300: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
f310: 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20  Opcode: Compare 
f320: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
f330: 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f  *.** Compare two
f340: 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69   vectors of regi
f350: 73 74 65 72 73 20 69 6e 20 72 65 67 28 50 31 29  sters in reg(P1)
f360: 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28  ..reg(P1+P3-1) (
f370: 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63  call this.** vec
f380: 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20  tor "A") and in 
f390: 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b  reg(P2)..reg(P2+
f3a0: 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61  P3-1) ("B").  Sa
f3b0: 76 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ve the result of
f3c0: 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73  .** the comparis
f3d0: 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  on for use by th
f3e0: 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69  e next OP_Jump i
f3f0: 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49  nstruct..**.** I
f400: 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46  f P5 has the OPF
f410: 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20  LAG_PERMUTE bit 
f420: 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 6f 72  set, then the or
f430: 64 65 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  der of compariso
f440: 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e  n is.** determin
f450: 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72  ed by the most r
f460: 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61  ecent OP_Permuta
f470: 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20  tion operator.  
f480: 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47  If the.** OPFLAG
f490: 5f 50 45 52 4d 55 54 45 20 62 69 74 20 69 73 20  _PERMUTE bit is 
f4a0: 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 67 69  clear, then regi
f4b0: 73 74 65 72 20 61 72 65 20 63 6f 6d 70 61 72 65  ster are compare
f4c0: 64 20 69 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a  d in sequential.
f4d0: 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20  ** order..**.** 
f4e0: 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20  P4 is a KeyInfo 
f4f0: 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64  structure that d
f500: 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67  efines collating
f510: 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73   sequences and s
f520: 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f  ort.** orders fo
f530: 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  r the comparison
f540: 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  .  The permutati
f550: 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65  on applies to re
f560: 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e  gisters.** only.
f570: 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c    The KeyInfo el
f580: 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64 20  ements are used 
f590: 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a  sequentially..**
f5a0: 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73  .** The comparis
f5b0: 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d  on is a sort com
f5c0: 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c  parison, so NULL
f5d0: 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c  s compare equal,
f5e0: 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65  .** NULLs are le
f5f0: 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c  ss than numbers,
f600: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73   numbers are les
f610: 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a  s than strings,.
f620: 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61  ** and strings a
f630: 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f  re less than blo
f640: 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  bs..*/.case OP_C
f650: 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20  ompare: {.  int 
f660: 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  n;.  int i;.  in
f670: 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a  t p1;.  int p2;.
f680: 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20    const KeyInfo 
f690: 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74  *pKeyInfo;.  int
f6a0: 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20   idx;.  CollSeq 
f6b0: 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f  *pColl;    /* Co
f6c0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
f6d0: 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20   to use on this 
f6e0: 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52  term */.  int bR
f6f0: 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ev;          /* 
f700: 54 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44  True for DESCEND
f710: 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a  ING sort order *
f720: 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 70  /..  if( (pOp->p
f730: 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  5 & OPFLAG_PERMU
f740: 54 45 29 3d 3d 30 20 29 20 61 50 65 72 6d 75 74  TE)==0 ) aPermut
f750: 65 20 3d 20 30 3b 0a 20 20 6e 20 3d 20 70 4f 70  e = 0;.  n = pOp
f760: 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f  ->p3;.  pKeyInfo
f770: 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
f780: 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  nfo;.  assert( n
f790: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
f7a0: 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20  pKeyInfo!=0 );. 
f7b0: 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
f7c0: 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23   p2 = pOp->p2;.#
f7d0: 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  if SQLITE_DEBUG.
f7e0: 20 20 69 66 28 20 61 50 65 72 6d 75 74 65 20 29    if( aPermute )
f7f0: 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20  {.    int k, mx 
f800: 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30  = 0;.    for(k=0
f810: 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20  ; k<n; k++) if( 
f820: 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29  aPermute[k]>mx )
f830: 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b   mx = aPermute[k
f840: 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ];.    assert( p
f850: 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70  1>0 && p1+mx<=(p
f860: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
f870: 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  r)+1 );.    asse
f880: 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6d  rt( p2>0 && p2+m
f890: 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  x<=(p->nMem-p->n
f8a0: 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d  Cursor)+1 );.  }
f8b0: 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
f8c0: 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d  ( p1>0 && p1+n<=
f8d0: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
f8e0: 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73  sor)+1 );.    as
f8f0: 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32  sert( p2>0 && p2
f900: 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  +n<=(p->nMem-p->
f910: 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
f920: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
f930: 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f  TE_DEBUG */.  fo
f940: 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29  r(i=0; i<n; i++)
f950: 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50 65 72  {.    idx = aPer
f960: 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b  mute ? aPermute[
f970: 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73 73 65  i] : i;.    asse
f980: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
f990: 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b  aMem[p1+idx]) );
f9a0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
f9b0: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32  IsValid(&aMem[p2
f9c0: 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 52 45  +idx]) );.    RE
f9d0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b  GISTER_TRACE(p1+
f9e0: 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64  idx, &aMem[p1+id
f9f0: 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  x]);.    REGISTE
fa00: 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20  R_TRACE(p2+idx, 
fa10: 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a  &aMem[p2+idx]);.
fa20: 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b      assert( i<pK
fa30: 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29  eyInfo->nField )
fa40: 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b  ;.    pColl = pK
fa50: 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d  eyInfo->aColl[i]
fa60: 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65  ;.    bRev = pKe
fa70: 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65  yInfo->aSortOrde
fa80: 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61  r[i];.    iCompa
fa90: 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43  re = sqlite3MemC
faa0: 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b  ompare(&aMem[p1+
fab0: 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69  idx], &aMem[p2+i
fac0: 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20  dx], pColl);.   
fad0: 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b   if( iCompare ){
fae0: 0a 20 20 20 20 20 20 69 66 28 20 62 52 65 76 20  .      if( bRev 
faf0: 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43  ) iCompare = -iC
fb00: 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72  ompare;.      br
fb10: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  eak;.    }.  }. 
fb20: 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20   aPermute = 0;. 
fb30: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
fb40: 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32  code: Jump P1 P2
fb50: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
fb60: 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75  mp to the instru
fb70: 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73  ction at address
fb80: 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64   P1, P2, or P3 d
fb90: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
fba0: 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f  her.** in the mo
fbb0: 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d  st recent OP_Com
fbc0: 70 61 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  pare instruction
fbd0: 20 74 68 65 20 50 31 20 76 65 63 74 6f 72 20 77   the P1 vector w
fbe0: 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  as less than.** 
fbf0: 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65  equal to, or gre
fc00: 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 50 32  ater than the P2
fc10: 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74   vector, respect
fc20: 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ively..*/.case O
fc30: 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20  P_Jump: {       
fc40: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
fc50: 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c  .  if( iCompare<
fc60: 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  0 ){.    pc = pO
fc70: 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 7d 65 6c  p->p1 - 1;.  }el
fc80: 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d  se if( iCompare=
fc90: 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  =0 ){.    pc = p
fca0: 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65  Op->p2 - 1;.  }e
fcb0: 6c 73 65 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  lse{.    pc = pO
fcc0: 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p3 - 1;.  }. 
fcd0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
fce0: 63 6f 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20  code: And P1 P2 
fcf0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
fd00: 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d  is: r[P3]=(r[P1]
fd10: 20 26 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a   && r[P2]).**.**
fd20: 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61   Take the logica
fd30: 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c  l AND of the val
fd40: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 73  ues in registers
fd50: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
fd60: 2a 20 77 72 69 74 65 20 74 68 65 20 72 65 73 75  * write the resu
fd70: 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  lt into register
fd80: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69   P3..**.** If ei
fd90: 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73  ther P1 or P2 is
fda0: 20 30 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20   0 (false) then 
fdb0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 30 20  the result is 0 
fdc0: 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  even if.** the o
fdd0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
fde0: 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20  LL.  A NULL and 
fdf0: 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c  true or two NULL
fe00: 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c  s give.** a NULL
fe10: 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f   output..*/./* O
fe20: 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20  pcode: Or P1 P2 
fe30: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
fe40: 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d  is: r[P3]=(r[P1]
fe50: 20 7c 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a   || r[P2]).**.**
fe60: 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61   Take the logica
fe70: 6c 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75  l OR of the valu
fe80: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
fe90: 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
fea0: 73 74 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72  store the answer
feb0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
fec0: 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
fed0: 20 50 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e   P1 or P2 is non
fee0: 7a 65 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e  zero (true) then
fef0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 31   the result is 1
ff00: 20 28 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20   (true).** even 
ff10: 69 66 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70  if the other inp
ff20: 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e  ut is NULL.  A N
ff30: 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72  ULL and false or
ff40: 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69   two NULLs.** gi
ff50: 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74  ve a NULL output
ff60: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64  ..*/.case OP_And
ff70: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
ff80: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44  * same as TK_AND
ff90: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
ffa0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20   */.case OP_Or: 
ffb0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
ffc0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20   same as TK_OR, 
ffd0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
ffe0: 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20 20 20 2f  /.  int v1;    /
fff0: 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a 20  * Left operand: 
10000 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52   0==FALSE, 1==TR
10010 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f  UE, 2==UNKNOWN o
10020 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20  r NULL */.  int 
10030 76 32 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 20  v2;    /* Right 
10040 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53  operand: 0==FALS
10050 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55  E, 1==TRUE, 2==U
10060 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a  NKNOWN or NULL *
10070 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  /..  pIn1 = &aMe
10080 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
10090 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
100a0 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
100b0 76 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b  v1 = 2;.  }else{
100c0 0a 20 20 20 20 76 31 20 3d 20 73 71 6c 69 74 65  .    v1 = sqlite
100d0 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
100e0 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49  n1)!=0;.  }.  pI
100f0 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
10100 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d  p2];.  if( pIn2-
10110 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
10120 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b  l ){.    v2 = 2;
10130 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32  .  }else{.    v2
10140 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
10150 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b  tValue(pIn2)!=0;
10160 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
10170 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29  opcode==OP_And )
10180 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
10190 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
101a0 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b   and_logic[] = {
101b0 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20   0, 0, 0, 0, 1, 
101c0 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20  2, 0, 2, 2 };.  
101d0 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63    v1 = and_logic
101e0 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c  [v1*3+v2];.  }el
101f0 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  se{.    static c
10200 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
10210 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20  ar or_logic[] = 
10220 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c  { 0, 1, 2, 1, 1,
10230 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20   1, 2, 1, 2 };. 
10240 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63     v1 = or_logic
10250 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20  [v1*3+v2];.  }. 
10260 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
10270 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31  p->p3];.  if( v1
10280 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65  ==2 ){.    MemSe
10290 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
102a0 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c  MEM_Null);.  }el
102b0 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  se{.    pOut->u.
102c0 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53  i = v1;.    MemS
102d0 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
102e0 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20   MEM_Int);.  }. 
102f0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
10300 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20  code: Not P1 P2 
10310 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
10320 73 3a 20 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d  s: r[P2]= !r[P1]
10330 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
10340 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
10350 67 69 73 74 65 72 20 50 31 20 61 73 20 61 20 62  gister P1 as a b
10360 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53  oolean value.  S
10370 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c  tore the.** bool
10380 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  ean complement i
10390 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  n register P2.  
103a0 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
103b0 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 0a  register P1 is .
103c0 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20  ** NULL, then a 
103d0 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69  NULL is stored i
103e0 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
103f0 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20  _Not: {         
10400 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
10410 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f  s TK_NOT, in1, o
10420 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
10430 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
10440 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
10450 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70  Op->p2];.  if( p
10460 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
10470 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
10480 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
10490 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73  ll(pOut);.  }els
104a0 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  e{.    sqlite3Vd
104b0 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f  beMemSetInt64(pO
104c0 75 74 2c 20 21 73 71 6c 69 74 65 33 56 64 62 65  ut, !sqlite3Vdbe
104d0 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 29 3b  IntValue(pIn1));
104e0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
104f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e  ./* Opcode: BitN
10500 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ot P1 P2 * * *.*
10510 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31  * Synopsis: r[P1
10520 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  ]= ~r[P1].**.** 
10530 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 63 6f  Interpret the co
10540 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
10550 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67  r P1 as an integ
10560 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a  er.  Store the.*
10570 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e  * ones-complemen
10580 74 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c 75  t of the P1 valu
10590 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
105a0 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64 73  P2.  If P1 holds
105b0 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20  .** a NULL then 
105c0 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20  store a NULL in 
105d0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  P2..*/.case OP_B
105e0 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  itNot: {        
105f0 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
10600 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20  TK_BITNOT, in1, 
10610 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
10620 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
10630 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
10640 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20  pOp->p2];.  if( 
10650 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
10660 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
10670 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
10680 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c  ull(pOut);.  }el
10690 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
106a0 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70  dbeMemSetInt64(p
106b0 4f 75 74 2c 20 7e 73 71 6c 69 74 65 33 56 64 62  Out, ~sqlite3Vdb
106c0 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 29  eIntValue(pIn1))
106d0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
106e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e 63  ../* Opcode: Onc
106f0 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
10700 0a 2a 2a 20 43 68 65 63 6b 20 69 66 20 4f 50 5f  .** Check if OP_
10710 4f 6e 63 65 20 66 6c 61 67 20 50 31 20 69 73 20  Once flag P1 is 
10720 73 65 74 2e 20 49 66 20 73 6f 2c 20 6a 75 6d 70  set. If so, jump
10730 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
10740 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 0a 2a  P2. Otherwise,.*
10750 2a 20 73 65 74 20 74 68 65 20 66 6c 61 67 20 61  * set the flag a
10760 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  nd fall through 
10770 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
10780 72 75 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68  ruction.  In oth
10790 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 74 68 69  er words,.** thi
107a0 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20  s opcode causes 
107b0 61 6c 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 75 70  all following up
107c0 20 63 6f 64 65 73 20 75 70 20 74 68 72 6f 75 67   codes up throug
107d0 68 20 50 32 20 28 62 75 74 20 6e 6f 74 20 69 6e  h P2 (but not in
107e0 63 6c 75 64 69 6e 67 0a 2a 2a 20 50 32 29 20 74  cluding.** P2) t
107f0 6f 20 72 75 6e 20 6a 75 73 74 20 6f 6e 63 65 20  o run just once 
10800 61 6e 64 20 73 6b 69 70 70 65 64 20 6f 6e 20 73  and skipped on s
10810 75 62 73 65 71 75 65 6e 74 20 74 69 6d 65 73 20  ubsequent times 
10820 74 68 72 6f 75 67 68 20 74 68 65 20 6c 6f 6f 70  through the loop
10830 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 6e 63  ..*/.case OP_Onc
10840 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
10850 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73   /* jump */.  as
10860 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 70 2d  sert( pOp->p1<p-
10870 3e 6e 4f 6e 63 65 46 6c 61 67 20 29 3b 0a 20 20  >nOnceFlag );.  
10880 69 66 28 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67  if( p->aOnceFlag
10890 5b 70 4f 70 2d 3e 70 31 5d 20 29 7b 0a 20 20 20  [pOp->p1] ){.   
108a0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
108b0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d  .  }else{.    p-
108c0 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e  >aOnceFlag[pOp->
108d0 70 31 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62  p1] = 1;.  }.  b
108e0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
108f0 64 65 3a 20 49 66 20 50 31 20 50 32 20 50 33 20  de: If P1 P2 P3 
10900 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
10910 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
10920 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
10930 20 69 73 20 74 72 75 65 2e 20 20 54 68 65 20 76   is true.  The v
10940 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69  alue.** is consi
10950 64 65 72 65 64 20 74 72 75 65 20 69 66 20 69 74  dered true if it
10960 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20   is numeric and 
10970 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68  non-zero.  If th
10980 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
10990 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
109a0 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 50  ke the jump if P
109b0 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a  3 is non-zero..*
109c0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e  /./* Opcode: IfN
109d0 6f 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ot P1 P2 P3 * *.
109e0 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
109f0 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
10a00 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
10a10 46 61 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75  False.  The valu
10a20 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72  e.** is consider
10a30 65 64 20 66 61 6c 73 65 20 69 66 20 69 74 20 68  ed false if it h
10a40 61 73 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c  as a numeric val
10a50 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20  ue of zero.  If 
10a60 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
10a70 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P1 is NULL then 
10a80 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
10a90 20 50 33 20 69 73 20 7a 65 72 6f 2e 0a 2a 2f 0a   P3 is zero..*/.
10aa0 63 61 73 65 20 4f 50 5f 49 66 3a 20 20 20 20 20  case OP_If:     
10ab0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
10ac0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73 65  ump, in1 */.case
10ad0 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20   OP_IfNot: {    
10ae0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
10af0 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b   in1 */.  int c;
10b00 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
10b10 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
10b20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
10b30 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63 20  M_Null ){.    c 
10b40 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c  = pOp->p3;.  }el
10b50 73 65 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  se{.#ifdef SQLIT
10b60 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
10b70 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d 20 73 71  POINT.    c = sq
10b80 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
10b90 65 28 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c 73  e(pIn1)!=0;.#els
10ba0 65 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65  e.    c = sqlite
10bb0 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
10bc0 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69  In1)!=0.0;.#endi
10bd0 66 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  f.    if( pOp->o
10be0 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20  pcode==OP_IfNot 
10bf0 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20  ) c = !c;.  }.  
10c00 69 66 28 20 63 20 29 7b 0a 20 20 20 20 70 63 20  if( c ){.    pc 
10c10 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d  = pOp->p2-1;.  }
10c20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
10c30 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50  Opcode: IsNull P
10c40 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
10c50 6e 6f 70 73 69 73 3a 20 20 69 66 20 72 5b 50 31  nopsis:  if r[P1
10c60 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a  ]==NULL goto P2.
10c70 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
10c80 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
10c90 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
10ca0 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
10cb0 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  _IsNull: {      
10cc0 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
10cd0 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70   TK_ISNULL, jump
10ce0 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
10cf0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
10d00 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
10d10 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
10d20 21 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  !=0 ){.    pc = 
10d30 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
10d40 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
10d50 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20  Opcode: NotNull 
10d60 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
10d70 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
10d80 5d 21 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a  ]!=NULL goto P2.
10d90 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
10da0 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
10db0 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
10dc0 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63  not NULL.  .*/.c
10dd0 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20  ase OP_NotNull: 
10de0 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
10df0 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55  same as TK_NOTNU
10e00 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f  LL, jump, in1 */
10e10 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
10e20 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
10e30 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
10e40 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Null)==0 ){. 
10e50 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
10e60 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
10e70 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
10e80 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20  Column P1 P2 P3 
10e90 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
10ea0 73 3a 20 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a 0a  s:  r[P3]=PX.**.
10eb0 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
10ec0 20 64 61 74 61 20 74 68 61 74 20 63 75 72 73 6f   data that curso
10ed0 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20 61  r P1 points to a
10ee0 73 20 61 20 73 74 72 75 63 74 75 72 65 20 62 75  s a structure bu
10ef0 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65  ilt using.** the
10f00 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74   MakeRecord inst
10f10 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20 74  ruction.  (See t
10f20 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70  he MakeRecord op
10f30 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
10f40 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  nal.** informati
10f50 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72  on about the for
10f60 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74 61 2e  mat of the data.
10f70 29 20 20 45 78 74 72 61 63 74 20 74 68 65 20 50  )  Extract the P
10f80 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66  2-th column.** f
10f90 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64 2e  rom this record.
10fa0 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6c    If there are l
10fb0 65 73 73 20 74 68 61 74 20 28 50 32 2b 31 29 20  ess that (P2+1) 
10fc0 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74 68  .** values in th
10fd0 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61 63  e record, extrac
10fe0 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20  t a NULL..**.** 
10ff0 54 68 65 20 76 61 6c 75 65 20 65 78 74 72 61 63  The value extrac
11000 74 65 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ted is stored in
11010 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
11020 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d  .** If the colum
11030 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65 72  n contains fewer
11040 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73 2c   than P2 fields,
11050 20 74 68 65 6e 20 65 78 74 72 61 63 74 20 61 20   then extract a 
11060 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66  NULL.  Or,.** if
11070 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74   the P4 argument
11080 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73 65   is a P4_MEM use
11090 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
110a0 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61 73  e P4 argument as
110b0 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e 0a  .** the result..
110c0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
110d0 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20 62  LAG_CLEARCACHE b
110e0 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35 20  it is set on P5 
110f0 61 6e 64 20 50 31 20 69 73 20 61 20 70 73 65 75  and P1 is a pseu
11100 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 2c  do-table cursor,
11110 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 61 63  .** then the cac
11120 68 65 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72  he of the cursor
11130 20 69 73 20 72 65 73 65 74 20 70 72 69 6f 72 20   is reset prior 
11140 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20 74 68  to extracting th
11150 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65  e column..** The
11160 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e   first OP_Column
11170 20 61 67 61 69 6e 73 74 20 61 20 70 73 65 75 64   against a pseud
11180 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20 74 68  o-table after th
11190 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  e value of the c
111a0 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73 74  ontent.** regist
111b0 65 72 20 68 61 73 20 63 68 61 6e 67 65 64 20 73  er has changed s
111c0 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69 73 20  hould have this 
111d0 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 49  bit set..**.** I
111e0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45 4e  f the OPFLAG_LEN
111f0 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41  GTHARG and OPFLA
11200 47 5f 54 59 50 45 4f 46 41 52 47 20 62 69 74 73  G_TYPEOFARG bits
11210 20 61 72 65 20 73 65 74 20 6f 6e 20 50 35 20 77   are set on P5 w
11220 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c  hen.** the resul
11230 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20  t is guaranteed 
11240 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20  to only be used 
11250 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  as the argument 
11260 6f 66 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a 2a  of a length().**
11270 20 6f 72 20 74 79 70 65 6f 66 28 29 20 66 75 6e   or typeof() fun
11280 63 74 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76  ction, respectiv
11290 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64 69 6e  ely.  The loadin
112a0 67 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62 73  g of large blobs
112b0 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70 70   can be.** skipp
112c0 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20  ed for length() 
112d0 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20  and all content 
112e0 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62 65 20 73  loading can be s
112f0 6b 69 70 70 65 64 20 66 6f 72 20 74 79 70 65 6f  kipped for typeo
11300 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  f()..*/.case OP_
11310 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 36 34 20  Column: {.  i64 
11320 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 20 2f  payloadSize64; /
11330 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
11340 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  s in the record 
11350 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20  */.  int p2;    
11360 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d          /* colum
11370 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72  n number to retr
11380 69 65 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75  ieve */.  VdbeCu
11390 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20  rsor *pC;    /* 
113a0 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
113b0 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  */.  BtCursor *p
113c0 43 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42  Crsr;   /* The B
113d0 54 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20  Tree cursor */. 
113e0 20 75 33 32 20 2a 61 54 79 70 65 3b 20 20 20 20   u32 *aType;    
113f0 20 20 20 20 2f 2a 20 61 54 79 70 65 5b 69 5d 20      /* aType[i] 
11400 68 6f 6c 64 73 20 74 68 65 20 6e 75 6d 65 72 69  holds the numeri
11410 63 20 74 79 70 65 20 6f 66 20 74 68 65 20 69 2d  c type of the i-
11420 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75  th column */.  u
11430 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20  32 *aOffset;    
11440 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20    /* aOffset[i] 
11450 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61  is offset to sta
11460 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69  rt of data for i
11470 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  -th column */.  
11480 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20  int len;        
11490 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68     /* The length
114a0 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a   of the serializ
114b0 65 64 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  ed data for the 
114c0 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20  column */.  int 
114d0 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  i;             /
114e0 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
114f0 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20  /.  Mem *pDest; 
11500 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20         /* Where 
11510 74 6f 20 77 72 69 74 65 20 74 68 65 20 65 78 74  to write the ext
11520 72 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a  racted value */.
11530 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20    Mem sMem;     
11540 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72       /* For stor
11550 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62  ing the record b
11560 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a  eing decoded */.
11570 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 44 61 74    const u8 *zDat
11580 61 3b 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  a;   /* Part of 
11590 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67  the record being
115a0 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f   decoded */.  co
115b0 6e 73 74 20 75 38 20 2a 7a 48 64 72 3b 20 20 20  nst u8 *zHdr;   
115c0 20 2f 2a 20 4e 65 78 74 20 75 6e 70 61 72 73 65   /* Next unparse
115d0 64 20 62 79 74 65 20 6f 66 20 74 68 65 20 68 65  d byte of the he
115e0 61 64 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ader */.  const 
115f0 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a 20  u8 *zEndHdr; /* 
11600 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74  Pointer to first
11610 20 62 79 74 65 20 61 66 74 65 72 20 74 68 65 20   byte after the 
11620 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 33 32 20  header */.  u32 
11630 6f 66 66 73 65 74 3b 20 20 20 20 20 20 20 20 2f  offset;        /
11640 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74 68  * Offset into th
11650 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20  e data */.  u32 
11660 73 7a 46 69 65 6c 64 3b 20 20 20 20 20 20 20 2f  szField;       /
11670 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
11680 73 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74  s in the content
11690 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 20   of a field */. 
116a0 20 75 33 32 20 61 76 61 69 6c 3b 20 20 20 20 20   u32 avail;     
116b0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
116c0 20 62 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61   bytes of availa
116d0 62 6c 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33  ble data */.  u3
116e0 32 20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  2 t;            
116f0 20 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20   /* A type code 
11700 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20  from the record 
11710 68 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20  header */.  Mem 
11720 2a 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f  *pReg;         /
11730 2a 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e  * PseudoTable in
11740 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a  put register */.
11750 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
11760 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
11770 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
11780 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
11790 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74  rsor) );.  pDest
117a0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
117b0 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
117c0 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b  hange(p, pDest);
117d0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
117e0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
117f0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
11800 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
11810 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
11820 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
11830 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 46 69  sert( p2<pC->nFi
11840 65 6c 64 20 29 3b 0a 20 20 61 54 79 70 65 20 3d  eld );.  aType =
11850 20 70 43 2d 3e 61 54 79 70 65 3b 0a 20 20 61 4f   pC->aType;.  aO
11860 66 66 73 65 74 20 3d 20 61 54 79 70 65 20 2b 20  ffset = aType + 
11870 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 23 69 66 6e  pC->nField;.#ifn
11880 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
11890 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 61  VIRTUALTABLE.  a
118a0 73 73 65 72 74 28 20 70 43 2d 3e 70 56 74 61 62  ssert( pC->pVtab
118b0 43 75 72 73 6f 72 3d 3d 30 20 29 3b 20 2f 2a 20  Cursor==0 ); /* 
118c0 4f 50 5f 43 6f 6c 75 6d 6e 20 6e 65 76 65 72 20  OP_Column never 
118d0 63 61 6c 6c 65 64 20 6f 6e 20 76 69 72 74 75 61  called on virtua
118e0 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69  l table */.#endi
118f0 66 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  f.  pCrsr = pC->
11900 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
11910 74 28 20 70 43 72 73 72 21 3d 30 20 7c 7c 20 70  t( pCrsr!=0 || p
11920 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
11930 67 3e 30 20 29 3b 20 2f 2a 20 70 43 72 73 72 20  g>0 ); /* pCrsr 
11940 4e 55 4c 4c 20 6f 6e 20 50 73 65 75 64 6f 54 61  NULL on PseudoTa
11950 62 6c 65 73 20 2a 2f 0a 20 20 61 73 73 65 72 74  bles */.  assert
11960 28 20 70 43 72 73 72 21 3d 30 20 7c 7c 20 70 43  ( pCrsr!=0 || pC
11970 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 20 20 20 20  ->nullRow );    
11980 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 6e 75 6c        /* pC->nul
11990 6c 52 6f 77 20 6f 6e 20 50 73 65 75 64 6f 54 61  lRow on PseudoTa
119a0 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66  bles */..  /* If
119b0 20 74 68 65 20 63 75 72 73 6f 72 20 63 61 63 68   the cursor cach
119c0 65 20 69 73 20 73 74 61 6c 65 2c 20 62 72 69 6e  e is stale, brin
119d0 67 20 69 74 20 75 70 2d 74 6f 2d 64 61 74 65 20  g it up-to-date 
119e0 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
119f0 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
11a00 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63 20  o(pC);.  if( rc 
11a10 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
11a20 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
11a30 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
11a40 21 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 7c 7c  !=p->cacheCtr ||
11a50 20 28 70 4f 70 2d 3e 70 35 26 4f 50 46 4c 41 47   (pOp->p5&OPFLAG
11a60 5f 43 4c 45 41 52 43 41 43 48 45 29 21 3d 30 20  _CLEARCACHE)!=0 
11a70 29 7b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e  ){.    if( pC->n
11a80 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20  ullRow ){.      
11a90 69 66 28 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a  if( pCrsr==0 ){.
11aa0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
11ab0 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
11ac0 65 67 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20  eg>0 );.        
11ad0 70 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d  pReg = &aMem[pC-
11ae0 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d  >pseudoTableReg]
11af0 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
11b00 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20  ( pReg->flags & 
11b10 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20  MEM_Blob );.    
11b20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
11b30 73 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b 0a  sValid(pReg) );.
11b40 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c          pC->payl
11b50 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73 7a  oadSize = pC->sz
11b60 52 6f 77 20 3d 20 61 76 61 69 6c 20 3d 20 70 52  Row = avail = pR
11b70 65 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70  eg->n;.        p
11b80 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 70  C->aRow = (u8*)p
11b90 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65  Reg->z;.      }e
11ba0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 4d 65 6d  lse{.        Mem
11bb0 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65 73  SetTypeFlag(pDes
11bc0 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
11bd0 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
11be0 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20  lumn_out;.      
11bf0 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
11c00 20 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72     assert( pCrsr
11c10 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 43   );.      if( pC
11c20 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a  ->isTable==0 ){.
11c30 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
11c40 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
11c50 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29  orIsValid(pCrsr)
11c60 20 29 3b 0a 20 20 20 20 20 20 20 20 56 56 41 5f   );.        VVA_
11c70 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74  ONLY(rc =) sqlit
11c80 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
11c90 43 72 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69  Crsr, &payloadSi
11ca0 7a 65 36 34 29 3b 0a 20 20 20 20 20 20 20 20 61  ze64);.        a
11cb0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
11cc0 45 5f 4f 4b 20 29 3b 20 2f 2a 20 54 72 75 65 20  E_OK ); /* True 
11cd0 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f  because of Curso
11ce0 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61  rMoveto() call a
11cf0 62 6f 76 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  bove */.        
11d00 2f 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 50  /* sqlite3BtreeP
11d10 61 72 73 65 43 65 6c 6c 50 74 72 28 29 20 75 73  arseCellPtr() us
11d20 65 73 20 67 65 74 56 61 72 69 6e 74 33 32 28 29  es getVarint32()
11d30 20 74 6f 20 65 78 74 72 61 63 74 20 74 68 65 0a   to extract the.
11d40 20 20 20 20 20 20 20 20 2a 2a 20 70 61 79 6c 6f          ** paylo
11d50 61 64 20 73 69 7a 65 2c 20 73 6f 20 69 74 20 69  ad size, so it i
11d60 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72  s impossible for
11d70 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 74   payloadSize64 t
11d80 6f 20 62 65 0a 20 20 20 20 20 20 20 20 2a 2a 20  o be.        ** 
11d90 6c 61 72 67 65 72 20 74 68 61 6e 20 33 32 20 62  larger than 32 b
11da0 69 74 73 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  its. */.        
11db0 61 73 73 65 72 74 28 20 28 70 61 79 6c 6f 61 64  assert( (payload
11dc0 53 69 7a 65 36 34 20 26 20 53 51 4c 49 54 45 5f  Size64 & SQLITE_
11dd0 4d 41 58 5f 55 33 32 29 3d 3d 28 75 36 34 29 70  MAX_U32)==(u64)p
11de0 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 29 3b 0a  ayloadSize64 );.
11df0 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77          pC->aRow
11e00 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b   = sqlite3BtreeK
11e10 65 79 46 65 74 63 68 28 70 43 72 73 72 2c 20 26  eyFetch(pCrsr, &
11e20 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 20 20  avail);.        
11e30 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
11e40 3d 20 28 75 33 32 29 70 61 79 6c 6f 61 64 53 69  = (u32)payloadSi
11e50 7a 65 36 34 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ze64;.      }els
11e60 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  e{.        asser
11e70 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
11e80 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72  ursorIsValid(pCr
11e90 73 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 56  sr) );.        V
11ea0 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71  VA_ONLY(rc =) sq
11eb0 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 53 69  lite3BtreeDataSi
11ec0 7a 65 28 70 43 72 73 72 2c 20 26 70 43 2d 3e 70  ze(pCrsr, &pC->p
11ed0 61 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20  ayloadSize);.   
11ee0 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d       assert( rc=
11ef0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20  =SQLITE_OK );   
11f00 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63 61  /* DataSize() ca
11f10 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20  nnot fail */.   
11f20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20       pC->aRow = 
11f30 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
11f40 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76  Fetch(pCrsr, &av
11f50 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ail);.      }.  
11f60 20 20 20 20 61 73 73 65 72 74 28 20 61 76 61 69      assert( avai
11f70 6c 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a 20  l<=65536 );  /* 
11f80 4d 61 78 69 6d 75 6d 20 70 61 67 65 20 73 69 7a  Maximum page siz
11f90 65 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20 20  e is 64KiB */.  
11fa0 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c      if( pC->payl
11fb0 6f 61 64 53 69 7a 65 20 3c 3d 20 28 75 33 32 29  oadSize <= (u32)
11fc0 61 76 61 69 6c 20 29 7b 0a 20 20 20 20 20 20 20  avail ){.       
11fd0 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 70 43 2d   pC->szRow = pC-
11fe0 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20  >payloadSize;.  
11ff0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
12000 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61     pC->szRow = a
12010 76 61 69 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20  vail;.      }.  
12020 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c      if( pC->payl
12030 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64  oadSize > (u32)d
12040 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
12050 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
12060 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 74  {.        goto t
12070 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20 7d 0a  oo_big;.      }.
12080 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61      }.    pC->ca
12090 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63  cheStatus = p->c
120a0 61 63 68 65 43 74 72 3b 0a 20 20 20 20 70 43 2d  acheCtr;.    pC-
120b0 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20 67 65  >iHdrOffset = ge
120c0 74 56 61 72 69 6e 74 33 32 28 70 43 2d 3e 61 52  tVarint32(pC->aR
120d0 6f 77 2c 20 6f 66 66 73 65 74 29 3b 0a 20 20 20  ow, offset);.   
120e0 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20   pC->nHdrParsed 
120f0 3d 20 30 3b 0a 20 20 20 20 61 4f 66 66 73 65 74  = 0;.    aOffset
12100 5b 30 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 20 20  [0] = offset;.  
12110 20 20 69 66 28 20 61 76 61 69 6c 3c 6f 66 66 73    if( avail<offs
12120 65 74 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 70  et ){.      /* p
12130 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74  C->aRow does not
12140 20 68 61 76 65 20 74 6f 20 68 6f 6c 64 20 74 68   have to hold th
12150 65 20 65 6e 74 69 72 65 20 72 6f 77 2c 20 62 75  e entire row, bu
12160 74 20 69 74 20 64 6f 65 73 20 61 74 20 6c 65 61  t it does at lea
12170 73 74 0a 20 20 20 20 20 20 2a 2a 20 6e 65 65 64  st.      ** need
12180 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68 65   to cover the he
12190 61 64 65 72 20 6f 66 20 74 68 65 20 72 65 63 6f  ader of the reco
121a0 72 64 2e 20 20 49 66 20 70 43 2d 3e 61 52 6f 77  rd.  If pC->aRow
121b0 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69   does not contai
121c0 6e 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63  n.      ** the c
121d0 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72 2c 20  omplete header, 
121e0 74 68 65 6e 20 73 65 74 20 69 74 20 74 6f 20 7a  then set it to z
121f0 65 72 6f 2c 20 66 6f 72 63 69 6e 67 20 74 68 65  ero, forcing the
12200 20 68 65 61 64 65 72 20 74 6f 20 62 65 0a 20 20   header to be.  
12210 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c      ** dynamical
12220 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 2a 2f  ly allocated. */
12230 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20  .      pC->aRow 
12240 3d 20 30 3b 0a 20 20 20 20 20 20 70 43 2d 3e 73  = 0;.      pC->s
12250 7a 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  zRow = 0;.    }.
12260 0a 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  .    /* Make sur
12270 65 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61  e a corrupt data
12280 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69 76  base has not giv
12290 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69 7a  en us an oversiz
122a0 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20 2a 2a  e header..    **
122b0 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f 20   Do this now to 
122c0 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73 69 7a  avoid an oversiz
122d0 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
122e0 69 6f 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ion..    **.    
122f0 2a 2a 20 54 79 70 65 20 65 6e 74 72 69 65 73 20  ** Type entries 
12300 63 61 6e 20 62 65 20 62 65 74 77 65 65 6e 20 31  can be between 1
12310 20 61 6e 64 20 35 20 62 79 74 65 73 20 65 61 63   and 5 bytes eac
12320 68 2e 20 20 42 75 74 20 34 20 61 6e 64 20 35 20  h.  But 4 and 5 
12330 62 79 74 65 0a 20 20 20 20 2a 2a 20 74 79 70 65  byte.    ** type
12340 73 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64 61  s use so much da
12350 74 61 20 73 70 61 63 65 20 74 68 61 74 20 74 68  ta space that th
12360 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20  ere can only be 
12370 34 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a 20  4096 and 32 of. 
12380 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70     ** them, resp
12390 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74 68  ectively.  So th
123a0 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65 72  e maximum header
123b0 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73 20   length results 
123c0 66 72 6f 6d 20 61 0a 20 20 20 20 2a 2a 20 33 2d  from a.    ** 3-
123d0 62 79 74 65 20 74 79 70 65 20 66 6f 72 20 65 61  byte type for ea
123e0 63 68 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75  ch of the maximu
123f0 6d 20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75 6d  m of 32768 colum
12400 6e 73 20 70 6c 75 73 20 74 68 72 65 65 0a 20 20  ns plus three.  
12410 20 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73    ** extra bytes
12420 20 66 6f 72 20 74 68 65 20 68 65 61 64 65 72 20   for the header 
12430 6c 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20  length itself.  
12440 33 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38  32768*3 + 3 = 98
12450 33 30 37 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  307..    */.    
12460 69 66 28 20 6f 66 66 73 65 74 20 3e 20 39 38 33  if( offset > 983
12470 30 37 20 7c 7c 20 6f 66 66 73 65 74 20 3e 20 70  07 || offset > p
12480 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 29  C->payloadSize )
12490 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
124a0 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
124b0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f  ;.      goto op_
124c0 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20  column_error;.  
124d0 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61    }.  }..  /* Ma
124e0 6b 65 20 73 75 72 65 20 61 74 20 6c 65 61 73 74  ke sure at least
124f0 20 74 68 65 20 66 69 72 73 74 20 70 32 2b 31 20   the first p2+1 
12500 65 6e 74 72 69 65 73 20 6f 66 20 74 68 65 20 68  entries of the h
12510 65 61 64 65 72 20 68 61 76 65 20 62 65 65 6e 0a  eader have been.
12520 20 20 2a 2a 20 70 61 72 73 65 64 20 61 6e 64 20    ** parsed and 
12530 76 61 6c 69 64 20 69 6e 66 6f 72 6d 61 74 69 6f  valid informatio
12540 6e 20 69 73 20 69 6e 20 61 4f 66 66 73 65 74 5b  n is in aOffset[
12550 5d 20 61 6e 64 20 61 54 79 70 65 5b 5d 2e 0a 20  ] and aType[].. 
12560 20 2a 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48   */.  if( pC->nH
12570 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a  drParsed<=p2 ){.
12580 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
12590 69 73 20 6d 6f 72 65 20 68 65 61 64 65 72 20 61  is more header a
125a0 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 61 72  vailable for par
125b0 73 69 6e 67 20 69 6e 20 74 68 65 20 72 65 63 6f  sing in the reco
125c0 72 64 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20 74  rd, try.    ** t
125d0 6f 20 65 78 74 72 61 63 74 20 61 64 64 69 74 69  o extract additi
125e0 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75 70 20 74  onal fields up t
125f0 68 72 6f 75 67 68 20 74 68 65 20 70 32 2b 31 2d  hrough the p2+1-
12600 74 68 20 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f  th field .    */
12610 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 48 64  .    if( pC->iHd
12620 72 4f 66 66 73 65 74 3c 61 4f 66 66 73 65 74 5b  rOffset<aOffset[
12630 30 5d 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d  0] ){.      /* M
12640 61 6b 65 20 73 75 72 65 20 7a 44 61 74 61 20 70  ake sure zData p
12650 6f 69 6e 74 73 20 74 6f 20 65 6e 6f 75 67 68 20  oints to enough 
12660 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  of the record to
12670 20 63 6f 76 65 72 20 74 68 65 20 68 65 61 64 65   cover the heade
12680 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  r. */.      if( 
12690 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20  pC->aRow==0 ){. 
126a0 20 20 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73         memset(&s
126b0 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73  Mem, 0, sizeof(s
126c0 4d 65 6d 29 29 3b 0a 20 20 20 20 20 20 20 20 72  Mem));.        r
126d0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
126e0 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73  emFromBtree(pCrs
126f0 72 2c 20 30 2c 20 61 4f 66 66 73 65 74 5b 30 5d  r, 0, aOffset[0]
12700 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
12710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12720 20 20 20 20 20 20 20 20 21 70 43 2d 3e 69 73 54          !pC->isT
12730 61 62 6c 65 2c 20 26 73 4d 65 6d 29 3b 0a 20 20  able, &sMem);.  
12740 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
12750 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
12760 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
12770 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  umn_error;.     
12780 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7a 44 61     }.        zDa
12790 74 61 20 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a  ta = (u8*)sMem.z
127a0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
127b0 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 70         zData = p
127c0 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d  C->aRow;.      }
127d0 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c  .  .      /* Fil
127e0 6c 20 69 6e 20 61 54 79 70 65 5b 69 5d 20 61 6e  l in aType[i] an
127f0 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c  d aOffset[i] val
12800 75 65 73 20 74 68 72 6f 75 67 68 20 74 68 65 20  ues through the 
12810 70 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a  p2-th field. */.
12820 20 20 20 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48        i = pC->nH
12830 64 72 50 61 72 73 65 64 3b 0a 20 20 20 20 20 20  drParsed;.      
12840 6f 66 66 73 65 74 20 3d 20 61 4f 66 66 73 65 74  offset = aOffset
12850 5b 69 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20  [i];.      zHdr 
12860 3d 20 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48  = zData + pC->iH
12870 64 72 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20  drOffset;.      
12880 7a 45 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20  zEndHdr = zData 
12890 2b 20 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20  + aOffset[0];.  
128a0 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 3d 70      assert( i<=p
128b0 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64  2 && zHdr<zEndHd
128c0 72 20 29 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20  r );.      do{. 
128d0 20 20 20 20 20 20 20 69 66 28 20 7a 48 64 72 5b         if( zHdr[
128e0 30 5d 3c 30 78 38 30 20 29 7b 0a 20 20 20 20 20  0]<0x80 ){.     
128f0 20 20 20 20 20 74 20 3d 20 7a 48 64 72 5b 30 5d       t = zHdr[0]
12900 3b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72  ;.          zHdr
12910 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  ++;.        }els
12920 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64  e{.          zHd
12930 72 20 2b 3d 20 73 71 6c 69 74 65 33 47 65 74 56  r += sqlite3GetV
12940 61 72 69 6e 74 33 32 28 7a 48 64 72 2c 20 26 74  arint32(zHdr, &t
12950 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
12960 20 20 20 20 20 61 54 79 70 65 5b 69 5d 20 3d 20       aType[i] = 
12970 74 3b 0a 20 20 20 20 20 20 20 20 73 7a 46 69 65  t;.        szFie
12980 6c 64 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ld = sqlite3Vdbe
12990 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29  SerialTypeLen(t)
129a0 3b 0a 20 20 20 20 20 20 20 20 6f 66 66 73 65 74  ;.        offset
129b0 20 2b 3d 20 73 7a 46 69 65 6c 64 3b 0a 20 20 20   += szField;.   
129c0 20 20 20 20 20 69 66 28 20 6f 66 66 73 65 74 3c       if( offset<
129d0 73 7a 46 69 65 6c 64 20 29 7b 20 20 2f 2a 20 54  szField ){  /* T
129e0 72 75 65 20 69 66 20 6f 66 66 73 65 74 20 6f 76  rue if offset ov
129f0 65 72 66 6c 6f 77 73 20 2a 2f 0a 20 20 20 20 20  erflows */.     
12a00 20 20 20 20 20 7a 48 64 72 20 3d 20 26 7a 45 6e       zHdr = &zEn
12a10 64 48 64 72 5b 31 5d 3b 20 20 2f 2a 20 46 6f 72  dHdr[1];  /* For
12a20 63 65 73 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ces SQLITE_CORRU
12a30 50 54 20 72 65 74 75 72 6e 20 62 65 6c 6f 77 20  PT return below 
12a40 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  */.          bre
12a50 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ak;.        }.  
12a60 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20        i++;.     
12a70 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20     aOffset[i] = 
12a80 6f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7d 77  offset;.      }w
12a90 68 69 6c 65 28 20 69 3c 3d 70 32 20 26 26 20 7a  hile( i<=p2 && z
12aa0 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 20  Hdr<zEndHdr );. 
12ab0 20 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72       pC->nHdrPar
12ac0 73 65 64 20 3d 20 69 3b 0a 20 20 20 20 20 20 70  sed = i;.      p
12ad0 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20  C->iHdrOffset = 
12ae0 28 75 33 32 29 28 7a 48 64 72 20 2d 20 7a 44 61  (u32)(zHdr - zDa
12af0 74 61 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  ta);.      if( p
12b00 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20  C->aRow==0 ){.  
12b10 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
12b20 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65  eMemRelease(&sMe
12b30 6d 29 3b 0a 20 20 20 20 20 20 20 20 73 4d 65 6d  m);.        sMem
12b40 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  .flags = MEM_Nul
12b50 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20  l;.      }.  .  
12b60 20 20 20 20 2f 2a 20 49 66 20 77 65 20 68 61 76      /* If we hav
12b70 65 20 72 65 61 64 20 6d 6f 72 65 20 68 65 61 64  e read more head
12b80 65 72 20 64 61 74 61 20 74 68 61 6e 20 77 61 73  er data than was
12b90 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
12ba0 65 20 68 65 61 64 65 72 2c 0a 20 20 20 20 20 20  e header,.      
12bb0 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64  ** or if the end
12bc0 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69 65   of the last fie
12bd0 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20 62 65  ld appears to be
12be0 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66   past the end of
12bf0 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 72 65   the.      ** re
12c00 63 6f 72 64 2c 20 6f 72 20 69 66 20 74 68 65 20  cord, or if the 
12c10 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20  end of the last 
12c20 66 69 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f  field appears to
12c30 20 62 65 20 62 65 66 6f 72 65 20 74 68 65 20 65   be before the e
12c40 6e 64 0a 20 20 20 20 20 20 2a 2a 20 6f 66 20 74  nd.      ** of t
12c50 68 65 20 72 65 63 6f 72 64 20 28 77 68 65 6e 20  he record (when 
12c60 61 6c 6c 20 66 69 65 6c 64 73 20 70 72 65 73 65  all fields prese
12c70 6e 74 29 2c 20 74 68 65 6e 20 77 65 20 6d 75 73  nt), then we mus
12c80 74 20 62 65 20 64 65 61 6c 69 6e 67 20 0a 20 20  t be dealing .  
12c90 20 20 20 20 2a 2a 20 77 69 74 68 20 61 20 63 6f      ** with a co
12ca0 72 72 75 70 74 20 64 61 74 61 62 61 73 65 2e 0a  rrupt database..
12cb0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
12cc0 66 28 20 28 7a 48 64 72 20 3e 20 7a 45 6e 64 48  f( (zHdr > zEndH
12cd0 64 72 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 6f  dr).       || (o
12ce0 66 66 73 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c  ffset > pC->payl
12cf0 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20 20  oadSize).       
12d00 7c 7c 20 28 7a 48 64 72 3d 3d 7a 45 6e 64 48 64  || (zHdr==zEndHd
12d10 72 20 26 26 20 6f 66 66 73 65 74 21 3d 70 43 2d  r && offset!=pC-
12d20 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20  >payloadSize).  
12d30 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72      ){.        r
12d40 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
12d50 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20  PT_BKPT;.       
12d60 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
12d70 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
12d80 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20     }..    /* If 
12d90 61 66 74 65 72 20 74 72 79 69 6e 67 20 74 6f 20  after trying to 
12da0 65 78 74 72 61 20 6e 65 77 20 65 6e 74 72 69 65  extra new entrie
12db0 73 20 66 72 6f 6d 20 74 68 65 20 68 65 61 64 65  s from the heade
12dc0 72 2c 20 6e 48 64 72 50 61 72 73 65 64 20 69 73  r, nHdrParsed is
12dd0 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f  .    ** still no
12de0 74 20 75 70 20 74 6f 20 70 32 2c 20 74 68 61 74  t up to p2, that
12df0 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
12e00 72 65 63 6f 72 64 20 68 61 73 20 66 65 77 65 72  record has fewer
12e10 20 74 68 61 6e 20 70 32 0a 20 20 20 20 2a 2a 20   than p2.    ** 
12e20 63 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20 74 68 65  columns.  So the
12e30 20 72 65 73 75 6c 74 20 77 69 6c 6c 20 62 65 20   result will be 
12e40 65 69 74 68 65 72 20 74 68 65 20 64 65 66 61 75  either the defau
12e50 6c 74 20 76 61 6c 75 65 20 6f 72 20 61 20 4e 55  lt value or a NU
12e60 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  LL..    */.    i
12e70 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65  f( pC->nHdrParse
12e80 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 20 20 69  d<=p2 ){.      i
12e90 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
12ea0 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20  P4_MEM ){.      
12eb0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
12ec0 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73  ShallowCopy(pDes
12ed0 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c  t, pOp->p4.pMem,
12ee0 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20   MEM_Static);.  
12ef0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
12f00 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
12f10 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c  g(pDest, MEM_Nul
12f20 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  l);.      }.    
12f30 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
12f40 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  _out;.    }.  }.
12f50 0a 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68  .  /* Extract th
12f60 65 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68  e content for th
12f70 65 20 70 32 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e  e p2+1-th column
12f80 2e 20 20 43 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f  .  Control can o
12f90 6e 6c 79 0a 20 20 2a 2a 20 72 65 61 63 68 20 74  nly.  ** reach t
12fa0 68 69 73 20 70 6f 69 6e 74 20 69 66 20 61 4f 66  his point if aOf
12fb0 66 73 65 74 5b 70 32 5d 2c 20 61 4f 66 66 73 65  fset[p2], aOffse
12fc0 74 5b 70 32 2b 31 5d 2c 20 61 6e 64 20 61 54 79  t[p2+1], and aTy
12fd0 70 65 5b 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20  pe[p2] are.  ** 
12fe0 61 6c 6c 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a  all valid..  */.
12ff0 20 20 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d    assert( p2<pC-
13000 3e 6e 48 64 72 50 61 72 73 65 64 20 29 3b 0a 20  >nHdrParsed );. 
13010 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
13020 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 69 66 28 20  ITE_OK );.  if( 
13030 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73  pC->szRow>=aOffs
13040 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20  et[p2+1] ){.    
13050 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 63  /* This is the c
13060 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65 72 65  ommon case where
13070 20 74 68 65 20 64 65 73 69 72 65 64 20 63 6f 6e   the desired con
13080 74 65 6e 74 20 66 69 74 73 20 6f 6e 20 74 68 65  tent fits on the
13090 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a   original.    **
130a0 20 70 61 67 65 20 2d 20 77 68 65 72 65 20 74 68   page - where th
130b0 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74  e content is not
130c0 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20   on an overflow 
130d0 70 61 67 65 20 2a 2f 0a 20 20 20 20 56 64 62 65  page */.    Vdbe
130e0 4d 65 6d 52 65 6c 65 61 73 65 28 70 44 65 73 74  MemRelease(pDest
130f0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
13100 62 65 53 65 72 69 61 6c 47 65 74 28 70 43 2d 3e  beSerialGet(pC->
13110 61 52 6f 77 2b 61 4f 66 66 73 65 74 5b 70 32 5d  aRow+aOffset[p2]
13120 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20 70 44 65  , aType[p2], pDe
13130 73 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  st);.  }else{.  
13140 20 20 2f 2a 20 54 68 69 73 20 62 72 61 6e 63 68    /* This branch
13150 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20 77 68   happens only wh
13160 65 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20 6f 6e  en content is on
13170 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 20   overflow pages 
13180 2a 2f 0a 20 20 20 20 74 20 3d 20 61 54 79 70 65  */.    t = aType
13190 5b 70 32 5d 3b 0a 20 20 20 20 69 66 28 20 28 28  [p2];.    if( ((
131a0 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41  pOp->p5 & (OPFLA
131b0 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c  G_LENGTHARG|OPFL
131c0 41 47 5f 54 59 50 45 4f 46 41 52 47 29 29 21 3d  AG_TYPEOFARG))!=
131d0 30 0a 20 20 20 20 20 20 20 20 20 20 26 26 20 28  0.          && (
131e0 28 74 3e 3d 31 32 20 26 26 20 28 74 26 31 29 3d  (t>=12 && (t&1)=
131f0 3d 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20  =0) || (pOp->p5 
13200 26 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  & OPFLAG_TYPEOFA
13210 52 47 29 21 3d 30 29 29 0a 20 20 20 20 20 7c 7c  RG)!=0)).     ||
13220 20 28 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56   (len = sqlite3V
13230 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
13240 28 74 29 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20  (t))==0.    ){. 
13250 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20       /* Content 
13260 69 73 20 69 72 72 65 6c 65 76 61 6e 74 20 66 6f  is irrelevant fo
13270 72 20 74 68 65 20 74 79 70 65 6f 66 28 29 20 66  r the typeof() f
13280 75 6e 63 74 69 6f 6e 20 61 6e 64 20 66 6f 72 0a  unction and for.
13290 20 20 20 20 20 20 2a 2a 20 74 68 65 20 6c 65 6e        ** the len
132a0 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  gth(X) function 
132b0 69 66 20 58 20 69 73 20 61 20 62 6c 6f 62 2e 20  if X is a blob. 
132c0 20 53 6f 20 77 65 20 6d 69 67 68 74 20 61 73 20   So we might as 
132d0 77 65 6c 6c 20 75 73 65 0a 20 20 20 20 20 20 2a  well use.      *
132e0 2a 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20  * bogus content 
132f0 72 61 74 68 65 72 20 74 68 61 6e 20 72 65 61 64  rather than read
13300 69 6e 67 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d  ing content from
13310 20 64 69 73 6b 2e 20 20 4e 55 4c 4c 20 77 6f 72   disk.  NULL wor
13320 6b 73 0a 20 20 20 20 20 20 2a 2a 20 66 6f 72 20  ks.      ** for 
13330 74 65 78 74 20 61 6e 64 20 62 6c 6f 62 20 61 6e  text and blob an
13340 64 20 77 68 61 74 65 76 65 72 20 69 73 20 69 6e  d whatever is in
13350 20 74 68 65 20 70 61 79 6c 6f 61 64 53 69 7a 65   the payloadSize
13360 36 34 20 76 61 72 69 61 62 6c 65 0a 20 20 20 20  64 variable.    
13370 20 20 2a 2a 20 77 69 6c 6c 20 77 6f 72 6b 20 66    ** will work f
13380 6f 72 20 65 76 65 72 79 74 68 69 6e 67 20 65 6c  or everything el
13390 73 65 2e 20 20 43 6f 6e 74 65 6e 74 20 69 73 20  se.  Content is 
133a0 61 6c 73 6f 20 69 72 72 65 6c 65 76 61 6e 74 20  also irrelevant 
133b0 69 66 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  if.      ** the 
133c0 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20 69  content length i
133d0 73 20 30 2e 20 2a 2f 0a 20 20 20 20 20 20 7a 44  s 0. */.      zD
133e0 61 74 61 20 3d 20 74 3c 3d 31 33 20 3f 20 28 75  ata = t<=13 ? (u
133f0 38 2a 29 26 70 61 79 6c 6f 61 64 53 69 7a 65 36  8*)&payloadSize6
13400 34 20 3a 20 30 3b 0a 20 20 20 20 20 20 73 4d 65  4 : 0;.      sMe
13410 6d 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20  m.zMalloc = 0;. 
13420 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
13430 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c  memset(&sMem, 0,
13440 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a   sizeof(sMem));.
13450 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
13460 65 4d 65 6d 4d 6f 76 65 28 26 73 4d 65 6d 2c 20  eMemMove(&sMem, 
13470 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 72 63  pDest);.      rc
13480 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
13490 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72  mFromBtree(pCrsr
134a0 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c  , aOffset[p2], l
134b0 65 6e 2c 20 21 70 43 2d 3e 69 73 54 61 62 6c 65  en, !pC->isTable
134c0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
134d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134e0 20 20 20 20 20 26 73 4d 65 6d 29 3b 0a 20 20 20       &sMem);.   
134f0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
13500 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
13510 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65  goto op_column_e
13520 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
13530 20 20 20 20 7a 44 61 74 61 20 3d 20 28 75 38 2a      zData = (u8*
13540 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20  )sMem.z;.    }. 
13550 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
13560 72 69 61 6c 47 65 74 28 7a 44 61 74 61 2c 20 74  rialGet(zData, t
13570 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 2f 2a  , pDest);.    /*
13580 20 49 66 20 77 65 20 64 79 6e 61 6d 69 63 61 6c   If we dynamical
13590 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61  ly allocated spa
135a0 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64  ce to hold the d
135b0 61 74 61 20 28 69 6e 20 74 68 65 0a 20 20 20 20  ata (in the.    
135c0 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  ** sqlite3VdbeMe
135d0 6d 46 72 6f 6d 42 74 72 65 65 28 29 20 63 61 6c  mFromBtree() cal
135e0 6c 20 61 62 6f 76 65 29 20 74 68 65 6e 20 74 72  l above) then tr
135f0 61 6e 73 66 65 72 20 63 6f 6e 74 72 6f 6c 20 6f  ansfer control o
13600 66 20 74 68 61 74 0a 20 20 20 20 2a 2a 20 64 79  f that.    ** dy
13610 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61  namically alloca
13620 74 65 64 20 73 70 61 63 65 20 6f 76 65 72 20 74  ted space over t
13630 6f 20 74 68 65 20 70 44 65 73 74 20 73 74 72 75  o the pDest stru
13640 63 74 75 72 65 2e 0a 20 20 20 20 2a 2a 20 54 68  cture..    ** Th
13650 69 73 20 70 72 65 76 65 6e 74 73 20 61 20 6d 65  is prevents a me
13660 6d 6f 72 79 20 63 6f 70 79 2e 20 2a 2f 0a 20 20  mory copy. */.  
13670 20 20 69 66 28 20 73 4d 65 6d 2e 7a 4d 61 6c 6c    if( sMem.zMall
13680 6f 63 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  oc ){.      asse
13690 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d  rt( sMem.z==sMem
136a0 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20 20 20  .zMalloc );.    
136b0 20 20 61 73 73 65 72 74 28 20 21 28 70 44 65 73    assert( !(pDes
136c0 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44  t->flags & MEM_D
136d0 79 6e 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73  yn) );.      ass
136e0 65 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c  ert( !(pDest->fl
136f0 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c  ags & (MEM_Blob|
13700 4d 45 4d 5f 53 74 72 29 29 20 7c 7c 20 70 44 65  MEM_Str)) || pDe
13710 73 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b  st->z==sMem.z );
13720 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c  .      pDest->fl
13730 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 45 70 68  ags &= ~(MEM_Eph
13740 65 6d 7c 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a  em|MEM_Static);.
13750 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61        pDest->fla
13760 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a  gs |= MEM_Term;.
13770 20 20 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d        pDest->z =
13780 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 70   sMem.z;.      p
13790 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20  Dest->zMalloc = 
137a0 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20  sMem.zMalloc;.  
137b0 20 20 7d 0a 20 20 7d 0a 20 20 70 44 65 73 74 2d    }.  }.  pDest-
137c0 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
137d0 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a  ..op_column_out:
137e0 0a 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a  .  Deephemeraliz
137f0 65 28 70 44 65 73 74 29 3b 0a 6f 70 5f 63 6f 6c  e(pDest);.op_col
13800 75 6d 6e 5f 65 72 72 6f 72 3a 0a 20 20 55 50 44  umn_error:.  UPD
13810 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
13820 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53  (pDest);.  REGIS
13830 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
13840 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65  3, pDest);.  bre
13850 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
13860 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20 50 32  : Affinity P1 P2
13870 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
13880 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b  sis: affinity(r[
13890 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70  P1@P2]).**.** Ap
138a0 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20 74  ply affinities t
138b0 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20  o a range of P2 
138c0 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69  registers starti
138d0 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a  ng with P1..**.*
138e0 2a 20 50 34 20 69 73 20 61 20 73 74 72 69 6e 67  * P4 is a string
138f0 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72   that is P2 char
13900 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65  acters long. The
13910 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f   nth character o
13920 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
13930 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f  indicates the co
13940 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68  lumn affinity th
13950 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
13960 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a  d for the nth.**
13970 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20   memory cell in 
13980 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61  the range..*/.ca
13990 73 65 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20  se OP_Affinity: 
139a0 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
139b0 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20  zAffinity;   /* 
139c0 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20  The affinity to 
139d0 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20  be applied */.  
139e0 63 68 61 72 20 63 41 66 66 3b 20 20 20 20 20 20  char cAff;      
139f0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69           /* A si
13a00 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 20 6f  ngle character o
13a10 66 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20  f affinity */.. 
13a20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70   zAffinity = pOp
13a30 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74  ->p4.z;.  assert
13a40 28 20 7a 41 66 66 69 6e 69 74 79 21 3d 30 20 29  ( zAffinity!=0 )
13a50 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66  ;.  assert( zAff
13a60 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d  inity[pOp->p2]==
13a70 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  0 );.  pIn1 = &a
13a80 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
13a90 77 68 69 6c 65 28 20 28 63 41 66 66 20 3d 20 2a  while( (cAff = *
13aa0 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d  (zAffinity++))!=
13ab0 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
13ac0 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65   pIn1 <= &p->aMe
13ad0 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  m[(p->nMem-p->nC
13ae0 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61  ursor)] );.    a
13af0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
13b00 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 45  d(pIn1) );.    E
13b10 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b  xpandBlob(pIn1);
13b20 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
13b30 74 79 28 70 49 6e 31 2c 20 63 41 66 66 2c 20 65  ty(pIn1, cAff, e
13b40 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70 49  ncoding);.    pI
13b50 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  n1++;.  }.  brea
13b60 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
13b70 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50   MakeRecord P1 P
13b80 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
13b90 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72  opsis: r[P3]=mkr
13ba0 65 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a  ec(r[P1@P2]).**.
13bb0 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65  ** Convert P2 re
13bc0 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
13bd0 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74  g with P1 into t
13be0 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61  he [record forma
13bf0 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64  t].** use as a d
13c00 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20  ata record in a 
13c10 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
13c20 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e  r as a key.** in
13c30 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20   an index.  The 
13c40 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
13c50 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20   can decode the 
13c60 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a  record later..**
13c70 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20  .** P4 may be a 
13c80 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
13c90 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
13ca0 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61 72  g.  The nth char
13cb0 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
13cc0 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
13cd0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
13ce0 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
13cf0 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
13d00 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66   nth.** field of
13d10 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a   the index key..
13d20 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e  **.** The mappin
13d30 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72  g from character
13d40 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20   to affinity is 
13d50 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c  given by the SQL
13d60 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72  ITE_AFF_.** macr
13d70 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71  os defined in sq
13d80 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a  liteInt.h..**.**
13d90 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74   If P4 is NULL t
13da0 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69  hen all index fi
13db0 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66  elds have the af
13dc0 66 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a  finity NONE..*/.
13dd0 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f  case OP_MakeReco
13de0 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77  rd: {.  u8 *zNew
13df0 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f  Record;        /
13e00 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f  * A buffer to ho
13e10 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  ld the data for 
13e20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  the new record *
13e30 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20  /.  Mem *pRec;  
13e40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
13e50 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
13e60 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20    u64 nData;    
13e70 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13e80 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
13e90 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  ata space */.  i
13ea0 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20  nt nHdr;        
13eb0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13ec0 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
13ed0 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36  er space */.  i6
13ee0 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  4 nByte;        
13ef0 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61       /* Data spa
13f00 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
13f10 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20  this record */. 
13f20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20   int nZero;     
13f30 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13f40 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
13f50 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
13f60 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
13f70 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20  t nVarint;      
13f80 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13f90 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72  f bytes in a var
13fa0 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72  int */.  u32 ser
13fb0 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20  ial_type;       
13fc0 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f  /* Type field */
13fd0 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20  .  Mem *pData0; 
13fe0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
13ff0 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63  st field to be c
14000 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65  ombined into the
14010 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
14020 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20   *pLast;        
14030 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c      /* Last fiel
14040 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
14050 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
14060 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
14070 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
14080 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
14090 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
140a0 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ty;       /* The
140b0 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67   affinity string
140c0 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
140d0 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f  */.  int file_fo
140e0 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46  rmat;       /* F
140f0 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73  ile format to us
14100 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a  e for encoding *
14110 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
14120 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
14130 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77  ace used in zNew
14140 52 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72 20  Record[] header 
14150 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  */.  int j;     
14160 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
14170 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
14180 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e  wRecord[] conten
14190 74 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20  t */.  int len; 
141a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
141b0 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65   Length of a fie
141c0 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75  ld */..  /* Assu
141d0 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ming the record 
141e0 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64  contains N field
141f0 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f  s, the record fo
14200 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20  rmat looks.  ** 
14210 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a  like this:.  **.
14220 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
14230 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14240 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14250 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14260 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
14270 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20  ** | hdr-size | 
14280 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20  type 0 | type 1 
14290 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31  | ... | type N-1
142a0 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c   | data0 | ... |
142b0 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a   data N-1 | .  *
142c0 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
142d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
142e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
142f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14300 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a  ----------.  **.
14310 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20    ** Data(0) is 
14320 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
14330 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29  ter P1.  Data(1)
14340 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69   comes from regi
14350 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61  ster P1+1.  ** a
14360 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a 20 20 2a  nd so froth..  *
14370 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65  *.  ** Each type
14380 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69   field is a vari
14390 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  nt representing 
143a0 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20  the serial type 
143b0 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72  of the .  ** cor
143c0 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20  responding data 
143d0 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c  element (see sql
143e0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
143f0 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20  pe()). The.  ** 
14400 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69  hdr-size field i
14410 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20  s also a varint 
14420 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
14430 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
14440 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74  inning.  ** of t
14450 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74  he record to dat
14460 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61  a0..  */.  nData
14470 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
14480 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
14490 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
144a0 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20  /.  nHdr = 0;   
144b0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
144c0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
144d0 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  der space */.  n
144e0 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20  Zero = 0;       
144f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
14500 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
14510 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
14520 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d  rd */.  nField =
14530 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66   pOp->p1;.  zAff
14540 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
14550 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  z;.  assert( nFi
14560 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  eld>0 && pOp->p2
14570 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46  >0 && pOp->p2+nF
14580 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ield<=(p->nMem-p
14590 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
145a0 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d    pData0 = &aMem
145b0 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65  [nField];.  nFie
145c0 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ld = pOp->p2;.  
145d0 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b  pLast = &pData0[
145e0 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c  nField-1];.  fil
145f0 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69  e_format = p->mi
14600 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
14610 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79  ;..  /* Identify
14620 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
14630 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74  ster */.  assert
14640 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
14650 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  1 || pOp->p3>=pO
14660 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b  p->p1+pOp->p2 );
14670 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
14680 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
14690 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
146a0 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70  pOut);..  /* App
146b0 6c 79 20 74 68 65 20 72 65 71 75 65 73 74 65 64  ly the requested
146c0 20 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c   affinity to all
146d0 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61   inputs.  */.  a
146e0 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70  ssert( pData0<=p
146f0 4c 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41  Last );.  if( zA
14700 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70  ffinity ){.    p
14710 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20  Rec = pData0;.  
14720 20 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c    do{.      appl
14730 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c 20  yAffinity(pRec, 
14740 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 2c 20  *(zAffinity++), 
14750 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 7d  encoding);.    }
14760 77 68 69 6c 65 28 20 28 2b 2b 70 52 65 63 29 3c  while( (++pRec)<
14770 3d 70 4c 61 73 74 20 29 3b 0a 20 20 7d 0a 0a 20  =pLast );.  }.. 
14780 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68   /* Loop through
14790 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74 68   the elements th
147a0 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20  at will make up 
147b0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66 69  the record to fi
147c0 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f  gure.  ** out ho
147d0 77 20 6d 75 63 68 20 73 70 61 63 65 20 69 73 20  w much space is 
147e0 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 65  required for the
147f0 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a   new record..  *
14800 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c 61 73 74  /.  pRec = pLast
14810 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65  ;.  do{.    asse
14820 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
14830 52 65 63 29 20 29 3b 0a 20 20 20 20 73 65 72 69  Rec) );.    seri
14840 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65  al_type = sqlite
14850 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28  3VdbeSerialType(
14860 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61  pRec, file_forma
14870 74 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71  t);.    len = sq
14880 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
14890 79 70 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79  ypeLen(serial_ty
148a0 70 65 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65  pe);.    if( pRe
148b0 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  c->flags & MEM_Z
148c0 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ero ){.      if(
148d0 20 6e 44 61 74 61 20 29 7b 0a 20 20 20 20 20 20   nData ){.      
148e0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
148f0 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29  ExpandBlob(pRec)
14900 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
14910 20 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20         nZero += 
14920 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20  pRec->u.nZero;. 
14930 20 20 20 20 20 20 20 6c 65 6e 20 2d 3d 20 70 52         len -= pR
14940 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20  ec->u.nZero;.   
14950 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e     }.    }.    n
14960 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20  Data += len;.   
14970 20 74 65 73 74 63 61 73 65 28 20 73 65 72 69 61   testcase( seria
14980 6c 5f 74 79 70 65 3d 3d 31 32 37 20 29 3b 0a 20  l_type==127 );. 
14990 20 20 20 74 65 73 74 63 61 73 65 28 20 73 65 72     testcase( ser
149a0 69 61 6c 5f 74 79 70 65 3d 3d 31 32 38 20 29 3b  ial_type==128 );
149b0 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73 65 72  .    nHdr += ser
149c0 69 61 6c 5f 74 79 70 65 3c 3d 31 32 37 20 3f 20  ial_type<=127 ? 
149d0 31 20 3a 20 73 71 6c 69 74 65 33 56 61 72 69 6e  1 : sqlite3Varin
149e0 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65  tLen(serial_type
149f0 29 3b 0a 20 20 7d 77 68 69 6c 65 28 20 28 2d 2d  );.  }while( (--
14a00 70 52 65 63 29 3e 3d 70 44 61 74 61 30 20 29 3b  pRec)>=pData0 );
14a10 0a 0a 20 20 2f 2a 20 41 64 64 20 74 68 65 20 69  ..  /* Add the i
14a20 6e 69 74 69 61 6c 20 68 65 61 64 65 72 20 76 61  nitial header va
14a30 72 69 6e 74 20 61 6e 64 20 74 6f 74 61 6c 20 74  rint and total t
14a40 68 65 20 73 69 7a 65 20 2a 2f 0a 20 20 74 65 73  he size */.  tes
14a50 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 36  tcase( nHdr==126
14a60 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
14a70 6e 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69  nHdr==127 );.  i
14a80 66 28 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a  f( nHdr<=126 ){.
14a90 20 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f      /* The commo
14aa0 6e 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48  n case */.    nH
14ab0 64 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65  dr += 1;.  }else
14ac0 7b 0a 20 20 20 20 2f 2a 20 52 61 72 65 20 63 61  {.    /* Rare ca
14ad0 73 65 20 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c  se of a really l
14ae0 61 72 67 65 20 68 65 61 64 65 72 20 2a 2f 0a 20  arge header */. 
14af0 20 20 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c     nVarint = sql
14b00 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48  ite3VarintLen(nH
14b10 64 72 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d  dr);.    nHdr +=
14b20 20 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20 69 66   nVarint;.    if
14b30 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65  ( nVarint<sqlite
14b40 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
14b50 20 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20   ) nHdr++;.  }. 
14b60 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44   nByte = nHdr+nD
14b70 61 74 61 3b 0a 20 20 69 66 28 20 6e 42 79 74 65  ata;.  if( nByte
14b80 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
14b90 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
14ba0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
14bb0 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _big;.  }..  /* 
14bc0 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f 75  Make sure the ou
14bd0 74 70 75 74 20 72 65 67 69 73 74 65 72 20 68 61  tput register ha
14be0 73 20 61 20 62 75 66 66 65 72 20 6c 61 72 67 65  s a buffer large
14bf0 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72 65   enough to store
14c00 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72   .  ** the new r
14c10 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70 75  ecord. The outpu
14c20 74 20 72 65 67 69 73 74 65 72 20 28 70 4f 70 2d  t register (pOp-
14c30 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  >p3) is not allo
14c40 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f  wed to.  ** be o
14c50 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20  ne of the input 
14c60 72 65 67 69 73 74 65 72 73 20 28 62 65 63 61 75  registers (becau
14c70 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  se the following
14c80 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71   call to.  ** sq
14c90 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77  lite3VdbeMemGrow
14ca0 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72  () could clobber
14cb0 20 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72   the value befor
14cc0 65 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20  e it is used).. 
14cd0 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65   */.  if( sqlite
14ce0 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
14cf0 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c 20 30  t, (int)nByte, 0
14d00 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  ) ){.    goto no
14d10 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77  _mem;.  }.  zNew
14d20 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29 70  Record = (u8 *)p
14d30 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72  Out->z;..  /* Wr
14d40 69 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 2a  ite the record *
14d50 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69 6e  /.  i = putVarin
14d60 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20  t32(zNewRecord, 
14d70 6e 48 64 72 29 3b 0a 20 20 6a 20 3d 20 6e 48 64  nHdr);.  j = nHd
14d80 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 61  r;.  assert( pDa
14d90 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20  ta0<=pLast );.  
14da0 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20  pRec = pData0;. 
14db0 20 64 6f 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f   do{.    serial_
14dc0 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64  type = sqlite3Vd
14dd0 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65  beSerialType(pRe
14de0 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b  c, file_format);
14df0 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72  .    i += putVar
14e00 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72  int32(&zNewRecor
14e10 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70  d[i], serial_typ
14e20 65 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  e);            /
14e30 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f  * serial type */
14e40 0a 20 20 20 20 6a 20 2b 3d 20 73 71 6c 69 74 65  .    j += sqlite
14e50 33 56 64 62 65 53 65 72 69 61 6c 50 75 74 28 26  3VdbeSerialPut(&
14e60 7a 4e 65 77 52 65 63 6f 72 64 5b 6a 5d 2c 20 70  zNewRecord[j], p
14e70 52 65 63 2c 20 73 65 72 69 61 6c 5f 74 79 70 65  Rec, serial_type
14e80 29 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a 2f  ); /* content */
14e90 0a 20 20 7d 77 68 69 6c 65 28 20 28 2b 2b 70 52  .  }while( (++pR
14ea0 65 63 29 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20  ec)<=pLast );.  
14eb0 61 73 73 65 72 74 28 20 69 3d 3d 6e 48 64 72 20  assert( i==nHdr 
14ec0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6a 3d 3d  );.  assert( j==
14ed0 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65  nByte );..  asse
14ee0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
14ef0 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
14f00 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
14f10 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69  ;.  pOut->n = (i
14f20 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74  nt)nByte;.  pOut
14f30 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c  ->flags = MEM_Bl
14f40 6f 62 20 7c 20 4d 45 4d 5f 44 79 6e 3b 0a 20 20  ob | MEM_Dyn;.  
14f50 70 4f 75 74 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a  pOut->xDel = 0;.
14f60 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20    if( nZero ){. 
14f70 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f     pOut->u.nZero
14f80 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f   = nZero;.    pO
14f90 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
14fa0 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75  _Zero;.  }.  pOu
14fb0 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f  t->enc = SQLITE_
14fc0 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73  UTF8;  /* In cas
14fd0 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76  e the blob is ev
14fe0 65 72 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  er converted to 
14ff0 74 65 78 74 20 2a 2f 0a 20 20 52 45 47 49 53 54  text */.  REGIST
15000 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
15010 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54  , pOut);.  UPDAT
15020 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
15030 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
15040 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75  ../* Opcode: Cou
15050 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nt P1 P2 * * *.*
15060 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
15070 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20  ]=count().**.** 
15080 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72  Store the number
15090 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20   of entries (an 
150a0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20 69  integer value) i
150b0 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
150c0 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20  ndex .** opened 
150d0 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20  by cursor P1 in 
150e0 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23  register P2.*/.#
150f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
15100 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61  IT_BTREECOUNT.ca
15110 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20  se OP_Count: {  
15120 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
15130 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
15140 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43  64 nEntry;.  BtC
15150 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20  ursor *pCrsr;.. 
15160 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73   pCrsr = p->apCs
15170 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75 72  r[pOp->p1]->pCur
15180 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
15190 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72 79  Crsr );.  nEntry
151a0 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
151b0 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64  eded.  Only used
151c0 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61   to silence a wa
151d0 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d  rning. */.  rc =
151e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75   sqlite3BtreeCou
151f0 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72  nt(pCrsr, &nEntr
15200 79 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  y);.  pOut->u.i 
15210 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72 65 61  = nEntry;.  brea
15220 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
15230 4f 70 63 6f 64 65 3a 20 53 61 76 65 70 6f 69 6e  Opcode: Savepoin
15240 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  t P1 * * P4 *.**
15250 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65 61 73  .** Open, releas
15260 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74 68  e or rollback th
15270 65 20 73 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65  e savepoint name
15280 64 20 62 79 20 70 61 72 61 6d 65 74 65 72 20 50  d by parameter P
15290 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a 20  4, depending.** 
152a0 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  on the value of 
152b0 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20 6e 65  P1. To open a ne
152c0 77 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d  w savepoint, P1=
152d0 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73 65 20 28  =0. To release (
152e0 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20 65 78  commit) an.** ex
152f0 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74  isting savepoint
15300 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f 20 72  , P1==1, or to r
15310 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69 73 74  ollback an exist
15320 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 20 50 31  ing savepoint P1
15330 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ==2..*/.case OP_
15340 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20 20 69  Savepoint: {.  i
15350 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20  nt p1;          
15360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15370 2a 20 56 61 6c 75 65 20 6f 66 20 50 31 20 6f 70  * Value of P1 op
15380 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61 72 20  erand */.  char 
15390 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
153a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
153b0 6d 65 20 6f 66 20 73 61 76 65 70 6f 69 6e 74 20  me of savepoint 
153c0 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a  */.  int nName;.
153d0 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65    Savepoint *pNe
153e0 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  w;.  Savepoint *
153f0 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 53 61  pSavepoint;.  Sa
15400 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a 20  vepoint *pTmp;. 
15410 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b   int iSavepoint;
15420 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20 70 31  .  int ii;..  p1
15430 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 4e   = pOp->p1;.  zN
15440 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ame = pOp->p4.z;
15450 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68  ..  /* Assert th
15460 61 74 20 74 68 65 20 70 31 20 70 61 72 61 6d 65  at the p1 parame
15470 74 65 72 20 69 73 20 76 61 6c 69 64 2e 20 41 6c  ter is valid. Al
15480 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 72 65  so that if there
15490 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a   is no open.  **
154a0 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
154b0 65 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f 74 20  en there cannot 
154c0 62 65 20 61 6e 79 20 73 61 76 65 70 6f 69 6e 74  be any savepoint
154d0 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  s. .  */.  asser
154e0 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  t( db->pSavepoin
154f0 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75 74 6f  t==0 || db->auto
15500 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61  Commit==0 );.  a
15510 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56 45 50  ssert( p1==SAVEP
15520 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d  OINT_BEGIN||p1==
15530 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
15540 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  E||p1==SAVEPOINT
15550 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20 61  _ROLLBACK );.  a
15560 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65  ssert( db->pSave
15570 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69 73 54  point || db->isT
15580 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
15590 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  int==0 );.  asse
155a0 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69  rt( checkSavepoi
155b0 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 20  ntCount(db) );. 
155c0 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
155d0 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66 28 20  eader );..  if( 
155e0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45  p1==SAVEPOINT_BE
155f0 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28 20 64  GIN ){.    if( d
15600 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20  b->nVdbeWrite>0 
15610 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e 65  ){.      /* A ne
15620 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e  w savepoint cann
15630 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 69 66  ot be created if
15640 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76   there are activ
15650 65 20 77 72 69 74 65 20 0a 20 20 20 20 20 20 2a  e write .      *
15660 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28 69 2e  * statements (i.
15670 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77 72 69  e. open read/wri
15680 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62  te incremental b
15690 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20  lob handles)..  
156a0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c      */.      sql
156b0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
156c0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
156d0 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76 65  cannot open save
156e0 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20 20 20  point - ".      
156f0 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74    "SQL statement
15700 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b  s in progress");
15710 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
15720 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c  TE_BUSY;.    }el
15730 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20  se{.      nName 
15740 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
15750 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64  0(zName);..#ifnd
15760 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
15770 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 20 20  IRTUALTABLE.    
15780 20 20 2f 2a 20 54 68 69 73 20 63 61 6c 6c 20 69    /* This call i
15790 73 20 4f 6b 20 65 76 65 6e 20 69 66 20 74 68 69  s Ok even if thi
157a0 73 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61  s savepoint is a
157b0 63 74 75 61 6c 6c 79 20 61 20 74 72 61 6e 73 61  ctually a transa
157c0 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73  ction.      ** s
157d0 61 76 65 70 6f 69 6e 74 20 28 61 6e 64 20 74 68  avepoint (and th
157e0 65 72 65 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e  erefore should n
157f0 6f 74 20 70 72 6f 6d 70 74 20 78 53 61 76 65 70  ot prompt xSavep
15800 6f 69 6e 74 28 29 29 20 63 61 6c 6c 62 61 63 6b  oint()) callback
15810 73 2e 0a 20 20 20 20 20 20 2a 2a 20 49 66 20 74  s..      ** If t
15820 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63  his is a transac
15830 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 20 62  tion savepoint b
15840 65 69 6e 67 20 6f 70 65 6e 65 64 2c 20 69 74 20  eing opened, it 
15850 69 73 20 67 75 61 72 61 6e 74 65 65 64 0a 20 20  is guaranteed.  
15860 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20      ** that the 
15870 64 62 2d 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72  db->aVTrans[] ar
15880 72 61 79 20 69 73 20 65 6d 70 74 79 2e 20 20 2a  ray is empty.  *
15890 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
158a0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
158b0 30 20 7c 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73  0 || db->nVTrans
158c0 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 72 63 20  ==0 );.      rc 
158d0 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  = sqlite3VtabSav
158e0 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50  epoint(db, SAVEP
158f0 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20  OINT_BEGIN,.    
15900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15910 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e              db->
15920 6e 53 74 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e  nStatement+db->n
15930 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
15940 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
15950 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
15960 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23  _due_to_error;.#
15970 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20  endif..      /* 
15980 43 72 65 61 74 65 20 61 20 6e 65 77 20 73 61 76  Create a new sav
15990 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65  epoint structure
159a0 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20  . */.      pNew 
159b0 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
159c0 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28  cRaw(db, sizeof(
159d0 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65  Savepoint)+nName
159e0 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  +1);.      if( p
159f0 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70  New ){.        p
15a00 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68  New->zName = (ch
15a10 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20  ar *)&pNew[1];. 
15a20 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e         memcpy(pN
15a30 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65  ew->zName, zName
15a40 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20  , nName+1);.    
15a50 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  .        /* If t
15a60 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20  here is no open 
15a70 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
15a80 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61  n mark this as a
15a90 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20   special.       
15aa0 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e   ** "transaction
15ab0 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a   savepoint". */.
15ac0 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e          if( db->
15ad0 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20  autoCommit ){.  
15ae0 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
15af0 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20  Commit = 0;.    
15b00 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e        db->isTran
15b10 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
15b20 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
15b30 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64  lse{.          d
15b40 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b  b->nSavepoint++;
15b50 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 0a  .        }.    .
15b60 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20          /* Link 
15b70 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  the new savepoin
15b80 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62  t into the datab
15b90 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c 69 73  ase handle's lis
15ba0 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e  t. */.        pN
15bb0 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e  ew->pNext = db->
15bc0 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  pSavepoint;.    
15bd0 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69      db->pSavepoi
15be0 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20  nt = pNew;.     
15bf0 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72     pNew->nDeferr
15c00 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  edCons = db->nDe
15c10 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20  ferredCons;.    
15c20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72      pNew->nDefer
15c30 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d  redImmCons = db-
15c40 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
15c50 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  s;.      }.    }
15c60 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53  .  }else{.    iS
15c70 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20  avepoint = 0;.. 
15c80 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e     /* Find the n
15c90 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20  amed savepoint. 
15ca0 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73  If there is no s
15cb0 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c 20 74  uch savepoint, t
15cc0 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e  hen an.    ** an
15cd0 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e   error is return
15ce0 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20  ed to the user. 
15cf0 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20 20   */.    for(.   
15d00 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20     pSavepoint = 
15d10 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
15d20 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
15d30 74 20 26 26 20 73 71 6c 69 74 65 33 53 74 72 49  t && sqlite3StrI
15d40 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e  Cmp(pSavepoint->
15d50 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20  zName, zName);. 
15d60 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20       pSavepoint 
15d70 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e  = pSavepoint->pN
15d80 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  ext.    ){.     
15d90 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20   iSavepoint++;. 
15da0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21 70 53     }.    if( !pS
15db0 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20  avepoint ){.    
15dc0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
15dd0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
15de0 64 62 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76  db, "no such sav
15df0 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61  epoint: %s", zNa
15e00 6d 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  me);.      rc = 
15e10 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
15e20 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e    }else if( db->
15e30 6e 56 64 62 65 57 72 69 74 65 3e 30 20 26 26 20  nVdbeWrite>0 && 
15e40 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
15e50 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 2f  LEASE ){.      /
15e60 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73  * It is not poss
15e70 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73 65 20  ible to release 
15e80 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76 65 70  (commit) a savep
15e90 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20 61 72  oint if there ar
15ea0 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63 74 69  e .      ** acti
15eb0 76 65 20 77 72 69 74 65 20 73 74 61 74 65 6d 65  ve write stateme
15ec0 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  nts..      */.  
15ed0 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
15ee0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
15ef0 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20 22  , db, .        "
15f00 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73 65 20 73  cannot release s
15f10 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73  avepoint - SQL s
15f20 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
15f30 67 72 65 73 73 22 0a 20 20 20 20 20 20 29 3b 0a  gress".      );.
15f40 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
15f50 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73  E_BUSY;.    }els
15f60 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65 74  e{..      /* Det
15f70 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f  ermine whether o
15f80 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20 61 20  r not this is a 
15f90 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
15fa0 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20  point. If so,.  
15fb0 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69 73 20      ** and this 
15fc0 69 73 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d  is a RELEASE com
15fd0 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 63  mand, then the c
15fe0 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
15ff0 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69 73 20  on .      ** is 
16000 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20 20  committed. .    
16010 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 69    */.      int i
16020 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70  sTransaction = p
16030 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74  Savepoint->pNext
16040 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54 72 61  ==0 && db->isTra
16050 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
16060 74 3b 0a 20 20 20 20 20 20 69 66 28 20 69 73 54  t;.      if( isT
16070 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20 70 31  ransaction && p1
16080 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
16090 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ASE ){.        i
160a0 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33  f( (rc = sqlite3
160b0 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31  VdbeCheckFk(p, 1
160c0 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  ))!=SQLITE_OK ){
160d0 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
160e0 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
160f0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64       }.        d
16100 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
16110 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  1;.        if( s
16120 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
16130 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  )==SQLITE_BUSY )
16140 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 70  {.          p->p
16150 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20  c = pc;.        
16160 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
16170 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
16180 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
16190 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20  ITE_BUSY;.      
161a0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
161b0 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a  turn;.        }.
161c0 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72          db->isTr
161d0 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
161e0 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  nt = 0;.        
161f0 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20  rc = p->rc;.    
16200 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
16210 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62   iSavepoint = db
16220 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20 69  ->nSavepoint - i
16230 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20  Savepoint - 1;. 
16240 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53         if( p1==S
16250 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
16260 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 66  K ){.          f
16270 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e  or(ii=0; ii<db->
16280 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  nDb; ii++){.    
16290 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42          sqlite3B
162a0 74 72 65 65 54 72 69 70 41 6c 6c 43 75 72 73 6f  treeTripAllCurso
162b0 72 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  rs(db->aDb[ii].p
162c0 42 74 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  Bt, SQLITE_ABORT
162d0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
162e0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
162f0 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62   for(ii=0; ii<db
16300 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
16310 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
16320 69 74 65 33 42 74 72 65 65 53 61 76 65 70 6f 69  ite3BtreeSavepoi
16330 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  nt(db->aDb[ii].p
16340 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69  Bt, p1, iSavepoi
16350 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  nt);.          i
16360 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
16370 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
16380 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
16390 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
163a0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
163b0 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53         if( p1==S
163c0 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
163d0 4b 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 26  K && (db->flags&
163e0 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
163f0 6e 67 65 73 29 21 3d 30 20 29 7b 0a 20 20 20 20  nges)!=0 ){.    
16400 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70        sqlite3Exp
16410 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
16420 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 20  ments(db);.     
16430 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65       sqlite3Rese
16440 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e  tAllSchemasOfCon
16450 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20  nection(db);.   
16460 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73         db->flags
16470 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 7c 20   = (db->flags | 
16480 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
16490 6e 67 65 73 29 3b 0a 20 20 20 20 20 20 20 20 7d  nges);.        }
164a0 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20  .      }.  .    
164b0 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73 20    /* Regardless 
164c0 6f 66 20 77 68 65 74 68 65 72 20 74 68 69 73 20  of whether this 
164d0 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72 20  is a RELEASE or 
164e0 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f  ROLLBACK, destro
164f0 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20  y all .      ** 
16500 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74 65  savepoints neste
16510 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20  d inside of the 
16520 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
16530 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a  operated on. */.
16540 20 20 20 20 20 20 77 68 69 6c 65 28 20 64 62 2d        while( db-
16550 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53 61  >pSavepoint!=pSa
16560 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20  vepoint ){.     
16570 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53     pTmp = db->pS
16580 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
16590 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
165a0 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a   = pTmp->pNext;.
165b0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44          sqlite3D
165c0 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29 3b  bFree(db, pTmp);
165d0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61  .        db->nSa
165e0 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20  vepoint--;.     
165f0 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   }..      /* If 
16600 69 74 20 69 73 20 61 20 52 45 4c 45 41 53 45 2c  it is a RELEASE,
16610 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74 68   then destroy th
16620 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  e savepoint bein
16630 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a 20  g operated on . 
16640 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20       ** too. If 
16650 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b  it is a ROLLBACK
16660 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20 74 68   TO, then set th
16670 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 66 65  e number of defe
16680 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a 20 63  rred .      ** c
16690 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
166a0 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69 6e 20  ions present in 
166b0 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f 20  the database to 
166c0 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64  the value stored
166d0 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e 20 74  .      ** when t
166e0 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77 61 73  he savepoint was
166f0 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20   created.  */.  
16700 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45      if( p1==SAVE
16710 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
16720 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
16730 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d   pSavepoint==db-
16740 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20  >pSavepoint );. 
16750 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65         db->pSave
16760 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69  point = pSavepoi
16770 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20  nt->pNext;.     
16780 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
16790 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74 29  (db, pSavepoint)
167a0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 69  ;.        if( !i
167b0 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a  sTransaction ){.
167c0 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
167d0 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20  avepoint--;.    
167e0 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73      }.      }els
167f0 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  e{.        db->n
16800 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 70  DeferredCons = p
16810 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65  Savepoint->nDefe
16820 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
16830 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49    db->nDeferredI
16840 6d 6d 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f  mmCons = pSavepo
16850 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d  int->nDeferredIm
16860 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 0a  mCons;.      }..
16870 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72 61        if( !isTra
16880 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20  nsaction ){.    
16890 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
168a0 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62  VtabSavepoint(db
168b0 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74  , p1, iSavepoint
168c0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
168d0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
168e0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
168f0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
16900 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65      }.  }..  bre
16910 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
16920 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20  : AutoCommit P1 
16930 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  P2 * * *.**.** S
16940 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  et the database 
16950 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67  auto-commit flag
16960 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e   to P1 (1 or 0).
16970 20 49 66 20 50 32 20 69 73 20 74 72 75 65 2c 20   If P2 is true, 
16980 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79  roll.** back any
16990 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76   currently activ
169a0 65 20 62 74 72 65 65 20 74 72 61 6e 73 61 63 74  e btree transact
169b0 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61  ions. If there a
169c0 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a  re any active.**
169d0 20 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d   VMs (apart from
169e0 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e   this one), then
169f0 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c   a ROLLBACK fail
16a00 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66 61 69  s.  A COMMIT fai
16a10 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65 20 61  ls if.** there a
16a20 72 65 20 61 63 74 69 76 65 20 77 72 69 74 69 6e  re active writin
16a30 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76 65 20  g VMs or active 
16a40 56 4d 73 20 74 68 61 74 20 75 73 65 20 73 68 61  VMs that use sha
16a50 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a  red cache..**.**
16a60 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
16a70 6e 20 63 61 75 73 65 73 20 74 68 65 20 56 4d 20  n causes the VM 
16a80 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65  to halt..*/.case
16a90 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20   OP_AutoCommit: 
16aa0 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65 64 41  {.  int desiredA
16ab0 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74  utoCommit;.  int
16ac0 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69 6e   iRollback;.  in
16ad0 74 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a 20 20 64  t turnOnAC;..  d
16ae0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
16af0 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52   = pOp->p1;.  iR
16b00 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70  ollback = pOp->p
16b10 32 3b 0a 20 20 74 75 72 6e 4f 6e 41 43 20 3d 20  2;.  turnOnAC = 
16b20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
16b30 74 20 26 26 20 21 64 62 2d 3e 61 75 74 6f 43 6f  t && !db->autoCo
16b40 6d 6d 69 74 3b 0a 20 20 61 73 73 65 72 74 28 20  mmit;.  assert( 
16b50 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
16b60 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41  t==1 || desiredA
16b70 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a  utoCommit==0 );.
16b80 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65    assert( desire
16b90 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c  dAutoCommit==1 |
16ba0 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29  | iRollback==0 )
16bb0 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
16bc0 6e 56 64 62 65 41 63 74 69 76 65 3e 30 20 29 3b  nVdbeActive>0 );
16bd0 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68    /* At least th
16be0 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74  is one VM is act
16bf0 69 76 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ive */.  assert(
16c00 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
16c10 0a 0a 23 69 66 20 30 0a 20 20 69 66 28 20 74 75  ..#if 0.  if( tu
16c20 72 6e 4f 6e 41 43 20 26 26 20 69 52 6f 6c 6c 62  rnOnAC && iRollb
16c30 61 63 6b 20 26 26 20 64 62 2d 3e 6e 56 64 62 65  ack && db->nVdbe
16c40 41 63 74 69 76 65 3e 31 20 29 7b 0a 20 20 20 20  Active>1 ){.    
16c50 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72  /* If this instr
16c60 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  uction implement
16c70 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 61 6e 64  s a ROLLBACK and
16c80 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 0a 20   other VMs are. 
16c90 20 20 20 2a 2a 20 73 74 69 6c 6c 20 72 75 6e 6e     ** still runn
16ca0 69 6e 67 2c 20 61 6e 64 20 61 20 74 72 61 6e 73  ing, and a trans
16cb0 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65  action is active
16cc0 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  , return an erro
16cd0 72 20 69 6e 64 69 63 61 74 69 6e 67 0a 20 20 20  r indicating.   
16ce0 20 2a 2a 20 74 68 61 74 20 74 68 65 20 6f 74 68   ** that the oth
16cf0 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70  er VMs must comp
16d00 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20  lete first. .   
16d10 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53   */.    sqlite3S
16d20 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
16d30 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f  rMsg, db, "canno
16d40 74 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73  t rollback trans
16d50 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20  action - ".     
16d60 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
16d70 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
16d80 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
16d90 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 0a  E_BUSY;.  }else.
16da0 23 65 6e 64 69 66 0a 20 20 69 66 28 20 74 75 72  #endif.  if( tur
16db0 6e 4f 6e 41 43 20 26 26 20 21 69 52 6f 6c 6c 62  nOnAC && !iRollb
16dc0 61 63 6b 20 26 26 20 64 62 2d 3e 6e 56 64 62 65  ack && db->nVdbe
16dd0 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 2f  Write>0 ){.    /
16de0 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75  * If this instru
16df0 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73  ction implements
16e00 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74   a COMMIT and ot
16e10 68 65 72 20 56 4d 73 20 61 72 65 20 77 72 69 74  her VMs are writ
16e20 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 74 75 72  ing.    ** retur
16e30 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63  n an error indic
16e40 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20 6f  ating that the o
16e50 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f  ther VMs must co
16e60 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20  mplete first. . 
16e70 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65     */.    sqlite
16e80 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
16e90 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e  ErrMsg, db, "can
16ea0 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73  not commit trans
16eb0 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20  action - ".     
16ec0 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
16ed0 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
16ee0 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
16ef0 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20  E_BUSY;.  }else 
16f00 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  if( desiredAutoC
16f10 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43  ommit!=db->autoC
16f20 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66 28  ommit ){.    if(
16f30 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20   iRollback ){.  
16f40 20 20 20 20 61 73 73 65 72 74 28 20 64 65 73 69      assert( desi
16f50 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
16f60 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   );.      sqlite
16f70 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 2c  3RollbackAll(db,
16f80 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f   SQLITE_ABORT_RO
16f90 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20 20 20 64  LLBACK);.      d
16fa0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
16fb0 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  1;.    }else if(
16fc0 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64   (rc = sqlite3Vd
16fd0 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29  beCheckFk(p, 1))
16fe0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
16ff0 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
17000 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73 65  eturn;.    }else
17010 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  {.      db->auto
17020 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64 65 73  Commit = (u8)des
17030 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a  iredAutoCommit;.
17040 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
17050 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51  3VdbeHalt(p)==SQ
17060 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
17070 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b       p->pc = pc;
17080 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74  .        db->aut
17090 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28 31  oCommit = (u8)(1
170a0 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  -desiredAutoComm
170b0 69 74 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e  it);.        p->
170c0 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
170d0 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20 67  _BUSY;.        g
170e0 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
170f0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
17100 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
17110 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a  Statement==0 );.
17120 20 20 20 20 73 71 6c 69 74 65 33 43 6c 6f 73 65      sqlite3Close
17130 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a  Savepoints(db);.
17140 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53      if( p->rc==S
17150 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
17160 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f    rc = SQLITE_DO
17170 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  NE;.    }else{. 
17180 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
17190 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20  _ERROR;.    }.  
171a0 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
171b0 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  rn;.  }else{.   
171c0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
171d0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
171e0 62 2c 0a 20 20 20 20 20 20 20 20 28 21 64 65 73  b,.        (!des
171f0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f  iredAutoCommit)?
17200 22 63 61 6e 6e 6f 74 20 73 74 61 72 74 20 61 20  "cannot start a 
17210 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68  transaction with
17220 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
17230 22 3a 28 0a 20 20 20 20 20 20 20 20 28 69 52 6f  ":(.        (iRo
17240 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20  llback)?"cannot 
17250 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72  rollback - no tr
17260 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74  ansaction is act
17270 69 76 65 22 3a 0a 20 20 20 20 20 20 20 20 20 20  ive":.          
17280 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74           "cannot
17290 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61   commit - no tra
172a0 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69  nsaction is acti
172b0 76 65 22 29 29 3b 0a 20 20 20 20 20 20 20 20 20  ve"));.         
172c0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
172d0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 62 72  _ERROR;.  }.  br
172e0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
172f0 65 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 50  e: Transaction P
17300 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
17310 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61 6e  .** Begin a tran
17320 73 61 63 74 69 6f 6e 2e 20 20 54 68 65 20 74 72  saction.  The tr
17330 61 6e 73 61 63 74 69 6f 6e 20 65 6e 64 73 20 77  ansaction ends w
17340 68 65 6e 20 61 20 43 6f 6d 6d 69 74 20 6f 72 20  hen a Commit or 
17350 52 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 70 63 6f  Rollback.** opco
17360 64 65 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  de is encountere
17370 64 2e 20 20 44 65 70 65 6e 64 69 6e 67 20 6f 6e  d.  Depending on
17380 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   the ON CONFLICT
17390 20 73 65 74 74 69 6e 67 2c 20 74 68 65 0a 2a 2a   setting, the.**
173a0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67   transaction mig
173b0 68 74 20 61 6c 73 6f 20 62 65 20 72 6f 6c 6c 65  ht also be rolle
173c0 64 20 62 61 63 6b 20 69 66 20 61 6e 20 65 72 72  d back if an err
173d0 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  or is encountere
173e0 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  d..**.** P1 is t
173f0 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
17400 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e  database file on
17410 20 77 68 69 63 68 20 74 68 65 20 74 72 61 6e 73   which the trans
17420 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61  action is.** sta
17430 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69  rted.  Index 0 i
17440 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
17450 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64  ase file and ind
17460 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66  ex 1 is the.** f
17470 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d  ile used for tem
17480 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
17490 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20  Indices of 2 or 
174a0 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20 66 6f  more are used fo
174b0 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61  r.** attached da
174c0 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49  tabases..**.** I
174d0 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P2 is non-zero
174e0 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74  , then a write-t
174f0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
17500 61 72 74 65 64 2e 20 20 41 20 52 45 53 45 52 56  arted.  A RESERV
17510 45 44 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 6f 62  ED lock is.** ob
17520 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 64 61  tained on the da
17530 74 61 62 61 73 65 20 66 69 6c 65 20 77 68 65 6e  tabase file when
17540 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63   a write-transac
17550 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e  tion is started.
17560 20 20 4e 6f 0a 2a 2a 20 6f 74 68 65 72 20 70 72    No.** other pr
17570 6f 63 65 73 73 20 63 61 6e 20 73 74 61 72 74 20  ocess can start 
17580 61 6e 6f 74 68 65 72 20 77 72 69 74 65 20 74 72  another write tr
17590 61 6e 73 61 63 74 69 6f 6e 20 77 68 69 6c 65 20  ansaction while 
175a0 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e  this transaction
175b0 20 69 73 0a 2a 2a 20 75 6e 64 65 72 77 61 79 2e   is.** underway.
175c0 20 20 53 74 61 72 74 69 6e 67 20 61 20 77 72 69    Starting a wri
175d0 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  te transaction a
175e0 6c 73 6f 20 63 72 65 61 74 65 73 20 61 20 72 6f  lso creates a ro
175f0 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20  llback journal. 
17600 41 0a 2a 2a 20 77 72 69 74 65 20 74 72 61 6e 73  A.** write trans
17610 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73  action must be s
17620 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 61 6e  tarted before an
17630 79 20 63 68 61 6e 67 65 73 20 63 61 6e 20 62 65  y changes can be
17640 20 6d 61 64 65 20 74 6f 20 74 68 65 0a 2a 2a 20   made to the.** 
17650 64 61 74 61 62 61 73 65 2e 20 20 49 66 20 50 32  database.  If P2
17660 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
17670 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 32 20 74   or equal to 2 t
17680 68 65 6e 20 61 6e 20 45 58 43 4c 55 53 49 56 45  hen an EXCLUSIVE
17690 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 61 6c 73 6f   lock is.** also
176a0 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74 68 65   obtained on the
176b0 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   file..**.** If 
176c0 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
176d0 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20 61  ion is started a
176e0 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73 65 73  nd the Vdbe.uses
176f0 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67  StmtJournal flag
17700 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69   is.** true (thi
17710 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 66  s flag is set if
17720 20 74 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f   the Vdbe may mo
17730 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f  dify more than o
17740 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a  ne row and may.*
17750 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54  * throw an ABORT
17760 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73   exception), a s
17770 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
17780 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65  tion may also be
17790 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65   opened..** More
177a0 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61   specifically, a
177b0 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
177c0 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64  action is opened
177d0 20 69 66 66 20 74 68 65 20 64 61 74 61 62 61 73   iff the databas
177e0 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e.** connection 
177f0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74  is currently not
17800 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d   in autocommit m
17810 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65  ode, or if there
17820 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63   are other.** ac
17830 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e  tive statements.
17840 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   A statement tra
17850 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20  nsaction allows 
17860 74 68 65 20 63 68 61 6e 67 65 73 20 6d 61 64 65  the changes made
17870 20 62 79 20 74 68 69 73 0a 2a 2a 20 56 44 42 45   by this.** VDBE
17880 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
17890 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
178a0 72 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67  r without having
178b0 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68   to roll back th
178c0 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e  e.** entire tran
178d0 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65  saction. If no e
178e0 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65  rror is encounte
178f0 72 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65  red, the stateme
17900 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
17910 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63  * will automatic
17920 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e  ally commit when
17930 20 74 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e   the VDBE halts.
17940 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  .**.** If P2 is 
17950 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61  zero, then a rea
17960 64 2d 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e  d-lock is obtain
17970 65 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ed on the databa
17980 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  se file..**.** I
17990 66 20 50 35 21 3d 30 20 74 68 65 6e 20 74 68 69  f P5!=0 then thi
179a0 73 20 6f 70 63 6f 64 65 20 61 6c 73 6f 20 63 68  s opcode also ch
179b0 65 63 6b 73 20 74 68 65 20 73 63 68 65 6d 61 20  ecks the schema 
179c0 63 6f 6f 6b 69 65 20 61 67 61 69 6e 73 74 20 50  cookie against P
179d0 33 0a 2a 2a 20 61 6e 64 20 74 68 65 20 73 63 68  3.** and the sch
179e0 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63  ema generation c
179f0 6f 75 6e 74 65 72 20 61 67 61 69 6e 73 74 20 50  ounter against P
17a00 34 2e 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65  4..** The cookie
17a10 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61 6c   changes its val
17a20 75 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  ue whenever the 
17a30 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
17a40 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73  changes..** This
17a50 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75 73   operation is us
17a60 65 64 20 74 6f 20 64 65 74 65 63 74 20 77 68 65  ed to detect whe
17a70 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b 69  n that the cooki
17a80 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a  e has changed.**
17a90 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 63 75   and that the cu
17aa0 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e 65  rrent process ne
17ab0 65 64 73 20 74 6f 20 72 65 72 65 61 64 20 74 68  eds to reread th
17ac0 65 20 73 63 68 65 6d 61 2e 0a 2a 2f 0a 63 61 73  e schema..*/.cas
17ad0 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e  e OP_Transaction
17ae0 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74  : {.  Btree *pBt
17af0 3b 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20  ;.  int iMeta;. 
17b00 20 69 6e 74 20 69 47 65 6e 3b 0a 0a 20 20 61 73   int iGen;..  as
17b10 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
17b20 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  er );.  assert( 
17b30 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c  p->readOnly==0 |
17b40 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a  | pOp->p2==0 );.
17b50 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
17b60 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
17b70 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
17b80 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
17b90 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
17ba0 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30  1)<<pOp->p1))!=0
17bb0 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
17bc0 32 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 20  2 && (db->flags 
17bd0 26 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e  & SQLITE_QueryOn
17be0 6c 79 29 21 3d 30 20 29 7b 0a 20 20 20 20 72 63  ly)!=0 ){.    rc
17bf0 20 3d 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e   = SQLITE_READON
17c00 4c 59 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  LY;.    goto abo
17c10 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
17c20 0a 20 20 7d 0a 20 20 70 42 74 20 3d 20 64 62 2d  .  }.  pBt = db-
17c30 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
17c40 74 3b 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b  t;..  if( pBt ){
17c50 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
17c60 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73  3BtreeBeginTrans
17c70 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a  (pBt, pOp->p2);.
17c80 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
17c90 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
17ca0 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20   p->pc = pc;.   
17cb0 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20     p->rc = rc = 
17cc0 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
17cd0 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
17ce0 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  urn;.    }.    i
17cf0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
17d00 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
17d10 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
17d20 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66  r;.    }..    if
17d30 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e  ( pOp->p2 && p->
17d40 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20  usesStmtJournal 
17d50 0a 20 20 20 20 20 26 26 20 28 64 62 2d 3e 61 75  .     && (db->au
17d60 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64  toCommit==0 || d
17d70 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 29 20  b->nVdbeRead>1) 
17d80 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 61 73  .    ){.      as
17d90 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
17da0 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29  eeIsInTrans(pBt)
17db0 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d   );.      if( p-
17dc0 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29  >iStatement==0 )
17dd0 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
17de0 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  ( db->nStatement
17df0 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61 76 65  >=0 && db->nSave
17e00 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20  point>=0 );.    
17e10 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65      db->nStateme
17e20 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20 70  nt++; .        p
17e30 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d 20 64  ->iStatement = d
17e40 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20  b->nSavepoint + 
17e50 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a  db->nStatement;.
17e60 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72        }..      r
17e70 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53  c = sqlite3VtabS
17e80 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56  avepoint(db, SAV
17e90 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d  EPOINT_BEGIN, p-
17ea0 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a  >iStatement-1);.
17eb0 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
17ec0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
17ed0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
17ee0 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28 70 42  treeBeginStmt(pB
17ef0 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  t, p->iStatement
17f00 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  );.      }..    
17f10 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65 20 63    /* Store the c
17f20 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20  urrent value of 
17f30 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
17f40 64 6c 65 73 20 64 65 66 65 72 72 65 64 20 63 6f  dles deferred co
17f50 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20 20 2a  nstraint.      *
17f60 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20 74 68  * counter. If th
17f70 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  e statement tran
17f80 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f  saction needs to
17f90 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c   be rolled back,
17fa0 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 76 61  .      ** the va
17fb0 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 75 6e  lue of this coun
17fc0 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ter needs to be 
17fd0 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a  restored too.  *
17fe0 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74  /.      p->nStmt
17ff0 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  DefCons = db->nD
18000 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20  eferredCons;.   
18010 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 49 6d     p->nStmtDefIm
18020 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  mCons = db->nDef
18030 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20  erredImmCons;.  
18040 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 47 61 74 68    }..    /* Gath
18050 65 72 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  er the schema ve
18060 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72  rsion number for
18070 20 63 68 65 63 6b 69 6e 67 20 2a 2f 0a 20 20 20   checking */.   
18080 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
18090 4d 65 74 61 28 70 42 74 2c 20 42 54 52 45 45 5f  Meta(pBt, BTREE_
180a0 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20  SCHEMA_VERSION, 
180b0 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a  (u32 *)&iMeta);.
180c0 20 20 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e 61      iGen = db->a
180d0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68  Db[pOp->p1].pSch
180e0 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e  ema->iGeneration
180f0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
18100 47 65 6e 20 3d 20 69 4d 65 74 61 20 3d 20 30 3b  Gen = iMeta = 0;
18110 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
18120 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p5==0 || pOp
18130 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
18140 33 32 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  32 );.  if( pOp-
18150 3e 70 35 20 26 26 20 28 69 4d 65 74 61 21 3d 70  >p5 && (iMeta!=p
18160 4f 70 2d 3e 70 33 20 7c 7c 20 69 47 65 6e 21 3d  Op->p3 || iGen!=
18170 70 4f 70 2d 3e 70 34 2e 69 29 20 29 7b 0a 20 20  pOp->p4.i) ){.  
18180 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
18190 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  db, p->zErrMsg);
181a0 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20  .    p->zErrMsg 
181b0 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72 44 75  = sqlite3DbStrDu
181c0 70 28 64 62 2c 20 22 64 61 74 61 62 61 73 65 20  p(db, "database 
181d0 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67  schema has chang
181e0 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20  ed");.    /* If 
181f0 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69  the schema-cooki
18200 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  e from the datab
18210 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73  ase file matches
18220 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20   the cookie .   
18230 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20   ** stored with 
18240 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65  the in-memory re
18250 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
18260 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20  the schema, do. 
18270 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64     ** not reload
18280 20 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d   the schema from
18290 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
182a0 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  le..    **.    *
182b0 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62  * If virtual-tab
182c0 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20  les are in use, 
182d0 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74  this is not just
182e0 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
182f0 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20  ..    ** Often, 
18300 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74  v-tables store t
18310 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68  heir data in oth
18320 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73  er SQLite tables
18330 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61  , which.    ** a
18340 72 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20  re queried from 
18350 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61  within xNext() a
18360 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65  nd other v-table
18370 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20   methods using. 
18380 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71     ** prepared q
18390 75 65 72 69 65 73 2e 20 49 66 20 73 75 63 68 20  ueries. If such 
183a0 61 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f  a query is out-o
183b0 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f  f-date, we do no
183c0 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a  t want to.    **
183d0 20 64 69 73 63 61 72 64 20 74 68 65 20 64 61 74   discard the dat
183e0 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73  abase schema, as
183f0 20 74 68 65 20 75 73 65 72 20 63 6f 64 65 20 69   the user code i
18400 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a  mplementing the.
18410 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77      ** v-table w
18420 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20  ould have to be 
18430 72 65 61 64 79 20 66 6f 72 20 74 68 65 20 73 71  ready for the sq
18440 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
18450 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20  ture itself.    
18460 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64  ** to be invalid
18470 61 74 65 64 20 77 68 65 6e 65 76 65 72 20 73 71  ated whenever sq
18480 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 73 20  lite3_step() is 
18490 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
184a0 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74  in .    ** a v-t
184b0 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20  able method..   
184c0 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   */.    if( db->
184d0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63  aDb[pOp->p1].pSc
184e0 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f  hema->schema_coo
184f0 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20  kie!=iMeta ){.  
18500 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
18510 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 70 4f  OneSchema(db, pO
18520 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20 20  p->p1);.    }.  
18530 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31    p->expired = 1
18540 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
18550 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20  E_SCHEMA;.  }.  
18560 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
18570 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20  ode: ReadCookie 
18580 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
18590 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e  ** Read cookie n
185a0 75 6d 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61  umber P3 from da
185b0 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 77 72  tabase P1 and wr
185c0 69 74 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69  ite it into regi
185d0 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d  ster P2..** P3==
185e0 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61 20  1 is the schema 
185f0 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32 20  version.  P3==2 
18600 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
18610 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33  format..** P3==3
18620 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e   is the recommen
18630 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20  ded pager cache 
18640 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72  size, and so for
18650 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a  th.  P1==0 is.**
18660 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
18670 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d  se file and P1==
18680 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  1 is the databas
18690 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73  e file used to s
186a0 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72  tore.** temporar
186b0 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20  y tables..**.** 
186c0 54 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 20  There must be a 
186d0 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65  read-lock on the
186e0 20 64 61 74 61 62 61 73 65 20 28 65 69 74 68 65   database (eithe
186f0 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  r a transaction.
18700 2a 2a 20 6d 75 73 74 20 62 65 20 73 74 61 72 74  ** must be start
18710 65 64 20 6f 72 20 74 68 65 72 65 20 6d 75 73 74  ed or there must
18720 20 62 65 20 61 6e 20 6f 70 65 6e 20 63 75 72 73   be an open curs
18730 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78  or) before.** ex
18740 65 63 75 74 69 6e 67 20 74 68 69 73 20 69 6e 73  ecuting this ins
18750 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
18760 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a  e OP_ReadCookie:
18770 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
18780 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
18790 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65  ase */.  int iMe
187a0 74 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20  ta;.  int iDb;. 
187b0 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20   int iCookie;.. 
187c0 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
187d0 65 61 64 65 72 20 29 3b 0a 20 20 69 44 62 20 3d  eader );.  iDb =
187e0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f   pOp->p1;.  iCoo
187f0 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  kie = pOp->p3;. 
18800 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
18810 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f  <SQLITE_N_BTREE_
18820 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74  META );.  assert
18830 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
18840 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
18850 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62  ert( db->aDb[iDb
18860 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73  ].pBt!=0 );.  as
18870 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
18880 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b  ask & (((yDbMask
18890 29 31 29 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b  )1)<<iDb))!=0 );
188a0 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  ..  sqlite3Btree
188b0 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b  GetMeta(db->aDb[
188c0 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69  iDb].pBt, iCooki
188d0 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61  e, (u32 *)&iMeta
188e0 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
188f0 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b   iMeta;.  break;
18900 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
18910 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50  etCookie P1 P2 P
18920 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  3 * *.**.** Writ
18930 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
18940 20 72 65 67 69 73 74 65 72 20 50 33 20 28 69 6e   register P3 (in
18950 74 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20  terpreted as an 
18960 69 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f  integer).** into
18970 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50   cookie number P
18980 32 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31  2 of database P1
18990 2e 20 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20  .  P2==1 is the 
189a0 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20  schema version. 
189b0 20 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74 68   .** P2==2 is th
189c0 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61  e database forma
189d0 74 2e 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20  t. P2==3 is the 
189e0 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65  recommended page
189f0 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65  r cache .** size
18a00 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
18a10 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61   P1==0 is the ma
18a20 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
18a30 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68   and P1==1 is th
18a40 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66  e .** database f
18a50 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  ile used to stor
18a60 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  e temporary tabl
18a70 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e  es..**.** A tran
18a80 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20  saction must be 
18a90 73 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 65  started before e
18aa0 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70  xecuting this op
18ab0 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  code..*/.case OP
18ac0 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20  _SetCookie: {   
18ad0 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20      /* in3 */.  
18ae0 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72  Db *pDb;.  asser
18af0 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54  t( pOp->p2<SQLIT
18b00 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29  E_N_BTREE_META )
18b10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
18b20 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
18b30 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
18b40 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
18b50 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73  Mask & (((yDbMas
18b60 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21  k)1)<<pOp->p1))!
18b70 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
18b80 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
18b90 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61  ;.  pDb = &db->a
18ba0 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  Db[pOp->p1];.  a
18bb0 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21  ssert( pDb->pBt!
18bc0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
18bd0 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74  sqlite3SchemaMut
18be0 65 78 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e  exHeld(db, pOp->
18bf0 70 31 2c 20 30 29 20 29 3b 0a 20 20 70 49 6e 33  p1, 0) );.  pIn3
18c00 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
18c10 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ];.  sqlite3Vdbe
18c20 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
18c30 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f  n3);.  /* See no
18c40 74 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73  te about index s
18c50 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65  hifting on OP_Re
18c60 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63  adCookie */.  rc
18c70 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 55   = sqlite3BtreeU
18c80 70 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70  pdateMeta(pDb->p
18c90 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e  Bt, pOp->p2, (in
18ca0 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  t)pIn3->u.i);.  
18cb0 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52  if( pOp->p2==BTR
18cc0 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  EE_SCHEMA_VERSIO
18cd0 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e  N ){.    /* When
18ce0 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
18cf0 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f  ie changes, reco
18d00 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69  rd the new cooki
18d10 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a  e internally */.
18d20 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
18d30 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20  ->schema_cookie 
18d40 3d 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69  = (int)pIn3->u.i
18d50 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20  ;.    db->flags 
18d60 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e  |= SQLITE_Intern
18d70 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65  Changes;.  }else
18d80 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54   if( pOp->p2==BT
18d90 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20  REE_FILE_FORMAT 
18da0 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64  ){.    /* Record
18db0 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20   changes in the 
18dc0 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20  file format */. 
18dd0 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
18de0 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28  >file_format = (
18df0 75 38 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20  u8)pIn3->u.i;.  
18e00 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d  }.  if( pOp->p1=
18e10 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76  =1 ){.    /* Inv
18e20 61 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70  alidate all prep
18e30 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  ared statements 
18e40 77 68 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d  whenever the TEM
18e50 50 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a  P database.    *
18e60 2a 20 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e  * schema is chan
18e70 67 65 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36  ged.  Ticket #16
18e80 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  44 */.    sqlite
18e90 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
18ea0 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
18eb0 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
18ec0 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  0;.  }.  break;.
18ed0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
18ee0 65 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20  enRead P1 P2 P3 
18ef0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
18f00 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50  s: root=P2 iDb=P
18f10 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  3.**.** Open a r
18f20 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20  ead-only cursor 
18f30 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
18f40 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f   table whose roo
18f50 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20  t page is.** P2 
18f60 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69  in a database fi
18f70 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62 61 73  le.  The databas
18f80 65 20 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d  e file is determ
18f90 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20  ined by P3. .** 
18fa0 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20  P3==0 means the 
18fb0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50  main database, P
18fc0 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64  3==1 means the d
18fd0 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72  atabase used for
18fe0 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74   .** temporary t
18ff0 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20  ables, and P3>1 
19000 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65 20 63  means used the c
19010 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74  orresponding att
19020 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  ached.** databas
19030 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65 77  e.  Give the new
19040 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74   cursor an ident
19050 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68  ifier of P1.  Th
19060 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e  e P1.** values n
19070 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69  eed not be conti
19080 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31  guous but all P1
19090 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62   values should b
190a0 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73  e small integers
190b0 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72  ..** It is an er
190c0 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65  ror for P1 to be
190d0 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a   negative..**.**
190e0 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75   If P5!=0 then u
190f0 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
19100 66 20 72 65 67 69 73 74 65 72 20 50 32 20 61 73  f register P2 as
19110 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20   the root page, 
19120 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  not.** the value
19130 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a   of P2 itself..*
19140 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20  *.** There will 
19150 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f  be a read lock o
19160 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  n the database w
19170 68 65 6e 65 76 65 72 20 74 68 65 72 65 20 69 73  henever there is
19180 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73   an.** open curs
19190 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61 74 61  or.  If the data
191a0 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65  base was unlocke
191b0 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20  d prior to this 
191c0 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74  instruction.** t
191d0 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20  hen a read lock 
191e0 69 73 20 61 63 71 75 69 72 65 64 20 61 73 20 70  is acquired as p
191f0 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74  art of this inst
19200 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64  ruction.  A read
19210 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20  .** lock allows 
19220 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20  other processes 
19230 74 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61  to read the data
19240 62 61 73 65 20 62 75 74 20 70 72 6f 68 69 62 69  base but prohibi
19250 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20  ts.** any other 
19260 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64  process from mod
19270 69 66 79 69 6e 67 20 74 68 65 20 64 61 74 61 62  ifying the datab
19280 61 73 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c  ase.  The read l
19290 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73  ock is.** releas
192a0 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73  ed when all curs
192b0 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20  ors are closed. 
192c0 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   If this instruc
192d0 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a  tion attempts.**
192e0 20 74 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c   to get a read l
192f0 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74  ock but fails, t
19300 68 65 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e  he script termin
19310 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20  ates with an.** 
19320 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f  SQLITE_BUSY erro
19330 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  r code..**.** Th
19340 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62  e P4 value may b
19350 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65  e either an inte
19360 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f  ger (P4_INT32) o
19370 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a  r a pointer to.*
19380 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  * a KeyInfo stru
19390 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46  cture (P4_KEYINF
193a0 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70  O). If it is a p
193b0 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49  ointer to a KeyI
193c0 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72  nfo .** structur
193d0 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72  e, then said str
193e0 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74  ucture defines t
193f0 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  he content and c
19400 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71  ollating .** seq
19410 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64  uence of the ind
19420 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e  ex being opened.
19430 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
19440 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  4 is an integer 
19450 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73  .** value, it is
19460 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
19470 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
19480 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a   the table..**.*
19490 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 57  * See also OpenW
194a0 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  rite..*/./* Opco
194b0 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31  de: OpenWrite P1
194c0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
194d0 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50  Synopsis: root=P
194e0 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f  2 iDb=P3.**.** O
194f0 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65  pen a read/write
19500 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31   cursor named P1
19510 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   on the table or
19520 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
19530 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e  t.** page is P2.
19540 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73    Or if P5!=0 us
19550 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
19560 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
19570 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74  find the.** root
19580 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   page..**.** The
19590 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65   P4 value may be
195a0 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67   either an integ
195b0 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72  er (P4_INT32) or
195c0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a   a pointer to.**
195d0 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
195e0 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f  ture (P4_KEYINFO
195f0 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f  ). If it is a po
19600 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e  inter to a KeyIn
19610 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  fo .** structure
19620 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75  , then said stru
19630 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68  cture defines th
19640 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f  e content and co
19650 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75  llating .** sequ
19660 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65  ence of the inde
19670 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20  x being opened. 
19680 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34  Otherwise, if P4
19690 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a   is an integer .
196a0 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20  ** value, it is 
196b0 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
196c0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
196d0 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f  the table, or to
196e0 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20   the.** largest 
196f0 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c  index of any col
19700 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65  umn of the table
19710 20 74 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c   that is actuall
19720 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  y used..**.** Th
19730 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  is instruction w
19740 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f  orks just like O
19750 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74  penRead except t
19760 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65  hat it opens the
19770 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65   cursor.** in re
19780 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20  ad/write mode.  
19790 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c  For a given tabl
197a0 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65 20  e, there can be 
197b0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64  one or more read
197c0 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73  -only.** cursors
197d0 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61   or a single rea
197e0 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 62  d/write cursor b
197f0 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a  ut not both..**.
19800 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e  ** See also Open
19810 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Read..*/.case OP
19820 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20  _OpenRead:.case 
19830 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20 7b 0a  OP_OpenWrite: {.
19840 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20    int nField;.  
19850 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
19860 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69  o;.  int p2;.  i
19870 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72  nt iDb;.  int wr
19880 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70  Flag;.  Btree *p
19890 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  X;.  VdbeCursor 
198a0 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62  *pCur;.  Db *pDb
198b0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 28 70 4f  ;..  assert( (pO
198c0 70 2d 3e 70 35 26 28 4f 50 46 4c 41 47 5f 50 32  p->p5&(OPFLAG_P2
198d0 49 53 52 45 47 7c 4f 50 46 4c 41 47 5f 42 55 4c  ISREG|OPFLAG_BUL
198e0 4b 43 53 52 29 29 3d 3d 70 4f 70 2d 3e 70 35 20  KCSR))==pOp->p5 
198f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
19900 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
19910 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70  nWrite || pOp->p
19920 35 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  5==0 );.  assert
19930 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
19940 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
19950 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e  >opcode==OP_Open
19960 52 65 61 64 20 7c 7c 20 70 2d 3e 72 65 61 64 4f  Read || p->readO
19970 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28  nly==0 );..  if(
19980 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20   p->expired ){. 
19990 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41     rc = SQLITE_A
199a0 42 4f 52 54 3b 0a 20 20 20 20 62 72 65 61 6b 3b  BORT;.    break;
199b0 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d  .  }..  nField =
199c0 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d   0;.  pKeyInfo =
199d0 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e   0;.  p2 = pOp->
199e0 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d  p2;.  iDb = pOp-
199f0 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p3;.  assert( i
19a00 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
19a10 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
19a20 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
19a30 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  & (((yDbMask)1)<
19a40 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 70  <iDb))!=0 );.  p
19a50 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44  Db = &db->aDb[iD
19a60 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e  b];.  pX = pDb->
19a70 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70  pBt;.  assert( p
19a80 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f  X!=0 );.  if( pO
19a90 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
19aa0 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20 77  enWrite ){.    w
19ab0 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 61  rFlag = 1;.    a
19ac0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
19ad0 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
19ae0 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20  , iDb, 0) );.   
19af0 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d   if( pDb->pSchem
19b00 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c  a->file_format <
19b10 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
19b20 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20  Format ){.      
19b30 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
19b40 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63  ormat = pDb->pSc
19b50 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
19b60 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  t;.    }.  }else
19b70 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30  {.    wrFlag = 0
19b80 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
19b90 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49  >p5 & OPFLAG_P2I
19ba0 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65  SREG ){.    asse
19bb0 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20  rt( p2>0 );.    
19bc0 61 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e  assert( p2<=(p->
19bd0 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
19be0 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26   );.    pIn2 = &
19bf0 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73  aMem[p2];.    as
19c00 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
19c10 28 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73  (pIn2) );.    as
19c20 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61  sert( (pIn2->fla
19c30 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
19c40 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   );.    sqlite3V
19c50 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
19c60 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d  (pIn2);.    p2 =
19c70 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b   (int)pIn2->u.i;
19c80 0a 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76  .    /* The p2 v
19c90 61 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65  alue always come
19ca0 73 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f  s from a prior O
19cb0 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70  P_CreateTable op
19cc0 63 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20  code and.    ** 
19cd0 74 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c  that opcode will
19ce0 20 61 6c 77 61 79 73 20 73 65 74 20 74 68 65 20   always set the 
19cf0 70 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72  p2 value to 2 or
19d00 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61   more or else fa
19d10 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68  il..    ** If th
19d20 65 72 65 20 77 65 72 65 20 61 20 66 61 69 6c 75  ere were a failu
19d30 72 65 2c 20 74 68 65 20 70 72 65 70 61 72 65 64  re, the prepared
19d40 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64   statement would
19d50 20 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20   have halted.   
19d60 20 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68   ** before reach
19d70 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63  ing this instruc
19d80 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69 66 28  tion. */.    if(
19d90 20 4e 45 56 45 52 28 70 32 3c 32 29 20 29 20 7b   NEVER(p2<2) ) {
19da0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
19db0 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
19dc0 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
19dd0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
19de0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
19df0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
19e00 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70  KEYINFO ){.    p
19e10 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
19e20 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  4.pKeyInfo;.    
19e30 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
19e40 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29  ->enc==ENC(db) )
19e50 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b  ;.    assert( pK
19e60 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29  eyInfo->db==db )
19e70 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  ;.    nField = p
19e80 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b  KeyInfo->nField+
19e90 70 4b 65 79 49 6e 66 6f 2d 3e 6e 58 46 69 65 6c  pKeyInfo->nXFiel
19ea0 64 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  d;.  }else if( p
19eb0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
19ec0 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65  NT32 ){.    nFie
19ed0 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ld = pOp->p4.i;.
19ee0 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f    }.  assert( pO
19ef0 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
19f00 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20  sert( nField>=0 
19f10 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e  );.  testcase( n
19f20 46 69 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20  Field==0 );  /* 
19f30 54 61 62 6c 65 20 77 69 74 68 20 49 4e 54 45 47  Table with INTEG
19f40 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61  ER PRIMARY KEY a
19f50 6e 64 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20  nd nothing else 
19f60 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f  */.  pCur = allo
19f70 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
19f80 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69  p->p1, nField, i
19f90 44 62 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43  Db, 1);.  if( pC
19fa0 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  ur==0 ) goto no_
19fb0 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c  mem;.  pCur->nul
19fc0 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75 72  lRow = 1;.  pCur
19fd0 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 31 3b  ->isOrdered = 1;
19fe0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
19ff0 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70  treeCursor(pX, p
1a000 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49  2, wrFlag, pKeyI
1a010 6e 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75 72 73  nfo, pCur->pCurs
1a020 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65  or);.  pCur->pKe
1a030 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f  yInfo = pKeyInfo
1a040 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c  ;.  assert( OPFL
1a050 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54 52 45  AG_BULKCSR==BTRE
1a060 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20  E_BULKLOAD );.  
1a070 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1a080 6f 72 48 69 6e 74 73 28 70 43 75 72 2d 3e 70 43  orHints(pCur->pC
1a090 75 72 73 6f 72 2c 20 28 70 4f 70 2d 3e 70 35 20  ursor, (pOp->p5 
1a0a0 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  & OPFLAG_BULKCSR
1a0b0 29 29 3b 0a 0a 20 20 2f 2a 20 53 69 6e 63 65 20  ));..  /* Since 
1a0c0 69 74 20 70 65 72 66 6f 72 6d 73 20 6e 6f 20 6d  it performs no m
1a0d0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
1a0e0 20 6f 72 20 49 4f 2c 20 74 68 65 20 6f 6e 6c 79   or IO, the only
1a0f0 20 76 61 6c 75 65 20 74 68 61 74 0a 20 20 2a 2a   value that.  **
1a100 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1a110 73 6f 72 28 29 20 6d 61 79 20 72 65 74 75 72 6e  sor() may return
1a120 20 69 73 20 53 51 4c 49 54 45 5f 4f 4b 2e 20 2a   is SQLITE_OK. *
1a130 2f 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  /.  assert( rc==
1a140 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20  SQLITE_OK );..  
1a150 2f 2a 20 53 65 74 20 74 68 65 20 56 64 62 65 43  /* Set the VdbeC
1a160 75 72 73 6f 72 2e 69 73 54 61 62 6c 65 20 76 61  ursor.isTable va
1a170 72 69 61 62 6c 65 2e 20 50 72 65 76 69 6f 75 73  riable. Previous
1a180 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a   versions of.  *
1a190 2a 20 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f  * SQLite used to
1a1a0 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f   check if the ro
1a1b0 6f 74 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65  ot-page flags we
1a1c0 72 65 20 73 61 6e 65 20 61 74 20 74 68 69 73 20  re sane at this 
1a1d0 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72  point.  ** and r
1a1e0 65 70 6f 72 74 20 64 61 74 61 62 61 73 65 20 63  eport database c
1a1f0 6f 72 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65  orruption if the
1a200 79 20 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20  y were not, but 
1a210 74 68 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20  this check has. 
1a220 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20   ** since moved 
1a230 69 6e 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c  into the btree l
1a240 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43  ayer.  */  .  pC
1a250 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f  ur->isTable = pO
1a260 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45  p->p4type!=P4_KE
1a270 59 49 4e 46 4f 3b 0a 20 20 62 72 65 61 6b 3b 0a  YINFO;.  break;.
1a280 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
1a290 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50  enEphemeral P1 P
1a2a0 32 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e  2 * P4 P5.** Syn
1a2b0 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50  opsis: nColumn=P
1a2c0 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e  2.**.** Open a n
1a2d0 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20  ew cursor P1 to 
1a2e0 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c  a transient tabl
1a2f0 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72  e..** The cursor
1a300 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65   is always opene
1a310 64 20 72 65 61 64 2f 77 72 69 74 65 20 65 76 65  d read/write eve
1a320 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69  n if .** the mai
1a330 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 72 65  n database is re
1a340 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70  ad-only.  The ep
1a350 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65  hemeral.** table
1a360 20 69 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f   is deleted auto
1a370 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74  matically when t
1a380 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f  he cursor is clo
1a390 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73  sed..**.** P2 is
1a3a0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
1a3b0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 65 70  olumns in the ep
1a3c0 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a  hemeral table..*
1a3d0 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69  * The cursor poi
1a3e0 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65 20 74  nts to a BTree t
1a3f0 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e  able if P4==0 an
1a400 64 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64  d to a BTree ind
1a410 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e  ex.** if P4 is n
1a420 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69 73 20  ot 0.  If P4 is 
1a430 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69  not NULL, it poi
1a440 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f  nts to a KeyInfo
1a450 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68   structure.** th
1a460 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 66  at defines the f
1a470 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e  ormat of keys in
1a480 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a   the index..**.*
1a490 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d 65 74  * The P5 paramet
1a4a0 65 72 20 63 61 6e 20 62 65 20 61 20 6d 61 73 6b  er can be a mask
1a4b0 20 6f 66 20 74 68 65 20 42 54 52 45 45 5f 2a 20   of the BTREE_* 
1a4c0 66 6c 61 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a  flags defined.**
1a4d0 20 69 6e 20 62 74 72 65 65 2e 68 2e 20 20 54 68   in btree.h.  Th
1a4e0 65 73 65 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f  ese flags contro
1a4f0 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74 68 65  l aspects of the
1a500 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a   operation of.**
1a510 20 74 68 65 20 62 74 72 65 65 2e 20 20 54 68 65   the btree.  The
1a520 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52   BTREE_OMIT_JOUR
1a530 4e 41 4c 20 61 6e 64 20 42 54 52 45 45 5f 53 49  NAL and BTREE_SI
1a540 4e 47 4c 45 20 66 6c 61 67 73 20 61 72 65 0a 2a  NGLE flags are.*
1a550 2a 20 61 64 64 65 64 20 61 75 74 6f 6d 61 74 69  * added automati
1a560 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  cally..*/./* Opc
1a570 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64  ode: OpenAutoind
1a580 65 78 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  ex P1 P2 * P4 *.
1a590 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f  ** Synopsis: nCo
1a5a0 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68  lumn=P2.**.** Th
1a5b0 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20  is opcode works 
1a5c0 74 68 65 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f  the same as OP_O
1a5d0 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20 49  penEphemeral.  I
1a5e0 74 20 68 61 73 20 61 0a 2a 2a 20 64 69 66 66 65  t has a.** diffe
1a5f0 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69 73  rent name to dis
1a600 74 69 6e 67 75 69 73 68 20 69 74 73 20 75 73 65  tinguish its use
1a610 2e 20 20 54 61 62 6c 65 73 20 63 72 65 61 74 65  .  Tables create
1a620 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68  d using.** by th
1a630 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62  is opcode will b
1a640 65 20 75 73 65 64 20 66 6f 72 20 61 75 74 6f 6d  e used for autom
1a650 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64  atically created
1a660 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e   transient.** in
1a670 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a  dices in joins..
1a680 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41  */.case OP_OpenA
1a690 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65 20  utoindex: .case 
1a6a0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
1a6b0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1a6c0 20 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f   *pCx;.  KeyInfo
1a6d0 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73   *pKeyInfo;..  s
1a6e0 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20  tatic const int 
1a6f0 76 66 73 46 6c 61 67 73 20 3d 20 0a 20 20 20 20  vfsFlags = .    
1a700 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45    SQLITE_OPEN_RE
1a710 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20  ADWRITE |.      
1a720 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41  SQLITE_OPEN_CREA
1a730 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  TE |.      SQLIT
1a740 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45  E_OPEN_EXCLUSIVE
1a750 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
1a760 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f  OPEN_DELETEONCLO
1a770 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  SE |.      SQLIT
1a780 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54  E_OPEN_TRANSIENT
1a790 5f 44 42 3b 0a 20 20 61 73 73 65 72 74 28 20 70  _DB;.  assert( p
1a7a0 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
1a7b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d  ssert( pOp->p2>=
1a7c0 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c  0 );.  pCx = all
1a7d0 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1a7e0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c  Op->p1, pOp->p2,
1a7f0 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70   -1, 1);.  if( p
1a800 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1a810 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c  mem;.  pCx->null
1a820 52 6f 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  Row = 1;.  rc = 
1a830 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e  sqlite3BtreeOpen
1a840 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62  (db->pVfs, 0, db
1a850 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20  , &pCx->pBt, .  
1a860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a870 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d 49 54        BTREE_OMIT
1a880 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45 45  _JOURNAL | BTREE
1a890 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70  _SINGLE | pOp->p
1a8a0 35 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a 20 20  5, vfsFlags);.  
1a8b0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1a8c0 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  K ){.    rc = sq
1a8d0 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54  lite3BtreeBeginT
1a8e0 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20 31  rans(pCx->pBt, 1
1a8f0 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d  );.  }.  if( rc=
1a900 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1a910 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69    /* If a transi
1a920 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65 71  ent index is req
1a930 75 69 72 65 64 2c 20 63 72 65 61 74 65 20 69 74  uired, create it
1a940 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20   by calling.    
1a950 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  ** sqlite3BtreeC
1a960 72 65 61 74 65 54 61 62 6c 65 28 29 20 77 69 74  reateTable() wit
1a970 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42  h the BTREE_BLOB
1a980 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a  KEY flag before.
1a990 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69      ** opening i
1a9a0 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e  t. If a transien
1a9b0 74 20 74 61 62 6c 65 20 69 73 20 72 65 71 75 69  t table is requi
1a9c0 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68  red, just use th
1a9d0 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74  e.    ** automat
1a9e0 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74  ically created t
1a9f0 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70  able with root-p
1aa00 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49  age 1 (an BLOB_I
1aa10 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20  NTKEY table)..  
1aa20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 4b    */.    if( (pK
1aa30 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
1aa40 2e 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b  .pKeyInfo)!=0 ){
1aa50 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b  .      int pgno;
1aa60 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1aa70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
1aa80 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20  EYINFO );.      
1aa90 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1aaa0 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 43 78  eCreateTable(pCx
1aab0 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54  ->pBt, &pgno, BT
1aac0 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f  REE_BLOBKEY | pO
1aad0 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 69  p->p5); .      i
1aae0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1aaf0 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
1ab00 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52  rt( pgno==MASTER
1ab10 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20  _ROOT+1 );.     
1ab20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49     assert( pKeyI
1ab30 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20  nfo->db==db );. 
1ab40 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1ab50 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e  KeyInfo->enc==EN
1ab60 43 28 64 62 29 20 29 3b 0a 20 20 20 20 20 20 20  C(db) );.       
1ab70 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d   pCx->pKeyInfo =
1ab80 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20   pKeyInfo;.     
1ab90 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1aba0 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e  treeCursor(pCx->
1abb0 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 70 4b  pBt, pgno, 1, pK
1abc0 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 70 43 75  eyInfo, pCx->pCu
1abd0 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20  rsor);.      }. 
1abe0 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c       pCx->isTabl
1abf0 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65  e = 0;.    }else
1ac00 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
1ac10 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1ac20 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52  pCx->pBt, MASTER
1ac30 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78  _ROOT, 1, 0, pCx
1ac40 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
1ac50 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1ac60 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   1;.    }.  }.  
1ac70 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d  pCx->isOrdered =
1ac80 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45   (pOp->p5!=BTREE
1ac90 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 62  _UNORDERED);.  b
1aca0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1acb0 64 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e 20 50  de: SorterOpen P
1acc0 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
1acd0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
1ace0 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e  rks like OP_Open
1acf0 45 70 68 65 6d 65 72 61 6c 20 65 78 63 65 70 74  Ephemeral except
1ad00 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a   that it opens.*
1ad10 2a 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  * a transient in
1ad20 64 65 78 20 74 68 61 74 20 69 73 20 73 70 65 63  dex that is spec
1ad30 69 66 69 63 61 6c 6c 79 20 64 65 73 69 67 6e 65  ifically designe
1ad40 64 20 74 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a  d to sort large.
1ad50 2a 2a 20 74 61 62 6c 65 73 20 75 73 69 6e 67 20  ** tables using 
1ad60 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65 72 67  an external merg
1ad70 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d  e-sort algorithm
1ad80 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
1ad90 74 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62  terOpen: {.  Vdb
1ada0 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20  eCursor *pCx;.. 
1adb0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1adc0 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >=0 );.  assert(
1add0 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20   pOp->p2>=0 );. 
1ade0 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
1adf0 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1ae00 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31  , pOp->p2, -1, 1
1ae10 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
1ae20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1ae30 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d   pCx->pKeyInfo =
1ae40 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
1ae50 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78  o;.  assert( pCx
1ae60 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d  ->pKeyInfo->db==
1ae70 64 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  db );.  assert( 
1ae80 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65  pCx->pKeyInfo->e
1ae90 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20  nc==ENC(db) );. 
1aea0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
1aeb0 65 53 6f 72 74 65 72 49 6e 69 74 28 64 62 2c 20  eSorterInit(db, 
1aec0 70 43 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  pCx);.  break;.}
1aed0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
1aee0 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20 50 33  nPseudo P1 P2 P3
1aef0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
1af00 3a 20 63 6f 6e 74 65 6e 74 20 69 6e 20 72 5b 50  : content in r[P
1af10 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  2@P3].**.** Open
1af20 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68   a new cursor th
1af30 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66  at points to a f
1af40 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  ake table that c
1af50 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65  ontains a single
1af60 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e  .** row of data.
1af70 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66    The content of
1af80 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73   that one row is
1af90 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
1afa0 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74  memory.** regist
1afb0 65 72 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72  er P2.  In other
1afc0 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50   words, cursor P
1afd0 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69  1 becomes an ali
1afe0 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d  as for the .** M
1aff0 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20  EM_Blob content 
1b000 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67  contained in reg
1b010 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
1b020 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  A pseudo-table c
1b030 72 65 61 74 65 64 20 62 79 20 74 68 69 73 20 6f  reated by this o
1b040 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f  pcode is used to
1b050 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a   hold a single.*
1b060 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f  * row output fro
1b070 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20  m the sorter so 
1b080 74 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e  that the row can
1b090 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69   be decomposed i
1b0a0 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61  nto.** individua
1b0b0 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20  l columns using 
1b0c0 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  the OP_Column op
1b0d0 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f  code.  The OP_Co
1b0e0 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  lumn opcode.** i
1b0f0 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f  s the only curso
1b100 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f  r opcode that wo
1b110 72 6b 73 20 77 69 74 68 20 61 20 70 73 65 75 64  rks with a pseud
1b120 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50  o-table..**.** P
1b130 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  3 is the number 
1b140 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
1b150 20 72 65 63 6f 72 64 73 20 74 68 61 74 20 77 69   records that wi
1b160 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a  ll be stored by.
1b170 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61  ** the pseudo-ta
1b180 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
1b190 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20  OpenPseudo: {.  
1b1a0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1b1b0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1b1c0 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1b1d0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29  rt( pOp->p3>=0 )
1b1e0 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
1b1f0 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1b200 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31  >p1, pOp->p3, -1
1b210 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  , 0);.  if( pCx=
1b220 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1b230 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77  ;.  pCx->nullRow
1b240 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65   = 1;.  pCx->pse
1b250 75 64 6f 54 61 62 6c 65 52 65 67 20 3d 20 70 4f  udoTableReg = pO
1b260 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73  p->p2;.  pCx->is
1b270 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 61 73 73  Table = 1;.  ass
1b280 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
1b290 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
1b2a0 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20  * Opcode: Close 
1b2b0 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
1b2c0 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20   Close a cursor 
1b2d0 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65  previously opene
1b2e0 64 20 61 73 20 50 31 2e 20 20 49 66 20 50 31 20  d as P1.  If P1 
1b2f0 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e  is not.** curren
1b300 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69  tly open, this i
1b310 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20  nstruction is a 
1b320 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f  no-op..*/.case O
1b330 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73  P_Close: {.  ass
1b340 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1b350 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1b360 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74  ursor );.  sqlit
1b370 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72  e3VdbeFreeCursor
1b380 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  (p, p->apCsr[pOp
1b390 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43  ->p1]);.  p->apC
1b3a0 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b  sr[pOp->p1] = 0;
1b3b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1b3c0 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 65 20 50  Opcode: SeekGe P
1b3d0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
1b3e0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
1b3f0 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
1b400 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1b410 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
1b420 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
1b430 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
1b440 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
1b450 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
1b460 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20  P3 as the key.  
1b470 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1b480 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1b490 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1b4a0 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1b4b0 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1b4c0 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1b4d0 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1b4e0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1b4f0 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1b500 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1b510 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
1b520 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c  ints to the smal
1b530 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  lest entry that 
1b540 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74  .** is greater t
1b550 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1b560 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
1b570 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
1b580 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74  ecords .** great
1b590 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
1b5a0 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20   to the key and 
1b5b0 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1b5c0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1b5d0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1b5e0 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1b5f0 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b  , Distinct, Seek
1b600 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b  Lt, SeekGt, Seek
1b610 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
1b620 20 53 65 65 6b 47 74 20 50 31 20 50 32 20 50 33   SeekGt P1 P2 P3
1b630 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
1b640 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1b650 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1b660 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1b670 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1b680 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1b690 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1b6a0 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1b6b0 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
1b6c0 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
1b6d0 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
1b6e0 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
1b6f0 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
1b700 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
1b710 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1b720 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
1b730 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
1b740 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
1b750 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
1b760 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
1b770 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1b780 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79  e smallest entry
1b790 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65   that .** is gre
1b7a0 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65  ater than the ke
1b7b0 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
1b7c0 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
1b7d0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a   greater than .*
1b7e0 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  * the key and P2
1b7f0 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1b800 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
1b810 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
1b820 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
1b830 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74  Distinct, SeekLt
1b840 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65  , SeekGe, SeekLe
1b850 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
1b860 65 65 6b 4c 74 20 50 31 20 50 32 20 50 33 20 50  eekLt P1 P2 P3 P
1b870 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 * .** Synopsis
1b880 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
1b890 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
1b8a0 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
1b8b0 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
1b8c0 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
1b8d0 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
1b8e0 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
1b8f0 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
1b900 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50  key. If cursor P
1b910 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
1b920 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
1b930 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
1b940 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
1b950 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
1b960 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
1b970 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
1b980 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
1b990 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
1b9a0 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20  sor P1 so that  
1b9b0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1b9c0 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74   largest entry t
1b9d0 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20  hat .** is less 
1b9e0 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  than the key val
1b9f0 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
1ba00 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73   no records less
1ba10 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65   than .** the ke
1ba20 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
1ba30 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
1ba40 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  to P2..**.** See
1ba50 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1ba60 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74  tFound, Distinct
1ba70 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65  , SeekGt, SeekGe
1ba80 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , SeekLe.*/./* O
1ba90 70 63 6f 64 65 3a 20 53 65 65 6b 4c 65 20 50 31  pcode: SeekLe P1
1baa0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1bab0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1bac0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
1bad0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1bae0 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1baf0 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1bb00 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1bb10 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1bb20 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1bb30 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
1bb40 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1bb50 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
1bb60 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
1bb70 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
1bb80 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
1bb90 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
1bba0 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
1bbb0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1bbc0 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
1bbd0 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
1bbe0 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
1bbf0 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  to the largest e
1bc00 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
1bc10 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
1bc20 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
1bc30 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1bc40 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a  re no records .*
1bc50 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  * less than or e
1bc60 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
1bc70 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1bc80 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1bc90 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61   P2..**.** See a
1bca0 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1bcb0 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20  ound, Distinct, 
1bcc0 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20  SeekGt, SeekGe, 
1bcd0 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f  SeekLt.*/.case O
1bce0 50 5f 53 65 65 6b 4c 74 3a 20 20 20 20 20 20 20  P_SeekLt:       
1bcf0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1bd00 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 65  /.case OP_SeekLe
1bd10 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
1bd20 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1bd30 50 5f 53 65 65 6b 47 65 3a 20 20 20 20 20 20 20  P_SeekGe:       
1bd40 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1bd50 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 74  /.case OP_SeekGt
1bd60 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  : {       /* jum
1bd70 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  p, in3 */.  int 
1bd80 72 65 73 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a 20  res;.  int oc;. 
1bd90 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1bda0 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
1bdb0 64 20 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c  d r;.  int nFiel
1bdc0 64 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20  d;.  i64 iKey;  
1bdd0 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64      /* The rowid
1bde0 20 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20   we are to seek 
1bdf0 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  to */..  assert(
1be00 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1be10 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1be20 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1be30 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70  Op->p2!=0 );.  p
1be40 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1be50 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1be60 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
1be70 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
1be80 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61  bleReg==0 );.  a
1be90 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 65  ssert( OP_SeekLe
1bea0 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 31 20   == OP_SeekLt+1 
1beb0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
1bec0 53 65 65 6b 47 65 20 3d 3d 20 4f 50 5f 53 65 65  SeekGe == OP_See
1bed0 6b 4c 74 2b 32 20 29 3b 0a 20 20 61 73 73 65 72  kLt+2 );.  asser
1bee0 74 28 20 4f 50 5f 53 65 65 6b 47 74 20 3d 3d 20  t( OP_SeekGt == 
1bef0 4f 50 5f 53 65 65 6b 4c 74 2b 33 20 29 3b 0a 20  OP_SeekLt+3 );. 
1bf00 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f   assert( pC->isO
1bf10 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65  rdered );.  asse
1bf20 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
1bf30 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f 70  =0 );.  oc = pOp
1bf40 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 70 43 2d 3e  ->opcode;.  pC->
1bf50 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 69  nullRow = 0;.  i
1bf60 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  f( pC->isTable )
1bf70 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70  {.    /* The inp
1bf80 75 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d  ut value in P3 m
1bf90 69 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74  ight be of any t
1bfa0 79 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65  ype: integer, re
1bfb0 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20  al, string,.    
1bfc0 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c  ** blob, or NULL
1bfd0 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64 73 20  .  But it needs 
1bfe0 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
1bff0 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64   before we can d
1c000 6f 0a 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65  o.    ** the see
1c010 6b 2c 20 73 6f 20 63 6f 76 65 72 74 20 69 74 2e  k, so covert it.
1c020 20 2a 2f 0a 20 20 20 20 70 49 6e 33 20 3d 20 26   */.    pIn3 = &
1c030 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
1c040 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
1c050 66 66 69 6e 69 74 79 28 70 49 6e 33 29 3b 0a 20  ffinity(pIn3);. 
1c060 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65     iKey = sqlite
1c070 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
1c080 6e 33 29 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77  n3);.    pC->row
1c090 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 0a  idIsValid = 0;..
1c0a0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33      /* If the P3
1c0b0 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74   value could not
1c0c0 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
1c0d0 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69  to an integer wi
1c0e0 74 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73  thout.    ** los
1c0f0 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  s of information
1c100 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70  , then special p
1c110 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65 71  rocessing is req
1c120 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20  uired... */.    
1c130 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
1c140 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
1c150 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e  {.      if( (pIn
1c160 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  3->flags & MEM_R
1c170 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  eal)==0 ){.     
1c180 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20     /* If the P3 
1c190 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20  value cannot be 
1c1a0 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
1c1b0 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d  ny kind of a num
1c1c0 62 65 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20  ber,.        ** 
1c1d0 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73  then the seek is
1c1e0 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73   not possible, s
1c1f0 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a  o jump to P2 */.
1c200 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70          pc = pOp
1c210 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
1c220 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
1c230 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ..      /* If th
1c240 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  e approximation 
1c250 69 4b 65 79 20 69 73 20 6c 61 72 67 65 72 20 74  iKey is larger t
1c260 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72  han the actual r
1c270 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20  eal search.     
1c280 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69   ** term, substi
1c290 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e 20 61 6e  tute >= for > an
1c2a0 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e  d < for <=. e.g.
1c2b0 20 69 66 20 74 68 65 20 73 65 61 72 63 68 20 74   if the search t
1c2c0 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20 69 73 20  erm.      ** is 
1c2d0 34 2e 39 20 61 6e 64 20 74 68 65 20 69 6e 74 65  4.9 and the inte
1c2e0 67 65 72 20 61 70 70 72 6f 78 69 6d 61 74 69 6f  ger approximatio
1c2f0 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a 0a 20 20  n 5:.      **.  
1c300 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78      **        (x
1c310 20 3e 20 20 34 2e 39 29 20 20 20 20 2d 3e 20 20   >  4.9)    ->  
1c320 20 20 20 28 78 20 3e 3d 20 35 29 0a 20 20 20 20     (x >= 5).    
1c330 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3c    **        (x <
1c340 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20  = 4.9)    ->    
1c350 20 28 78 20 3c 20 20 35 29 0a 20 20 20 20 20 20   (x <  5).      
1c360 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 49 6e  */.      if( pIn
1c370 33 2d 3e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65  3->r<(double)iKe
1c380 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  y ){.        ass
1c390 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 65 3d 3d  ert( OP_SeekGe==
1c3a0 28 4f 50 5f 53 65 65 6b 47 74 2d 31 29 20 29 3b  (OP_SeekGt-1) );
1c3b0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1c3c0 20 4f 50 5f 53 65 65 6b 4c 74 3d 3d 28 4f 50 5f   OP_SeekLt==(OP_
1c3d0 53 65 65 6b 4c 65 2d 31 29 20 29 3b 0a 20 20 20  SeekLe-1) );.   
1c3e0 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f 50       assert( (OP
1c3f0 5f 53 65 65 6b 4c 65 20 26 20 30 78 30 30 30 31  _SeekLe & 0x0001
1c400 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 74 20 26 20  )==(OP_SeekGt & 
1c410 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20  0x0001) );.     
1c420 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78 30     if( (oc & 0x0
1c430 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 74  001)==(OP_SeekGt
1c440 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63 2d   & 0x0001) ) oc-
1c450 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  -;.      }..    
1c460 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72    /* If the appr
1c470 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69  oximation iKey i
1c480 73 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 74  s smaller than t
1c490 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73  he actual real s
1c4a0 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74  earch.      ** t
1c4b0 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20  erm, substitute 
1c4c0 3c 3d 20 66 6f 72 20 3c 20 61 6e 64 20 3e 20 66  <= for < and > f
1c4d0 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20 20 20  or >=.  */.     
1c4e0 20 65 6c 73 65 20 69 66 28 20 70 49 6e 33 2d 3e   else if( pIn3->
1c4f0 72 3e 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29  r>(double)iKey )
1c500 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
1c510 28 20 4f 50 5f 53 65 65 6b 4c 65 3d 3d 28 4f 50  ( OP_SeekLe==(OP
1c520 5f 53 65 65 6b 4c 74 2b 31 29 20 29 3b 0a 20 20  _SeekLt+1) );.  
1c530 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
1c540 5f 53 65 65 6b 47 74 3d 3d 28 4f 50 5f 53 65 65  _SeekGt==(OP_See
1c550 6b 47 65 2b 31 29 20 29 3b 0a 20 20 20 20 20 20  kGe+1) );.      
1c560 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65    assert( (OP_Se
1c570 65 6b 4c 74 20 26 20 30 78 30 30 30 31 29 3d 3d  ekLt & 0x0001)==
1c580 28 4f 50 5f 53 65 65 6b 47 65 20 26 20 30 78 30  (OP_SeekGe & 0x0
1c590 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  001) );.        
1c5a0 69 66 28 20 28 6f 63 20 26 20 30 78 30 30 30 31  if( (oc & 0x0001
1c5b0 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c 74 20 26 20  )==(OP_SeekLt & 
1c5c0 30 78 30 30 30 31 29 20 29 20 6f 63 2b 2b 3b 0a  0x0001) ) oc++;.
1c5d0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 0a 20        }.    } . 
1c5e0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1c5f0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1c600 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
1c610 30 2c 20 28 75 36 34 29 69 4b 65 79 2c 20 30 2c  0, (u64)iKey, 0,
1c620 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20   &res);.    if( 
1c630 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
1c640 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
1c650 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1c660 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 65      }.    if( re
1c670 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 43  s==0 ){.      pC
1c680 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1c690 20 31 3b 0a 20 20 20 20 20 20 70 43 2d 3e 6c 61   1;.      pC->la
1c6a0 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a  stRowid = iKey;.
1c6b0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
1c6c0 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d     nField = pOp-
1c6d0 3e 70 34 2e 69 3b 0a 20 20 20 20 61 73 73 65 72  >p4.i;.    asser
1c6e0 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
1c6f0 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20  P4_INT32 );.    
1c700 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30  assert( nField>0
1c710 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e   );.    r.pKeyIn
1c720 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
1c730 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
1c740 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a  = (u16)nField;..
1c750 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20      /* The next 
1c760 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d  line of code com
1c770 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73  putes as follows
1c780 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20  , only faster:. 
1c790 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63 3d 3d     **   if( oc==
1c7a0 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20 6f 63 3d  OP_SeekGt || oc=
1c7b0 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 0a 20 20  =OP_SeekLe ){.  
1c7c0 20 20 2a 2a 20 20 20 20 20 72 2e 66 6c 61 67 73    **     r.flags
1c7d0 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52   = UNPACKED_INCR
1c7e0 4b 45 59 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65  KEY;.    **   }e
1c7f0 6c 73 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20  lse{.    **     
1c800 72 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20  r.flags = 0;.   
1c810 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20   **   }.    */. 
1c820 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 28 75 38     r.flags = (u8
1c830 29 28 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b  )(UNPACKED_INCRK
1c840 45 59 20 2a 20 28 31 20 26 20 28 6f 63 20 2d 20  EY * (1 & (oc - 
1c850 4f 50 5f 53 65 65 6b 4c 74 29 29 29 3b 0a 20 20  OP_SeekLt)));.  
1c860 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
1c870 5f 53 65 65 6b 47 74 20 7c 7c 20 72 2e 66 6c 61  _SeekGt || r.fla
1c880 67 73 3d 3d 55 4e 50 41 43 4b 45 44 5f 49 4e 43  gs==UNPACKED_INC
1c890 52 4b 45 59 20 29 3b 0a 20 20 20 20 61 73 73 65  RKEY );.    asse
1c8a0 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c  rt( oc!=OP_SeekL
1c8b0 65 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 55 4e  e || r.flags==UN
1c8c0 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 29  PACKED_INCRKEY )
1c8d0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63  ;.    assert( oc
1c8e0 21 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 72  !=OP_SeekGe || r
1c8f0 2e 66 6c 61 67 73 3d 3d 30 20 29 3b 0a 20 20 20  .flags==0 );.   
1c900 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
1c910 53 65 65 6b 4c 74 20 7c 7c 20 72 2e 66 6c 61 67  SeekLt || r.flag
1c920 73 3d 3d 30 20 29 3b 0a 0a 20 20 20 20 72 2e 61  s==0 );..    r.a
1c930 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
1c940 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c  >p3];.#ifdef SQL
1c950 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20  ITE_DEBUG.    { 
1c960 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
1c970 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
1c980 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1c990 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
1c9a0 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20  ); }.#endif.    
1c9b0 45 78 70 61 6e 64 42 6c 6f 62 28 72 2e 61 4d 65  ExpandBlob(r.aMe
1c9c0 6d 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  m);.    rc = sql
1c9d0 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1c9e0 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
1c9f0 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  sor, &r, 0, 0, &
1ca00 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63  res);.    if( rc
1ca10 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1ca20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1ca30 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1ca40 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69    }.    pC->rowi
1ca50 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
1ca60 7d 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  }.  pC->deferred
1ca70 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
1ca80 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1ca90 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66  CACHE_STALE;.#if
1caa0 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
1cab0 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
1cac0 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
1cad0 0a 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65  .  if( oc>=OP_Se
1cae0 65 6b 47 65 20 29 7b 20 20 61 73 73 65 72 74 28  ekGe ){  assert(
1caf0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c   oc==OP_SeekGe |
1cb00 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20  | oc==OP_SeekGt 
1cb10 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3c 30  );.    if( res<0
1cb20 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f   || (res==0 && o
1cb30 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 29 20 29 7b  c==OP_SeekGt) ){
1cb40 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a  .      res = 0;.
1cb50 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1cb60 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e  e3BtreeNext(pC->
1cb70 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
1cb80 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1cb90 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
1cba0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1cbb0 72 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77  r;.      pC->row
1cbc0 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1cbd0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1cbe0 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  res = 0;.    }. 
1cbf0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
1cc00 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c  rt( oc==OP_SeekL
1cc10 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  t || oc==OP_Seek
1cc20 4c 65 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65  Le );.    if( re
1cc30 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26  s>0 || (res==0 &
1cc40 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 29  & oc==OP_SeekLt)
1cc50 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20   ){.      res = 
1cc60 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  0;.      rc = sq
1cc70 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
1cc80 75 73 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  us(pC->pCursor, 
1cc90 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28  &res);.      if(
1cca0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1ccb0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1ccc0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1ccd0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1cce0 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 0;.    }else{
1ccf0 0a 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69  .      /* res mi
1cd00 67 68 74 20 62 65 20 6e 65 67 61 74 69 76 65 20  ght be negative 
1cd10 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c  because the tabl
1cd20 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65  e is empty.  Che
1cd30 63 6b 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 73  ck to.      ** s
1cd40 65 65 20 69 66 20 74 68 69 73 20 69 73 20 74 68  ee if this is th
1cd50 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f  e case..      */
1cd60 0a 20 20 20 20 20 20 72 65 73 20 3d 20 73 71 6c  .      res = sql
1cd70 69 74 65 33 42 74 72 65 65 45 6f 66 28 70 43 2d  ite3BtreeEof(pC-
1cd80 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d  >pCursor);.    }
1cd90 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
1cda0 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 69 66  Op->p2>0 );.  if
1cdb0 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20  ( res ){.    pc 
1cdc0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1cdd0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1cde0 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20 50  * Opcode: Seek P
1cdf0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
1ce00 6e 6f 70 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d  nopsis:  intkey=
1ce10 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69  r[P2].**.** P1 i
1ce20 73 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c 65 20  s an open table 
1ce30 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73  cursor and P2 is
1ce40 20 61 20 72 6f 77 69 64 20 69 6e 74 65 67 65 72   a rowid integer
1ce50 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20 66 6f  .  Arrange.** fo
1ce60 72 20 50 31 20 74 6f 20 6d 6f 76 65 20 73 6f 20  r P1 to move so 
1ce70 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
1ce80 6f 20 74 68 65 20 72 6f 77 69 64 20 67 69 76 65  o the rowid give
1ce90 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  n by P2..**.** T
1cea0 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c 79 20  his is actually 
1ceb0 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 2e  a deferred seek.
1cec0 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61 6c    Nothing actual
1ced0 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69 6c  ly happens until
1cee0 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 69  .** the cursor i
1cef0 73 20 75 73 65 64 20 74 6f 20 72 65 61 64 20 61  s used to read a
1cf00 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20 77   record.  That w
1cf10 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73 0a  ay, if no reads.
1cf20 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e  ** occur, no unn
1cf30 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61 70  ecessary I/O hap
1cf40 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  pens..*/.case OP
1cf50 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a 20 69  _Seek: {    /* i
1cf60 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  n2 */.  VdbeCurs
1cf70 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72  or *pC;..  asser
1cf80 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1cf90 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1cfa0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
1cfb0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1cfc0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1cfd0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1cfe0 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  ->pCursor!=0 );.
1cff0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1d000 54 61 62 6c 65 20 29 3b 0a 20 20 70 43 2d 3e 6e  Table );.  pC->n
1d010 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 49  ullRow = 0;.  pI
1d020 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
1d030 70 32 5d 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74  p2];.  pC->movet
1d040 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65  oTarget = sqlite
1d050 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
1d060 6e 32 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64  n2);.  pC->rowid
1d070 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70  IsValid = 0;.  p
1d080 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1d090 6f 20 3d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  o = 1;.  break;.
1d0a0 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  }.  ../* Opcode:
1d0b0 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20   Found P1 P2 P3 
1d0c0 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
1d0d0 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
1d0e0 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68  *.** If P4==0 th
1d0f0 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68  en register P3 h
1d100 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73  olds a blob cons
1d110 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52  tructed by MakeR
1d120 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34  ecord.  If.** P4
1d130 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  >0 then register
1d140 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1d150 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1d160 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e   that form an un
1d170 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64  packed.** record
1d180 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50  ..**.** Cursor P
1d190 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78  1 is on an index
1d1a0 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20   btree.  If the 
1d1b0 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65  record identifie
1d1c0 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a  d by P3 and P4.*
1d1d0 2a 20 69 73 20 61 20 70 72 65 66 69 78 20 6f 66  * is a prefix of
1d1e0 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31   any entry in P1
1d1f0 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20   then a jump is 
1d200 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a  made to P2 and.*
1d210 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69  * P1 is left poi
1d220 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74  nting at the mat
1d230 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a  ching entry..**.
1d240 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74  ** See also: Not
1d250 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63  Found, NoConflic
1d260 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e 20 53 65  t, NotExists. Se
1d270 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekGe.*/./* Opcod
1d280 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50  e: NotFound P1 P
1d290 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
1d2a0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
1d2b0 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d  P4].**.** If P4=
1d2c0 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  =0 then register
1d2d0 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62   P3 holds a blob
1d2e0 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
1d2f0 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a  MakeRecord.  If.
1d300 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67  ** P4>0 then reg
1d310 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20  ister P3 is the 
1d320 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69  first of P4 regi
1d330 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20  sters that form 
1d340 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72  an unpacked.** r
1d350 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75  ecord..** .** Cu
1d360 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
1d370 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
1d380 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
1d390 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
1d3a0 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74  d P4.** is not t
1d3b0 68 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79  he prefix of any
1d3c0 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65   entry in P1 the
1d3d0 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  n a jump is made
1d3e0 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a   to P2.  If P1 .
1d3f0 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20  ** does contain 
1d400 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70  an entry whose p
1d410 72 65 66 69 78 20 6d 61 74 63 68 65 73 20 74 68  refix matches th
1d420 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74  e P3/P4 record t
1d430 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66  hen control.** f
1d440 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20  alls through to 
1d450 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
1d460 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c  tion and P1 is l
1d470 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
1d480 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20  the.** matching 
1d490 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  entry..**.** See
1d4a0 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1d4b0 74 45 78 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c  tExists, NoConfl
1d4c0 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ict.*/./* Opcode
1d4d0 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50 31 20  : NoConflict P1 
1d4e0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
1d4f0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1d500 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  @P4].**.** If P4
1d510 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
1d520 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
1d530 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
1d540 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
1d550 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
1d560 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
1d570 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
1d580 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
1d590 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
1d5a0 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43  record..** .** C
1d5b0 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
1d5c0 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
1d5d0 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
1d5e0 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
1d5f0 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e  nd P4.** contain
1d600 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65  s any NULL value
1d610 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  , jump immediate
1d620 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 61 6c  ly to P2.  If al
1d630 6c 20 74 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a  l terms of the.*
1d640 2a 20 72 65 63 6f 72 64 20 61 72 65 20 6e 6f 74  * record are not
1d650 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63 68 65  -NULL then a che
1d660 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20 64 65  ck is done to de
1d670 74 65 72 6d 69 6e 65 20 69 66 20 61 6e 79 20 72  termine if any r
1d680 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20  ow in the.** P1 
1d690 69 6e 64 65 78 20 62 74 72 65 65 20 68 61 73 20  index btree has 
1d6a0 61 20 6d 61 74 63 68 69 6e 67 20 6b 65 79 20 70  a matching key p
1d6b0 72 65 66 69 78 2e 20 20 49 66 20 74 68 65 72 65  refix.  If there
1d6c0 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c   are no matches,
1d6d0 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61   jump.** immedia
1d6e0 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20  tely to P2.  If 
1d6f0 74 68 65 72 65 20 69 73 20 61 20 6d 61 74 63 68  there is a match
1d700 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 61  , fall through a
1d710 6e 64 20 6c 65 61 76 65 20 74 68 65 20 50 31 0a  nd leave the P1.
1d720 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  ** cursor pointi
1d730 6e 67 20 74 6f 20 74 68 65 20 6d 61 74 63 68 69  ng to the matchi
1d740 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68  ng row..**.** Th
1d750 69 73 20 6f 70 63 6f 64 65 20 69 73 20 73 69 6d  is opcode is sim
1d760 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f  ilar to OP_NotFo
1d770 75 6e 64 20 77 69 74 68 20 74 68 65 20 65 78 63  und with the exc
1d780 65 70 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65  eptions that the
1d790 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73 20 61 6c  .** branch is al
1d7a0 77 61 79 73 20 74 61 6b 65 6e 20 69 66 20 61 6e  ways taken if an
1d7b0 79 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 65  y part of the se
1d7c0 61 72 63 68 20 6b 65 79 20 69 6e 70 75 74 20 69  arch key input i
1d7d0 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 53 65  s NULL..**.** Se
1d7e0 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64  e also: NotFound
1d7f0 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73  , Found, NotExis
1d800 74 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  ts.*/.case OP_No
1d810 43 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a  Conflict:     /*
1d820 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
1d830 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20  se OP_NotFound: 
1d840 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1d850 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f  n3 */.case OP_Fo
1d860 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  und: {        /*
1d870 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
1d880 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73 74  int alreadyExist
1d890 73 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20 56  s;.  int ii;.  V
1d8a0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1d8b0 20 69 6e 74 20 72 65 73 3b 0a 20 20 63 68 61 72   int res;.  char
1d8c0 20 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70 61 63   *pFree;.  Unpac
1d8d0 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64 78 4b  kedRecord *pIdxK
1d8e0 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  ey;.  UnpackedRe
1d8f0 63 6f 72 64 20 72 3b 0a 20 20 63 68 61 72 20 61  cord r;.  char a
1d900 54 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28 73  TempRec[ROUND8(s
1d910 69 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64 52 65  izeof(UnpackedRe
1d920 63 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f 66 28  cord)) + sizeof(
1d930 4d 65 6d 29 2a 34 20 2b 20 37 5d 3b 0a 0a 23 69  Mem)*4 + 7];..#i
1d940 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
1d950 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
1d960 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  de!=OP_NoConflic
1d970 74 20 29 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e  t ) sqlite3_foun
1d980 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69  d_count++;.#endi
1d990 66 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  f..  assert( pOp
1d9a0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1d9b0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1d9c0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1d9d0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1d9e0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1d9f0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1da00 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1da10 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
1da20 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
1da30 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
1da40 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1da50 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
1da60 3b 0a 20 20 70 46 72 65 65 20 3d 20 30 3b 20 20  ;.  pFree = 0;  
1da70 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
1da80 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 75 70  Only used to sup
1da90 70 72 65 73 73 20 61 20 63 6f 6d 70 69 6c 65 72  press a compiler
1daa0 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 69   warning. */.  i
1dab0 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29  f( pOp->p4.i>0 )
1dac0 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f  {.    r.pKeyInfo
1dad0 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
1dae0 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  .    r.nField = 
1daf0 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a  (u16)pOp->p4.i;.
1db00 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e      r.aMem = pIn
1db10 33 3b 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b  3;.    for(ii=0;
1db20 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69   ii<r.nField; ii
1db30 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  ++){.      asser
1db40 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
1db50 2e 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20 20  .aMem[ii]) );.  
1db60 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 26      ExpandBlob(&
1db70 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 69 66  r.aMem[ii]);.#if
1db80 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
1db90 0a 20 20 20 20 20 20 69 66 28 20 69 69 20 29 20  .      if( ii ) 
1dba0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
1dbb0 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61 4d  Op->p3+ii, &r.aM
1dbc0 65 6d 5b 69 69 5d 29 3b 0a 23 65 6e 64 69 66 0a  em[ii]);.#endif.
1dbd0 20 20 20 20 7d 0a 20 20 20 20 72 2e 66 6c 61 67      }.    r.flag
1dbe0 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45  s = UNPACKED_PRE
1dbf0 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 70  FIX_MATCH;.    p
1dc00 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20 7d  IdxKey = &r;.  }
1dc10 65 6c 73 65 7b 0a 20 20 20 20 70 49 64 78 4b 65  else{.    pIdxKe
1dc20 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  y = sqlite3VdbeA
1dc30 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63 6f  llocUnpackedReco
1dc40 72 64 28 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  rd(.        pC->
1dc50 70 4b 65 79 49 6e 66 6f 2c 20 61 54 65 6d 70 52  pKeyInfo, aTempR
1dc60 65 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70  ec, sizeof(aTemp
1dc70 52 65 63 29 2c 20 26 70 46 72 65 65 0a 20 20 20  Rec), &pFree.   
1dc80 20 29 3b 20 0a 20 20 20 20 69 66 28 20 70 49 64   ); .    if( pId
1dc90 78 4b 65 79 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  xKey==0 ) goto n
1dca0 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65 72  o_mem;.    asser
1dcb0 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  t( pIn3->flags &
1dcc0 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20   MEM_Blob );.   
1dcd0 20 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e   assert( (pIn3->
1dce0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
1dcf0 29 3d 3d 30 20 29 3b 20 20 2f 2a 20 7a 65 72 6f  )==0 );  /* zero
1dd00 62 6c 6f 62 73 20 61 6c 72 65 61 64 79 20 65 78  blobs already ex
1dd10 70 61 6e 64 65 64 20 2a 2f 0a 20 20 20 20 73 71  panded */.    sq
1dd20 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72 64 55  lite3VdbeRecordU
1dd30 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e  npack(pC->pKeyIn
1dd40 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e  fo, pIn3->n, pIn
1dd50 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29 3b 0a  3->z, pIdxKey);.
1dd60 20 20 20 20 70 49 64 78 4b 65 79 2d 3e 66 6c 61      pIdxKey->fla
1dd70 67 73 20 7c 3d 20 55 4e 50 41 43 4b 45 44 5f 50  gs |= UNPACKED_P
1dd80 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 7d  REFIX_MATCH;.  }
1dd90 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
1dda0 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  de==OP_NoConflic
1ddb0 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20  t ){.    /* For 
1ddc0 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  the OP_NoConflic
1ddd0 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65 20 74  t opcode, take t
1dde0 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 79 20 6f  he jump if any o
1ddf0 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 69 6e 70  f the.    ** inp
1de00 75 74 20 66 69 65 6c 64 73 20 61 72 65 20 4e 55  ut fields are NU
1de10 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20 6b 65  LL, since any ke
1de20 79 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 77 69  y with a NULL wi
1de30 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20 63 6f  ll not.    ** co
1de40 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20 66 6f  nflict */.    fo
1de50 72 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e 46 69  r(ii=0; ii<r.nFi
1de60 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  eld; ii++){.    
1de70 20 20 69 66 28 20 72 2e 61 4d 65 6d 5b 69 69 5d    if( r.aMem[ii]
1de80 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  .flags & MEM_Nul
1de90 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 70 63 20  l ){.        pc 
1dea0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1deb0 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1dec0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
1ded0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1dee0 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
1def0 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70  d(pC->pCursor, p
1df00 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72  IdxKey, 0, 0, &r
1df10 65 73 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  es);.  if( pOp->
1df20 70 34 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 73  p4.i==0 ){.    s
1df30 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
1df40 20 70 46 72 65 65 29 3b 0a 20 20 7d 0a 20 20 69   pFree);.  }.  i
1df50 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1df60 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20   ){.    break;. 
1df70 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73   }.  pC->seekRes
1df80 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61 6c 72  ult = res;.  alr
1df90 65 61 64 79 45 78 69 73 74 73 20 3d 20 28 72 65  eadyExists = (re
1dfa0 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c  s==0);.  pC->nul
1dfb0 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61 64 79  lRow = 1-already
1dfc0 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e 64 65  Exists;.  pC->de
1dfd0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
1dfe0 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
1dff0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1e000 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  E;.  if( pOp->op
1e010 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29  code==OP_Found )
1e020 7b 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61 64  {.    if( alread
1e030 79 45 78 69 73 74 73 20 29 20 70 63 20 3d 20 70  yExists ) pc = p
1e040 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65  Op->p2 - 1;.  }e
1e050 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 21 61 6c  lse{.    if( !al
1e060 72 65 61 64 79 45 78 69 73 74 73 20 29 20 70 63  readyExists ) pc
1e070 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1e080 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1e090 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78  /* Opcode: NotEx
1e0a0 69 73 74 73 20 50 31 20 50 32 20 50 33 20 2a 20  ists P1 P2 P3 * 
1e0b0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
1e0c0 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a  ntkey=r[P3].**.*
1e0d0 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65  * P1 is the inde
1e0e0 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70  x of a cursor op
1e0f0 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62  en on an SQL tab
1e100 6c 65 20 62 74 72 65 65 20 28 77 69 74 68 20 69  le btree (with i
1e110 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e  nteger.** keys).
1e120 20 20 50 33 20 69 73 20 61 6e 20 69 6e 74 65 67    P3 is an integ
1e130 65 72 20 72 6f 77 69 64 2e 20 20 49 66 20 50 31  er rowid.  If P1
1e140 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69   does not contai
1e150 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 0a  n a record with.
1e160 2a 2a 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e  ** rowid P3 then
1e170 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
1e180 79 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20  y to P2.  If P1 
1e190 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 20 72  does contain a r
1e1a0 65 63 6f 72 64 0a 2a 2a 20 77 69 74 68 20 72 6f  ecord.** with ro
1e1b0 77 69 64 20 50 33 20 74 68 65 6e 20 6c 65 61 76  wid P3 then leav
1e1c0 65 20 74 68 65 20 63 75 72 73 6f 72 20 70 6f 69  e the cursor poi
1e1d0 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20 72 65  nting at that re
1e1e0 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 0a 2a 2a  cord and fall.**
1e1f0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
1e200 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
1e210 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e  ..**.** The OP_N
1e220 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70  otFound opcode p
1e230 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65  erforms the same
1e240 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e   operation on in
1e250 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77  dex btrees.** (w
1e260 69 74 68 20 61 72 62 69 74 72 61 72 79 20 6d 75  ith arbitrary mu
1e270 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e  lti-value keys).
1e280 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1e290 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1e2a0 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a  , NoConflict.*/.
1e2b0 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74  case OP_NotExist
1e2c0 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  s: {        /* j
1e2d0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64  ump, in3 */.  Vd
1e2e0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1e2f0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
1e300 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36  .  int res;.  u6
1e310 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20  4 iKey;..  pIn3 
1e320 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
1e330 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33  ;.  assert( pIn3
1e340 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
1e350 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
1e360 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1e370 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1e380 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1e390 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1e3a0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1e3b0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1e3c0 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72  Table );.  asser
1e3d0 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
1e3e0 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 70 43  leReg==0 );.  pC
1e3f0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
1e400 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  r;.  assert( pCr
1e410 73 72 21 3d 30 20 29 3b 0a 20 20 72 65 73 20 3d  sr!=0 );.  res =
1e420 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20 70 49 6e   0;.  iKey = pIn
1e430 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20 3d 20 73  3->u.i;.  rc = s
1e440 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1e450 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c  oUnpacked(pCrsr,
1e460 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72 65   0, iKey, 0, &re
1e470 73 29 3b 0a 20 20 70 43 2d 3e 6c 61 73 74 52 6f  s);.  pC->lastRo
1e480 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b  wid = pIn3->u.i;
1e490 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  .  pC->rowidIsVa
1e4a0 6c 69 64 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a  lid = res==0 ?1:
1e4b0 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  0;.  pC->nullRow
1e4c0 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
1e4d0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1e4e0 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66  STALE;.  pC->def
1e4f0 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1e500 0a 20 20 69 66 28 20 72 65 73 21 3d 30 20 29 7b  .  if( res!=0 ){
1e510 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
1e520 32 20 2d 20 31 3b 0a 20 20 20 20 61 73 73 65 72  2 - 1;.    asser
1e530 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  t( pC->rowidIsVa
1e540 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 7d 0a 20 20  lid==0 );.  }.  
1e550 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
1e560 20 72 65 73 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   res;.  break;.}
1e570 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71  ../* Opcode: Seq
1e580 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20  uence P1 P2 * * 
1e590 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
1e5a0 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a  [P2]=rowid.**.**
1e5b0 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61   Find the next a
1e5c0 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63  vailable sequenc
1e5d0 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72  e number for cur
1e5e0 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65  sor P1..** Write
1e5f0 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75   the sequence nu
1e600 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74  mber into regist
1e610 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65  er P2..** The se
1e620 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e  quence number on
1e630 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 69   the cursor is i
1e640 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72  ncremented after
1e650 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63   this.** instruc
1e660 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20  tion.  .*/.case 
1e670 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20  OP_Sequence: {  
1e680 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
1e690 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
1e6a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1e6b0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1e6c0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
1e6d0 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
1e6e0 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20  pOp->p1]!=0 );. 
1e6f0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e   pOut->u.i = p->
1e700 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
1e710 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72  seqCount++;.  br
1e720 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
1e730 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20  de: NewRowid P1 
1e740 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
1e750 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
1e760 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e  id.**.** Get a n
1e770 65 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72  ew integer recor
1e780 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20  d number (a.k.a 
1e790 22 72 6f 77 69 64 22 29 20 75 73 65 64 20 61 73  "rowid") used as
1e7a0 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61   the key to a ta
1e7b0 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f  ble..** The reco
1e7c0 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74  rd number is not
1e7d0 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64   previously used
1e7e0 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65   as a key in the
1e7f0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62   database.** tab
1e800 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72 20 50  le that cursor P
1e810 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68  1 points to.  Th
1e820 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  e new record num
1e830 62 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a  ber is written.*
1e840 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67  * written to reg
1e850 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
1e860 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20  If P3>0 then P3 
1e870 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e  is a register in
1e880 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20   the root frame 
1e890 6f 66 20 74 68 69 73 20 56 44 42 45 20 74 68 61  of this VDBE tha
1e8a0 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20  t holds .** the 
1e8b0 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f 75 73  largest previous
1e8c0 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72 65 63  ly generated rec
1e8d0 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e  ord number. No n
1e8e0 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ew record number
1e8f0 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64  s are.** allowed
1e900 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e   to be less than
1e910 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65   this value. Whe
1e920 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72 65 61  n this value rea
1e930 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d  ches its maximum
1e940 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f  , .** an SQLITE_
1e950 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65  FULL error is ge
1e960 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50 33 20  nerated. The P3 
1e970 72 65 67 69 73 74 65 72 20 69 73 20 75 70 64 61  register is upda
1e980 74 65 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a  ted with the '.*
1e990 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f  * generated reco
1e9a0 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20  rd number. This 
1e9b0 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20  P3 mechanism is 
1e9c0 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70  used to help imp
1e9d0 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55  lement the.** AU
1e9e0 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74  TOINCREMENT feat
1e9f0 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ure..*/.case OP_
1ea00 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20  NewRowid: {     
1ea10 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
1ea20 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36  erelease */.  i6
1ea30 34 20 76 3b 20 20 20 20 20 20 20 20 20 20 20 20  4 v;            
1ea40 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20       /* The new 
1ea50 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43  rowid */.  VdbeC
1ea60 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20  ursor *pC;      
1ea70 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74    /* Cursor of t
1ea80 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20  able to get the 
1ea90 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69  new rowid */.  i
1eaa0 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20  nt res;         
1eab0 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
1eac0 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72  of an sqlite3Btr
1ead0 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e  eeLast() */.  in
1eae0 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20  t cnt;          
1eaf0 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20       /* Counter 
1eb00 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d  to limit the num
1eb10 62 65 72 20 6f 66 20 73 65 61 72 63 68 65 73 20  ber of searches 
1eb20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20  */.  Mem *pMem; 
1eb30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
1eb40 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1eb50 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f  largest rowid fo
1eb60 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  r AUTOINCREMENT 
1eb70 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
1eb80 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52  pFrame;     /* R
1eb90 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42  oot frame of VDB
1eba0 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20  E */..  v = 0;. 
1ebb0 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65   res = 0;.  asse
1ebc0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1ebd0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1ebe0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1ebf0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1ec00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1ec10 30 20 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  0 );.  if( NEVER
1ec20 28 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 29  (pC->pCursor==0)
1ec30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 7a   ){.    /* The z
1ec40 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ero initializati
1ec50 6f 6e 20 61 62 6f 76 65 20 69 73 20 61 6c 6c 20  on above is all 
1ec60 74 68 61 74 20 69 73 20 6e 65 65 64 65 64 20 2a  that is needed *
1ec70 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  /.  }else{.    /
1ec80 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64  * The next rowid
1ec90 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65   or record numbe
1eca0 72 20 28 64 69 66 66 65 72 65 6e 74 20 74 65 72  r (different ter
1ecb0 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a  ms for the same.
1ecc0 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73      ** thing) is
1ecd0 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74   obtained in a t
1ece0 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68  wo-step algorith
1ecf0 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  m..    **.    **
1ed00 20 46 69 72 73 74 20 77 65 20 61 74 74 65 6d 70   First we attemp
1ed10 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61  t to find the la
1ed20 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72  rgest existing r
1ed30 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65  owid and add one
1ed40 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e  .    ** to that.
1ed50 20 20 42 75 74 20 69 66 20 74 68 65 20 6c 61 72    But if the lar
1ed60 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f  gest existing ro
1ed70 77 69 64 20 69 73 20 61 6c 72 65 61 64 79 20 74  wid is already t
1ed80 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a  he maximum.    *
1ed90 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67  * positive integ
1eda0 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66  er, we have to f
1edb0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
1edc0 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a  he second.    **
1edd0 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61   probabilistic a
1ede0 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a  lgorithm.    **.
1edf0 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e      ** The secon
1ee00 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74  d algorithm is t
1ee10 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64  o select a rowid
1ee20 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73   at random and s
1ee30 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20  ee if.    ** it 
1ee40 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 20 69  already exists i
1ee50 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66  n the table.  If
1ee60 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
1ee70 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20  st, we have.    
1ee80 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20 49  ** succeeded.  I
1ee90 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77  f the random row
1eea0 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77  id does exist, w
1eeb0 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f  e select a new o
1eec0 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72  ne.    ** and tr
1eed0 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31  y again, up to 1
1eee0 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f  00 times..    */
1eef0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1ef00 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66  >isTable );..#if
1ef10 64 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54  def SQLITE_32BIT
1ef20 5f 52 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e  _ROWID.#   defin
1ef30 65 20 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66  e MAX_ROWID 0x7f
1ef40 66 66 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20  ffffff.#else.   
1ef50 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65   /* Some compile
1ef60 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75  rs complain abou
1ef70 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74  t constants of t
1ef80 68 65 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66  he form 0x7fffff
1ef90 66 66 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20  ffffffffff..    
1efa0 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61  ** Others compla
1efb0 69 6e 20 61 62 6f 75 74 20 30 78 37 66 66 66 66  in about 0x7ffff
1efc0 66 66 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20  ffffffffffffLL. 
1efd0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
1efe0 61 63 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a  acro seems.    *
1eff0 2a 20 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65  * to provide the
1f000 20 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20   constant while 
1f010 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69  making all compi
1f020 6c 65 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20  lers happy..    
1f030 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41  */.#   define MA
1f040 58 5f 52 4f 57 49 44 20 20 28 69 36 34 29 28 20  X_ROWID  (i64)( 
1f050 28 28 28 75 36 34 29 30 78 37 66 66 66 66 66 66  (((u64)0x7ffffff
1f060 66 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30  f)<<32) | (u64)0
1f070 78 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64  xffffffff ).#end
1f080 69 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d  if..    if( !pC-
1f090 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
1f0a0 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c  ){.      v = sql
1f0b0 69 74 65 33 42 74 72 65 65 47 65 74 43 61 63 68  ite3BtreeGetCach
1f0c0 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72  edRowid(pC->pCur
1f0d0 73 6f 72 29 3b 0a 20 20 20 20 20 20 69 66 28 20  sor);.      if( 
1f0e0 76 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  v==0 ){.        
1f0f0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1f100 65 4c 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f  eLast(pC->pCurso
1f110 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
1f120 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1f130 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
1f140 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1f150 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1f160 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
1f170 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20 20  res ){.         
1f180 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50   v = 1;   /* IMP
1f190 3a 20 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20  : R-61914-48074 
1f1a0 2a 2f 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  */.        }else
1f1b0 7b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65  {.          asse
1f1c0 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
1f1d0 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43  CursorIsValid(pC
1f1e0 2d 3e 70 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->pCursor) );.  
1f1f0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1f200 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
1f210 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76  (pC->pCursor, &v
1f220 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  );.          ass
1f230 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
1f240 4f 4b 20 29 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f  OK );   /* Canno
1f250 74 20 66 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67  t fail following
1f260 20 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a   BtreeLast() */.
1f270 20 20 20 20 20 20 20 20 20 20 69 66 28 20 76 3e            if( v>
1f280 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20  =MAX_ROWID ){.  
1f290 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73            pC->us
1f2a0 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31  eRandomRowid = 1
1f2b0 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73  ;.          }els
1f2c0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 76  e{.            v
1f2d0 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d  ++;   /* IMP: R-
1f2e0 32 39 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20  29538-34987 */. 
1f2f0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1f300 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 23 69     }.      }..#i
1f310 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1f320 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
1f330 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70        if( pOp->p
1f340 33 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  3 ){.        /* 
1f350 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
1f360 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
1f370 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
1f380 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1f390 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 69  3>0 );.        i
1f3a0 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
1f3b0 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 70 46            for(pF
1f3c0 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20  rame=p->pFrame; 
1f3d0 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b  pFrame->pParent;
1f3e0 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e   pFrame=pFrame->
1f3f0 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20  pParent);.      
1f400 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68      /* Assert th
1f410 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  at P3 is a valid
1f420 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f   memory cell. */
1f430 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
1f440 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61  t( pOp->p3<=pFra
1f450 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  me->nMem );.    
1f460 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 46        pMem = &pF
1f470 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
1f480 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  p3];.        }el
1f490 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a  se{.          /*
1f4a0 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20   Assert that P3 
1f4b0 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72  is a valid memor
1f4c0 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20  y cell. */.     
1f4d0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1f4e0 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
1f4f0 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
1f500 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26          pMem = &
1f510 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
1f520 20 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75           memAbou
1f530 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d 65  tToChange(p, pMe
1f540 6d 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  m);.        }.  
1f550 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
1f560 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20 29  mIsValid(pMem) )
1f570 3b 0a 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  ;..        REGIS
1f580 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
1f590 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20  3, pMem);.      
1f5a0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
1f5b0 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29  Integerify(pMem)
1f5c0 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1f5d0 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
1f5e0 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20   MEM_Int)!=0 ); 
1f5f0 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64   /* mem(P3) hold
1f600 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a  s an integer */.
1f610 20 20 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d          if( pMem
1f620 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44  ->u.i==MAX_ROWID
1f630 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f   || pC->useRando
1f640 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20  mRowid ){.      
1f650 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1f660 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20  FULL;   /* IMP: 
1f670 52 2d 31 32 32 37 35 2d 36 31 33 33 38 20 2a 2f  R-12275-61338 */
1f680 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
1f690 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1f6a0 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  or;.        }.  
1f6b0 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d        if( v<pMem
1f6c0 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20  ->u.i+1 ){.     
1f6d0 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75       v = pMem->u
1f6e0 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 20 20  .i + 1;.        
1f6f0 7d 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 2d 3e  }.        pMem->
1f700 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 20 20 7d  u.i = v;.      }
1f710 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 73  .#endif..      s
1f720 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61  qlite3BtreeSetCa
1f730 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43  chedRowid(pC->pC
1f740 75 72 73 6f 72 2c 20 76 3c 4d 41 58 5f 52 4f 57  ursor, v<MAX_ROW
1f750 49 44 20 3f 20 76 2b 31 20 3a 20 30 29 3b 0a 20  ID ? v+1 : 0);. 
1f760 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 43 2d     }.    if( pC-
1f770 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
1f780 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c  ){.      /* IMPL
1f790 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
1f7a0 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49 66 20  -07677-41881 If 
1f7b0 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49  the largest ROWI
1f7c0 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68  D is equal to th
1f7d0 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65  e.      ** large
1f7e0 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65  st possible inte
1f7f0 67 65 72 20 28 39 32 32 33 33 37 32 30 33 36 38  ger (92233720368
1f800 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20 74  54775807) then t
1f810 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20  he database.    
1f820 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72    ** engine star
1f830 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69 74  ts picking posit
1f840 69 76 65 20 63 61 6e 64 69 64 61 74 65 20 52 4f  ive candidate RO
1f850 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75  WIDs at random u
1f860 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74  ntil.      ** it
1f870 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74 20   finds one that 
1f880 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  is not previousl
1f890 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20  y used. */.     
1f8a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
1f8b0 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61  ==0 );  /* We ca
1f8c0 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f  nnot be in rando
1f8d0 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20  m rowid mode if 
1f8e0 74 68 69 73 20 69 73 0a 20 20 20 20 20 20 20 20  this is.        
1f8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f900 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49       ** an AUTOI
1f910 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20  NCREMENT table. 
1f920 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 6f 6e 20 74  */.      /* on t
1f930 68 65 20 66 69 72 73 74 20 61 74 74 65 6d 70 74  he first attempt
1f940 2c 20 73 69 6d 70 6c 79 20 64 6f 20 6f 6e 65 20  , simply do one 
1f950 6d 6f 72 65 20 74 68 61 6e 20 70 72 65 76 69 6f  more than previo
1f960 75 73 20 2a 2f 0a 20 20 20 20 20 20 76 20 3d 20  us */.      v = 
1f970 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 20  lastRowid;.     
1f980 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44   v &= (MAX_ROWID
1f990 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72 65 20  >>1); /* ensure 
1f9a0 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67 61 74  doesn't go negat
1f9b0 69 76 65 20 2a 2f 0a 20 20 20 20 20 20 76 2b 2b  ive */.      v++
1f9c0 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e 2d  ; /* ensure non-
1f9d0 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 63 6e  zero */.      cn
1f9e0 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 77 68 69  t = 0;.      whi
1f9f0 6c 65 28 20 20 20 28 28 72 63 20 3d 20 73 71 6c  le(   ((rc = sql
1fa00 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1fa10 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
1fa20 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a  sor, 0, (u64)v,.
1fa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa60 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c 49   0, &res))==SQLI
1fa70 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20 20  TE_OK).         
1fa80 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a 20     && (res==0). 
1fa90 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28 2b             && (+
1faa0 2b 63 6e 74 3c 31 30 30 29 29 7b 0a 20 20 20 20  +cnt<100)){.    
1fab0 20 20 20 20 2f 2a 20 63 6f 6c 6c 69 73 69 6f 6e      /* collision
1fac0 20 2d 20 74 72 79 20 61 6e 6f 74 68 65 72 20 72   - try another r
1fad0 61 6e 64 6f 6d 20 72 6f 77 69 64 20 2a 2f 0a 20  andom rowid */. 
1fae0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72         sqlite3_r
1faf0 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66  andomness(sizeof
1fb00 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20  (v), &v);.      
1fb10 20 20 69 66 28 20 63 6e 74 3c 35 20 29 7b 0a 20    if( cnt<5 ){. 
1fb20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 79 20           /* try 
1fb30 22 73 6d 61 6c 6c 22 20 72 61 6e 64 6f 6d 20 72  "small" random r
1fb40 6f 77 69 64 73 20 66 6f 72 20 74 68 65 20 69 6e  owids for the in
1fb50 69 74 69 61 6c 20 61 74 74 65 6d 70 74 73 20 2a  itial attempts *
1fb60 2f 0a 20 20 20 20 20 20 20 20 20 20 76 20 26 3d  /.          v &=
1fb70 20 30 78 66 66 66 66 66 66 3b 0a 20 20 20 20 20   0xffffff;.     
1fb80 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1fb90 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f      v &= (MAX_RO
1fba0 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75  WID>>1); /* ensu
1fbb0 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65  re doesn't go ne
1fbc0 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20  gative */.      
1fbd0 20 20 7d 0a 20 20 20 20 20 20 20 20 76 2b 2b 3b    }.        v++;
1fbe0 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e 2d 7a   /* ensure non-z
1fbf0 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20  ero */.      }. 
1fc00 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
1fc10 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30  ITE_OK && res==0
1fc20 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
1fc30 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20   SQLITE_FULL;   
1fc40 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d  /* IMP: R-38219-
1fc50 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20  53002 */.       
1fc60 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1fc70 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1fc80 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  }.      assert( 
1fc90 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52  v>0 );  /* EV: R
1fca0 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a  -40812-03570 */.
1fcb0 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72 6f      }.    pC->ro
1fcc0 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
1fcd0 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64      pC->deferred
1fce0 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20  Moveto = 0;.    
1fcf0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
1fd00 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
1fd10 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d   }.  pOut->u.i =
1fd20 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   v;.  break;.}..
1fd30 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72  /* Opcode: Inser
1fd40 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
1fd50 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e  .** Synopsis: in
1fd60 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61 74 61 3d  tkey=r[P3] data=
1fd70 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74  r[P2].**.** Writ
1fd80 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20  e an entry into 
1fd90 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72  the table of cur
1fda0 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65  sor P1.  A new e
1fdb0 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74  ntry is.** creat
1fdc0 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74  ed if it doesn't
1fdd0 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f   already exist o
1fde0 72 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 61  r the data for a
1fdf0 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e  n existing.** en
1fe00 74 72 79 20 69 73 20 6f 76 65 72 77 72 69 74 74  try is overwritt
1fe10 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69 73  en.  The data is
1fe20 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42   the value MEM_B
1fe30 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20 72 65  lob stored in re
1fe40 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  gister.** number
1fe50 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20   P2. The key is 
1fe60 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
1fe70 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d  er P3. The key m
1fe80 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f  ust.** be a MEM_
1fe90 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  Int..**.** If th
1fea0 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
1feb0 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
1fec0 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77  et, then the row
1fed0 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73   change count is
1fee0 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  .** incremented 
1fef0 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e  (otherwise not).
1ff00 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f    If the OPFLAG_
1ff10 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f  LASTROWID flag o
1ff20 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20  f P5 is set,.** 
1ff30 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74  then rowid is st
1ff40 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65 71 75  ored for subsequ
1ff50 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74 68  ent return by th
1ff60 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73  e.** sqlite3_las
1ff70 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
1ff80 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72   function (other
1ff90 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64  wise it is unmod
1ffa0 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66  ified)..**.** If
1ffb0 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53   the OPFLAG_USES
1ffc0 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f  EEKRESULT flag o
1ffd0 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20  f P5 is set and 
1ffe0 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  if the result of
1fff0 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73 65 65  .** the last see
20000 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50 5f  k operation (OP_
20010 4e 6f 74 45 78 69 73 74 73 29 20 77 61 73 20 61  NotExists) was a
20020 20 73 75 63 63 65 73 73 2c 20 74 68 65 6e 20 74   success, then t
20030 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  his.** operation
20040 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d 70   will not attemp
20050 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 61 70  t to find the ap
20060 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20 62 65  propriate row be
20070 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74 68  fore doing.** th
20080 65 20 69 6e 73 65 72 74 20 62 75 74 20 77 69 6c  e insert but wil
20090 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72 77 72  l instead overwr
200a0 69 74 65 20 74 68 65 20 72 6f 77 20 74 68 61 74  ite the row that
200b0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
200c0 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  * currently poin
200d0 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73 75 6d  ting to.  Presum
200e0 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f 72 20  ably, the prior 
200f0 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63  OP_NotExists opc
20100 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65 61  ode.** has alrea
20110 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68  dy positioned th
20120 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65 63 74  e cursor correct
20130 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20  ly.  This is an 
20140 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20  optimization.** 
20150 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65 72 66  that boosts perf
20160 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f 69 64  ormance by avoid
20170 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20 73 65  ing redundant se
20180 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  eks..**.** If th
20190 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  e OPFLAG_ISUPDAT
201a0 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74  E flag is set, t
201b0 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20  hen this opcode 
201c0 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a  is part of an.**
201d0 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f   UPDATE operatio
201e0 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28 69  n.  Otherwise (i
201f0 66 20 74 68 65 20 66 6c 61 67 20 69 73 20 63 6c  f the flag is cl
20200 65 61 72 29 20 74 68 65 6e 20 74 68 69 73 20 6f  ear) then this o
20210 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72 74  pcode.** is part
20220 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 70   of an INSERT op
20230 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 69  eration.  The di
20240 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79  fference is only
20250 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a   important to.**
20260 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b   the update hook
20270 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65  ..**.** Paramete
20280 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74  r P4 may point t
20290 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  o a string conta
202a0 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2d  ining the table-
202b0 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20  name, or.** may 
202c0 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69  be NULL. If it i
202d0 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e  s not NULL, then
202e0 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
202f0 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78 55   .** (sqlite3.xU
20300 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69  pdateCallback) i
20310 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77  s invoked follow
20320 69 6e 67 20 61 20 73 75 63 63 65 73 73 66 75 6c  ing a successful
20330 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28   insert..**.** (
20340 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66  WARNING/TODO: If
20350 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d   P1 is a pseudo-
20360 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73  cursor and P2 is
20370 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20   dynamically.** 
20380 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20  allocated, then 
20390 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20  ownership of P2 
203a0 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20 74  is transferred t
203b0 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72  o the pseudo-cur
203c0 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73  sor.** and regis
203d0 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65  ter P2 becomes e
203e0 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68  phemeral.  If th
203f0 65 20 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e  e cursor is chan
20400 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75  ged, the.** valu
20410 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  e of register P2
20420 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67   will then chang
20430 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68  e.  Make sure th
20440 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63  is does not.** c
20450 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d  ause any problem
20460 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  s.).**.** This i
20470 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20  nstruction only 
20480 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e  works on tables.
20490 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74    The equivalent
204a0 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
204b0 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f  for indices is O
204c0 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a  P_IdxInsert..*/.
204d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72  /* Opcode: Inser
204e0 74 49 6e 74 20 50 31 20 50 32 20 50 33 20 50 34  tInt P1 P2 P3 P4
204f0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
20500 20 20 69 6e 74 6b 65 79 3d 50 33 20 64 61 74 61    intkey=P3 data
20510 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 69  =r[P2].**.** Thi
20520 73 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20  s works exactly 
20530 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20 65  like OP_Insert e
20540 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6b  xcept that the k
20550 65 79 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74  ey is the.** int
20560 65 67 65 72 20 76 61 6c 75 65 20 50 33 2c 20 6e  eger value P3, n
20570 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ot the value of 
20580 74 68 65 20 69 6e 74 65 67 65 72 20 73 74 6f 72  the integer stor
20590 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
205a0 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  3..*/.case OP_In
205b0 73 65 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49  sert: .case OP_I
205c0 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65  nsertInt: {.  Me
205d0 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20 20 20  m *pData;       
205e0 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64  /* MEM cell hold
205f0 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74 68 65  ing data for the
20600 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e   record to be in
20610 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20  serted */.  Mem 
20620 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20 2f 2a  *pKey;        /*
20630 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e   MEM cell holdin
20640 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65 20 72  g key  for the r
20650 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 69  ecord */.  i64 i
20660 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Key;         /* 
20670 54 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49  The integer ROWI
20680 44 20 6f 72 20 6b 65 79 20 66 6f 72 20 74 68 65  D or key for the
20690 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e   record to be in
206a0 73 65 72 74 65 64 20 2a 2f 0a 20 20 56 64 62 65  serted */.  Vdbe
206b0 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a  Cursor *pC;   /*
206c0 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62 6c 65   Cursor to table
206d0 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e 73 65   into which inse
206e0 72 74 20 69 73 20 77 72 69 74 74 65 6e 20 2a 2f  rt is written */
206f0 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20  .  int nZero;   
20700 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
20710 66 20 7a 65 72 6f 2d 62 79 74 65 73 20 74 6f 20  f zero-bytes to 
20720 61 70 70 65 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  append */.  int 
20730 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a  seekResult;   /*
20740 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72   Result of prior
20750 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f   seek or 0 if no
20760 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66   USESEEKRESULT f
20770 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  lag */.  const c
20780 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61  har *zDb;  /* da
20790 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73  tabase name - us
207a0 65 64 20 62 79 20 74 68 65 20 75 70 64 61 74 65  ed by the update
207b0 20 68 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73 74   hook */.  const
207c0 20 63 68 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a 20   char *zTbl; /* 
207d0 54 61 62 6c 65 20 6e 61 6d 65 20 2d 20 75 73 65  Table name - use
207e0 64 20 62 79 20 74 68 65 20 6f 70 64 61 74 65 20  d by the opdate 
207f0 68 6f 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f 70  hook */.  int op
20800 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ;           /* O
20810 70 63 6f 64 65 20 66 6f 72 20 75 70 64 61 74 65  pcode for update
20820 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50   hook: SQLITE_UP
20830 44 41 54 45 20 6f 72 20 53 51 4c 49 54 45 5f 49  DATE or SQLITE_I
20840 4e 53 45 52 54 20 2a 2f 0a 0a 20 20 70 44 61 74  NSERT */..  pDat
20850 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  a = &aMem[pOp->p
20860 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
20870 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
20880 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
20890 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ;.  assert( memI
208a0 73 56 61 6c 69 64 28 70 44 61 74 61 29 20 29 3b  sValid(pData) );
208b0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
208c0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
208d0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
208e0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
208f0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  sor!=0 );.  asse
20900 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
20910 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61  bleReg==0 );.  a
20920 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
20930 6c 65 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52  le );.  REGISTER
20940 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
20950 70 44 61 74 61 29 3b 0a 0a 20 20 69 66 28 20 70  pData);..  if( p
20960 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
20970 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 70 4b 65  nsert ){.    pKe
20980 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  y = &aMem[pOp->p
20990 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  3];.    assert( 
209a0 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pKey->flags & ME
209b0 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61 73 73  M_Int );.    ass
209c0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
209d0 70 4b 65 79 29 20 29 3b 0a 20 20 20 20 52 45 47  pKey) );.    REG
209e0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
209f0 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20  >p3, pKey);.    
20a00 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69  iKey = pKey->u.i
20a10 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
20a20 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
20a30 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74  de==OP_InsertInt
20a40 20 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70   );.    iKey = p
20a50 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69  Op->p3;.  }..  i
20a60 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
20a70 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
20a80 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66  >nChange++;.  if
20a90 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
20aa0 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64  AG_LASTROWID ) d
20ab0 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c  b->lastRowid = l
20ac0 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b  astRowid = iKey;
20ad0 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c  .  if( pData->fl
20ae0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
20af0 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a 20 3d  {.    pData->z =
20b00 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e 6e   0;.    pData->n
20b10 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 0;.  }else{. 
20b20 20 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61     assert( pData
20b30 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42  ->flags & (MEM_B
20b40 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a  lob|MEM_Str) );.
20b50 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c 74    }.  seekResult
20b60 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f   = ((pOp->p5 & O
20b70 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
20b80 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52  ULT) ? pC->seekR
20b90 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66  esult : 0);.  if
20ba0 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26  ( pData->flags &
20bb0 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
20bc0 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e   nZero = pData->
20bd0 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65  u.nZero;.  }else
20be0 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b  {.    nZero = 0;
20bf0 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 42 74  .  }.  sqlite3Bt
20c00 72 65 65 53 65 74 43 61 63 68 65 64 52 6f 77 69  reeSetCachedRowi
20c10 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30  d(pC->pCursor, 0
20c20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
20c30 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d  3BtreeInsert(pC-
20c40 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65  >pCursor, 0, iKe
20c50 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y,.             
20c60 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44 61               pDa
20c70 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c  ta->z, pData->n,
20c80 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20 20   nZero,.        
20c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ca0 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46    (pOp->p5 & OPF
20cb0 4c 41 47 5f 41 50 50 45 4e 44 29 21 3d 30 2c 20  LAG_APPEND)!=0, 
20cc0 73 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a  seekResult.  );.
20cd0 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
20ce0 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 64 65  id = 0;.  pC->de
20cf0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
20d00 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
20d10 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
20d20 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  E;..  /* Invoke 
20d30 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
20d40 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a  if required. */.
20d50 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
20d60 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61  _OK && db->xUpda
20d70 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f  teCallback && pO
20d80 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 7a  p->p4.z ){.    z
20d90 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d  Db = db->aDb[pC-
20da0 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20  >iDb].zName;.   
20db0 20 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e   zTbl = pOp->p4.
20dc0 7a 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f  z;.    op = ((pO
20dd0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49  p->p5 & OPFLAG_I
20de0 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54  SUPDATE) ? SQLIT
20df0 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54  E_UPDATE : SQLIT
20e00 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20 20 20 61  E_INSERT);.    a
20e10 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
20e20 6c 65 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55  le );.    db->xU
20e30 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62  pdateCallback(db
20e40 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70  ->pUpdateArg, op
20e50 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65  , zDb, zTbl, iKe
20e60 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  y);.    assert( 
20e70 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20  pC->iDb>=0 );.  
20e80 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
20e90 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20   Opcode: Delete 
20ea0 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a  P1 P2 * P4 *.**.
20eb0 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72 65  ** Delete the re
20ec0 63 6f 72 64 20 61 74 20 77 68 69 63 68 20 74 68  cord at which th
20ed0 65 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 63  e P1 cursor is c
20ee0 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
20ef0 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72  g..**.** The cur
20f00 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74  sor will be left
20f10 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 65 69 74   pointing at eit
20f20 68 65 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20  her the next or 
20f30 74 68 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20  the previous.** 
20f40 72 65 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61  record in the ta
20f50 62 6c 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65  ble. If it is le
20f60 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
20f70 68 65 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20  he next record, 
20f80 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74  then.** the next
20f90 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
20fa0 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f  n will be a no-o
20fb0 70 2e 20 20 48 65 6e 63 65 20 69 74 20 69 73 20  p.  Hence it is 
20fc0 4f 4b 20 74 6f 20 64 65 6c 65 74 65 0a 2a 2a 20  OK to delete.** 
20fd0 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69  a record from wi
20fe0 74 68 69 6e 20 61 6e 20 4e 65 78 74 20 6c 6f 6f  thin an Next loo
20ff0 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  p..**.** If the 
21000 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66  OPFLAG_NCHANGE f
21010 6c 61 67 20 6f 66 20 50 32 20 69 73 20 73 65 74  lag of P2 is set
21020 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63  , then the row c
21030 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a  hange count is.*
21040 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f  * incremented (o
21050 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a  therwise not)..*
21060 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74  *.** P1 must not
21070 20 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65   be pseudo-table
21080 2e 20 20 49 74 20 68 61 73 20 74 6f 20 62 65 20  .  It has to be 
21090 61 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74  a real table wit
210a0 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f  h.** multiple ro
210b0 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  ws..**.** If P4 
210c0 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  is not NULL, the
210d0 6e 20 69 74 20 69 73 20 74 68 65 20 6e 61 6d 65  n it is the name
210e0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
210f0 61 74 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e  at P1 is.** poin
21100 74 69 6e 67 20 74 6f 2e 20 20 54 68 65 20 75 70  ting to.  The up
21110 64 61 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62  date hook will b
21120 65 20 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74  e invoked, if it
21130 20 65 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50   exists..** If P
21140 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68  4 is not NULL th
21150 65 6e 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  en the P1 cursor
21160 20 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e 20   must have been 
21170 70 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73  positioned.** us
21180 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  ing OP_NotFound 
21190 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e  prior to invokin
211a0 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  g this opcode..*
211b0 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65  /.case OP_Delete
211c0 3a 20 7b 0a 20 20 69 36 34 20 69 4b 65 79 3b 0a  : {.  i64 iKey;.
211d0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
211e0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
211f0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
21200 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
21210 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
21220 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
21230 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
21240 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
21250 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e  sor!=0 );  /* On
21260 6c 79 20 76 61 6c 69 64 20 66 6f 72 20 72 65 61  ly valid for rea
21270 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70 73 65  l tables, no pse
21280 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 20 20 69  udotables */.  i
21290 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f  Key = pC->lastRo
212a0 77 69 64 3b 20 20 20 20 20 20 2f 2a 20 4f 6e 6c  wid;      /* Onl
212b0 79 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 75  y used for the u
212c0 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 0a 20  pdate hook */.. 
212d0 20 2f 2a 20 54 68 65 20 4f 50 5f 44 65 6c 65 74   /* The OP_Delet
212e0 65 20 6f 70 63 6f 64 65 20 61 6c 77 61 79 73 20  e opcode always 
212f0 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f 50 5f 4e 6f  follows an OP_No
21300 74 45 78 69 73 74 73 20 6f 72 20 4f 50 5f 4c 61  tExists or OP_La
21310 73 74 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 43 6f  st or.  ** OP_Co
21320 6c 75 6d 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65  lumn on the same
21330 20 74 61 62 6c 65 20 77 69 74 68 6f 75 74 20 61   table without a
21340 6e 79 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 6f  ny intervening o
21350 70 65 72 61 74 69 6f 6e 73 20 74 68 61 74 0a 20  perations that. 
21360 20 2a 2a 20 6d 69 67 68 74 20 6d 6f 76 65 20 6f   ** might move o
21370 72 20 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65  r invalidate the
21380 20 63 75 72 73 6f 72 2e 20 20 48 65 6e 63 65 20   cursor.  Hence 
21390 63 75 72 73 6f 72 20 70 43 20 69 73 20 61 6c 77  cursor pC is alw
213a0 61 79 73 20 70 6f 69 6e 74 69 6e 67 0a 20 20 2a  ays pointing.  *
213b0 2a 20 74 6f 20 74 68 65 20 72 6f 77 20 74 6f 20  * to the row to 
213c0 62 65 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74  be deleted and t
213d0 68 65 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  he sqlite3VdbeCu
213e0 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 6f 70 65  rsorMoveto() ope
213f0 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 62 65 6c 6f  ration.  ** belo
21400 77 20 69 73 20 61 6c 77 61 79 73 20 61 20 6e 6f  w is always a no
21410 2d 6f 70 20 61 6e 64 20 63 61 6e 6e 6f 74 20 66  -op and cannot f
21420 61 69 6c 2e 20 20 57 65 20 77 69 6c 6c 20 72 75  ail.  We will ru
21430 6e 20 69 74 20 61 6e 79 68 6f 77 2c 20 74 68 6f  n it anyhow, tho
21440 75 67 68 2c 0a 20 20 2a 2a 20 74 6f 20 67 75 61  ugh,.  ** to gua
21450 72 64 20 61 67 61 69 6e 73 74 20 66 75 74 75 72  rd against futur
21460 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65  e changes to the
21470 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e   code generator.
21480 0a 20 20 2a 2a 2f 0a 20 20 61 73 73 65 72 74 28  .  **/.  assert(
21490 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
214a0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  eto==0 );.  rc =
214b0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
214c0 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
214d0 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51  if( NEVER(rc!=SQ
214e0 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20  LITE_OK) ) goto 
214f0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
21500 6f 72 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74  or;..  sqlite3Bt
21510 72 65 65 53 65 74 43 61 63 68 65 64 52 6f 77 69  reeSetCachedRowi
21520 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30  d(pC->pCursor, 0
21530 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
21540 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 2d  3BtreeDelete(pC-
21550 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 2d  >pCursor);.  pC-
21560 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
21570 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f  ACHE_STALE;..  /
21580 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64  * Invoke the upd
21590 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75  ate-hook if requ
215a0 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72  ired. */.  if( r
215b0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
215c0 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
215d0 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a  ack && pOp->p4.z
215e0 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 20   && pC->isTable 
215f0 29 7b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61  ){.    db->xUpda
21600 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70  teCallback(db->p
21610 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54  UpdateArg, SQLIT
21620 45 5f 44 45 4c 45 54 45 2c 0a 20 20 20 20 20 20  E_DELETE,.      
21630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21640 20 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44    db->aDb[pC->iD
21650 62 5d 2e 7a 4e 61 6d 65 2c 20 70 4f 70 2d 3e 70  b].zName, pOp->p
21660 34 2e 7a 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20  4.z, iKey);.    
21670 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e  assert( pC->iDb>
21680 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  =0 );.  }.  if( 
21690 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47  pOp->p2 & OPFLAG
216a0 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
216b0 68 61 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b  hange++;.  break
216c0 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  ;.}./* Opcode: R
216d0 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20  esetCount * * * 
216e0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61  * *.**.** The va
216f0 6c 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67  lue of the chang
21700 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70  e counter is cop
21710 69 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62  ied to the datab
21720 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68  ase handle.** ch
21730 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65  ange counter (re
21740 74 75 72 6e 65 64 20 62 79 20 73 75 62 73 65 71  turned by subseq
21750 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71  uent calls to sq
21760 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29  lite3_changes())
21770 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20 56 4d  ..** Then the VM
21780 73 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67  s internal chang
21790 65 20 63 6f 75 6e 74 65 72 20 72 65 73 65 74 73  e counter resets
217a0 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69   to 0..** This i
217b0 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65  s used by trigge
217c0 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63  r programs..*/.c
217d0 61 73 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e  ase OP_ResetCoun
217e0 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64  t: {.  sqlite3Vd
217f0 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c  beSetChanges(db,
21800 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20   p->nChange);.  
21810 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a  p->nChange = 0;.
21820 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
21830 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d  pcode: SorterCom
21840 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34  pare P1 P2 P3 P4
21850 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69  .** Synopsis:  i
21860 66 20 6b 65 79 28 50 31 29 21 3d 72 74 72 69 6d  f key(P1)!=rtrim
21870 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f 74 6f 20  (r[P3],P4) goto 
21880 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  P2.**.** P1 is a
21890 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20   sorter cursor. 
218a0 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
218b0 20 63 6f 6d 70 61 72 65 73 20 61 20 70 72 65 66   compares a pref
218c0 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20 74 68 65  ix of the.** the
218d0 20 72 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20   record blob in 
218e0 72 65 67 69 73 74 65 72 20 50 33 20 61 67 61 69  register P3 agai
218f0 6e 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20  nst a prefix of 
21900 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 20 0a  the entry that .
21910 2a 2a 20 74 68 65 20 73 6f 72 74 65 72 20 63 75  ** the sorter cu
21920 72 73 6f 72 20 63 75 72 72 65 6e 74 6c 79 20 70  rsor currently p
21930 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 66  oints to.  The f
21940 69 6e 61 6c 20 50 34 20 66 69 65 6c 64 73 20 6f  inal P4 fields o
21950 66 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20 50 33  f both.** the P3
21960 20 61 6e 64 20 73 6f 72 74 65 72 20 72 65 63 6f   and sorter reco
21970 72 64 20 61 72 65 20 69 67 6e 6f 72 65 64 2e 0a  rd are ignored..
21980 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  **.** If either 
21990 50 33 20 6f 72 20 74 68 65 20 73 6f 72 74 65 72  P3 or the sorter
219a0 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55 4c 4c   contains a NULL
219b0 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 69 72   in one of their
219c0 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 2a 2a 20   significant.** 
219d0 66 69 65 6c 64 73 20 28 6e 6f 74 20 63 6f 75 6e  fields (not coun
219e0 74 69 6e 67 20 74 68 65 20 50 34 20 66 69 65 6c  ting the P4 fiel
219f0 64 73 20 61 74 20 74 68 65 20 65 6e 64 20 77 68  ds at the end wh
21a00 69 63 68 20 61 72 65 20 69 67 6e 6f 72 65 64 29  ich are ignored)
21a10 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d   then.** the com
21a20 70 61 72 69 73 6f 6e 20 69 73 20 61 73 73 75 6d  parison is assum
21a30 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c 2e 0a  ed to be equal..
21a40 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f 75  **.** Fall throu
21a50 67 68 20 74 6f 20 6e 65 78 74 20 69 6e 73 74 72  gh to next instr
21a60 75 63 74 69 6f 6e 20 69 66 20 74 68 65 20 74 77  uction if the tw
21a70 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d 70 61 72  o records compar
21a80 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a 20 65 61  e equal to.** ea
21a90 63 68 20 6f 74 68 65 72 2e 20 20 4a 75 6d 70 20  ch other.  Jump 
21aa0 74 6f 20 50 32 20 69 66 20 74 68 65 79 20 61 72  to P2 if they ar
21ab0 65 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a  e different..*/.
21ac0 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 43 6f  case OP_SorterCo
21ad0 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64 62 65 43  mpare: {.  VdbeC
21ae0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
21af0 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e 49 67 6e   res;.  int nIgn
21b00 6f 72 65 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e  ore;..  pC = p->
21b10 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
21b20 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
21b30 65 72 28 70 43 29 20 29 3b 0a 20 20 61 73 73 65  er(pC) );.  asse
21b40 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
21b50 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70  =P4_INT32 );.  p
21b60 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
21b70 3e 70 33 5d 3b 0a 20 20 6e 49 67 6e 6f 72 65 20  >p3];.  nIgnore 
21b80 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 72  = pOp->p4.i;.  r
21b90 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
21ba0 6f 72 74 65 72 43 6f 6d 70 61 72 65 28 70 43 2c  orterCompare(pC,
21bb0 20 70 49 6e 33 2c 20 6e 49 67 6e 6f 72 65 2c 20   pIn3, nIgnore, 
21bc0 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72 65 73  &res);.  if( res
21bd0 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
21be0 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72  ->p2-1;.  }.  br
21bf0 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f  eak;.};../* Opco
21c00 64 65 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50  de: SorterData P
21c10 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
21c20 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61  nopsis: r[P2]=da
21c30 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69  ta.**.** Write i
21c40 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
21c50 74 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72 74  the current sort
21c60 65 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72 74  er data for sort
21c70 65 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f  er cursor P1..*/
21c80 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 44  .case OP_SorterD
21c90 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ata: {.  VdbeCur
21ca0 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74  sor *pC;..  pOut
21cb0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
21cc0 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  ];.  pC = p->apC
21cd0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
21ce0 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
21cf0 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  pC) );.  rc = sq
21d00 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52  lite3VdbeSorterR
21d10 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29 3b  owkey(pC, pOut);
21d20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
21d30 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20  Opcode: RowData 
21d40 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
21d50 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64  ynopsis: r[P2]=d
21d60 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  ata.**.** Write 
21d70 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
21d80 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f   the complete ro
21d90 77 20 64 61 74 61 20 66 6f 72 20 63 75 72 73 6f  w data for curso
21da0 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69  r P1..** There i
21db0 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74  s no interpretat
21dc0 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e  ion of the data.
21dd0 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74    .** It is just
21de0 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65   copied onto the
21df0 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61   P2 register exa
21e00 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69  ctly as .** it i
21e10 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64  s found in the d
21e20 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
21e30 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75  .** If the P1 cu
21e40 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69  rsor must be poi
21e50 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64  nting to a valid
21e60 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c   row (not a NULL
21e70 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65   row).** of a re
21e80 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
21e90 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f  pseudo-table..*/
21ea0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b  ./* Opcode: RowK
21eb0 65 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ey P1 P2 * * *.*
21ec0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
21ed0 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20 57 72 69 74  ]=key.**.** Writ
21ee0 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
21ef0 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  P2 the complete 
21f00 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72 73  row key for curs
21f10 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20  or P1..** There 
21f20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61  is no interpreta
21f30 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61  tion of the data
21f40 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69  .  .** The key i
21f50 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68  s copied onto th
21f60 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78  e P2 register ex
21f70 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20  actly as .** it 
21f80 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20  is found in the 
21f90 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
21fa0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63  *.** If the P1 c
21fb0 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f  ursor must be po
21fc0 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69  inting to a vali
21fd0 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c  d row (not a NUL
21fe0 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72  L row).** of a r
21ff0 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
22000 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
22010 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79  /.case OP_RowKey
22020 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74  :.case OP_RowDat
22030 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  a: {.  VdbeCurso
22040 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
22050 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20  r *pCrsr;.  u32 
22060 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a 0a 20  n;.  i64 n64;.. 
22070 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
22080 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p2];.  memAbo
22090 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
220a0 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20  ut);..  /* Note 
220b0 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64 20  that RowKey and 
220c0 52 6f 77 44 61 74 61 20 61 72 65 20 72 65 61 6c  RowData are real
220d0 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65 20 73  ly exactly the s
220e0 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ame instruction 
220f0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
22100 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
22110 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
22120 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
22130 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
22140 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
22150 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
22160 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c  ( pC->isTable ||
22170 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
22180 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73  _RowData );.  as
22190 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
221a0 65 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  e==0 || pOp->opc
221b0 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20  ode==OP_RowData 
221c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  );.  assert( pC!
221d0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
221e0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29  pC->nullRow==0 )
221f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
22200 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d  pseudoTableReg==
22210 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
22220 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
22230 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
22240 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
22250 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
22260 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73  rsorIsValid(pCrs
22270 72 29 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20  r) );..  /* The 
22280 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f 50  OP_RowKey and OP
22290 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73  _RowData opcodes
222a0 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f   always follow O
222b0 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20  P_NotExists or. 
222c0 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70   ** OP_Rewind/Op
222d0 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e  _Next with no in
222e0 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75  tervening instru
222f0 63 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68  ctions that migh
22300 74 20 69 6e 76 61 6c 69 64 61 74 65 0a 20 20 2a  t invalidate.  *
22310 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48  * the cursor.  H
22320 65 6e 63 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ence the followi
22330 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  ng sqlite3VdbeCu
22340 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c  rsorMoveto() cal
22350 6c 20 69 73 20 61 6c 77 61 79 73 0a 20 20 2a 2a  l is always.  **
22360 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e   a no-op and can
22370 20 6e 65 76 65 72 20 66 61 69 6c 2e 20 20 42 75   never fail.  Bu
22380 74 20 77 65 20 6c 65 61 76 65 20 69 74 20 69 6e  t we leave it in
22390 20 70 6c 61 63 65 20 61 73 20 61 20 73 61 66 65   place as a safe
223a0 74 79 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  ty..  */.  asser
223b0 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
223c0 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63  oveto==0 );.  rc
223d0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
223e0 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
223f0 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d    if( NEVER(rc!=
22400 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74  SQLITE_OK) ) got
22410 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
22420 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20 70 43 2d  rror;..  if( pC-
22430 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20  >isTable==0 ){. 
22440 20 20 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e     assert( !pC->
22450 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 56  isTable );.    V
22460 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71  VA_ONLY(rc =) sq
22470 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
22480 65 28 70 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a  e(pCrsr, &n64);.
22490 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
224a0 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20  SQLITE_OK );    
224b0 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73 65 20  /* True because 
224c0 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  of CursorMoveto(
224d0 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a  ) call above */.
224e0 20 20 20 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e      if( n64>db->
224f0 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
22500 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
22510 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
22520 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d  g;.    }.    n =
22530 20 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c   (u32)n64;.  }el
22540 73 65 7b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59  se{.    VVA_ONLY
22550 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74  (rc =) sqlite3Bt
22560 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73  reeDataSize(pCrs
22570 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73 73 65  r, &n);.    asse
22580 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
22590 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61 74 61 53  K );    /* DataS
225a0 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69  ize() cannot fai
225b0 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28  l */.    if( n>(
225c0 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  u32)db->aLimit[S
225d0 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
225e0 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  TH] ){.      got
225f0 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d  o too_big;.    }
22600 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
22610 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f  e3VdbeMemGrow(pO
22620 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20 20 20  ut, n, 0) ){.   
22630 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
22640 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b  }.  pOut->n = n;
22650 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
22660 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62  g(pOut, MEM_Blob
22670 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54  );.  if( pC->isT
22680 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 72  able==0 ){.    r
22690 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
226a0 4b 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c  Key(pCrsr, 0, n,
226b0 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c   pOut->z);.  }el
226c0 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  se{.    rc = sql
226d0 69 74 65 33 42 74 72 65 65 44 61 74 61 28 70 43  ite3BtreeData(pC
226e0 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d  rsr, 0, n, pOut-
226f0 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  >z);.  }.  pOut-
22700 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
22710 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20  F8;  /* In case 
22720 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72  the blob is ever
22730 20 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f   cast to text */
22740 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
22750 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
22760 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
22770 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
22780 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
22790 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50  code: Rowid P1 P
227a0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
227b0 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64  sis: r[P2]=rowid
227c0 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20  .**.** Store in 
227d0 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69  register P2 an i
227e0 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
227f0 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74  the key of the t
22800 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a  able entry that.
22810 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  ** P1 is current
22820 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a  ly point to..**.
22830 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69 74  ** P1 can be eit
22840 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20  her an ordinary 
22850 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75  table or a virtu
22860 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65  al table.  There
22870 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61   used to.** be a
22880 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f   separate OP_VRo
22890 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75  wid opcode for u
228a0 73 65 20 77 69 74 68 20 76 69 72 74 75 61 6c 20  se with virtual 
228b0 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73  tables, but this
228c0 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e  .** one opcode n
228d0 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74  ow works for bot
228e0 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a  h table types..*
228f0 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a  /.case OP_Rowid:
22900 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
22910 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
22920 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65 43  lease */.  VdbeC
22930 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34  ursor *pC;.  i64
22940 20 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74   v;.  sqlite3_vt
22950 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e  ab *pVtab;.  con
22960 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
22970 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61  e *pModule;..  a
22980 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
22990 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
229a0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
229b0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
229c0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
229d0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
229e0 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
229f0 65 52 65 67 3d 3d 30 20 7c 7c 20 70 43 2d 3e 6e  eReg==0 || pC->n
22a00 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28 20  ullRow );.  if( 
22a10 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
22a20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
22a30 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62   MEM_Null;.    b
22a40 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66  reak;.  }else if
22a50 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
22a60 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20  veto ){.    v = 
22a70 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
22a80 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
22a90 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
22aa0 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  LE.  }else if( p
22ab0 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  C->pVtabCursor )
22ac0 7b 0a 20 20 20 20 70 56 74 61 62 20 3d 20 70 43  {.    pVtab = pC
22ad0 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70  ->pVtabCursor->p
22ae0 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c  Vtab;.    pModul
22af0 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
22b00 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  le;.    assert( 
22b10 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20  pModule->xRowid 
22b20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64  );.    rc = pMod
22b30 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e  ule->xRowid(pC->
22b40 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 76 29  pVtabCursor, &v)
22b50 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61  ;.    sqlite3Vta
22b60 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
22b70 20 70 56 74 61 62 29 3b 0a 23 65 6e 64 69 66 20   pVtab);.#endif 
22b80 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
22b90 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20  IRTUALTABLE */. 
22ba0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
22bb0 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
22bc0 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  =0 );.    rc = s
22bd0 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
22be0 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20  Moveto(pC);.    
22bf0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
22c00 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
22c10 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 72 6f  ;.    if( pC->ro
22c20 77 69 64 49 73 56 61 6c 69 64 20 29 7b 0a 20 20  widIsValid ){.  
22c30 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c 61 73 74      v = pC->last
22c40 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65 6c 73 65  Rowid;.    }else
22c50 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
22c60 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
22c70 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76  (pC->pCursor, &v
22c80 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
22c90 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
22ca0 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f 20  ;  /* Always so 
22cb0 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f  because of Curso
22cc0 72 4d 6f 76 65 74 6f 28 29 20 61 62 6f 76 65 20  rMoveto() above 
22cd0 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  */.    }.  }.  p
22ce0 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Out->u.i = v;.  
22cf0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
22d00 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20  ode: NullRow P1 
22d10 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f  * * * *.**.** Mo
22d20 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 50 31  ve the cursor P1
22d30 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20   to a null row. 
22d40 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   Any OP_Column o
22d50 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61  perations.** tha
22d60 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68  t occur while th
22d70 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74  e cursor is on t
22d80 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c  he null row will
22d90 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65   always.** write
22da0 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65   a NULL..*/.case
22db0 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20   OP_NullRow: {. 
22dc0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
22dd0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
22de0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
22df0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
22e00 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
22e10 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
22e20 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70  rt( pC!=0 );.  p
22e30 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  C->nullRow = 1;.
22e40 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
22e50 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  id = 0;.  pC->ca
22e60 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
22e70 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70  E_STALE;.  if( p
22e80 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20 20  C->pCursor ){.  
22e90 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
22ea0 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 70 43  earCursor(pC->pC
22eb0 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72  ursor);.  }.  br
22ec0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
22ed0 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a 20  e: Last P1 P2 * 
22ee0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65  * *.**.** The ne
22ef0 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
22f00 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
22f10 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
22f20 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
22f30 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6c  l refer to the l
22f40 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ast entry in the
22f50 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
22f60 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20  or index..** If 
22f70 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
22f80 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20  ex is empty and 
22f90 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20  P2>0, then jump 
22fa0 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
22fb0 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30  2..** If P2 is 0
22fc0 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65   or if the table
22fd0 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74   or index is not
22fe0 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72   empty, fall thr
22ff0 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
23000 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
23010 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
23020 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20  _Last: {        
23030 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
23040 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
23050 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
23060 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73    int res;..  as
23070 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
23080 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
23090 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
230a0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
230b0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
230c0 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
230d0 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
230e0 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  res = 0;.  asser
230f0 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
23100 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
23110 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26 72  eeLast(pCrsr, &r
23120 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  es);.  pC->nullR
23130 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20  ow = (u8)res;.  
23140 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
23150 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 72 6f  to = 0;.  pC->ro
23160 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
23170 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
23180 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
23190 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30  .  if( pOp->p2>0
231a0 20 26 26 20 72 65 73 20 29 7b 0a 20 20 20 20 70   && res ){.    p
231b0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
231c0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
231d0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
231e0 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
231f0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
23200 64 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68 65  does exactly the
23210 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20 4f   same thing as O
23220 50 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74 20  P_Rewind except 
23230 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65  that.** it incre
23240 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d  ments an undocum
23250 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61 72  ented global var
23260 69 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20 74  iable used for t
23270 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f  esting..**.** So
23280 72 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c  rting is accompl
23290 69 73 68 65 64 20 62 79 20 77 72 69 74 69 6e 67  ished by writing
232a0 20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61 20   records into a 
232b0 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a  sorting index,.*
232c0 2a 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e 67  * then rewinding
232d0 20 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64 20   that index and 
232e0 70 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b 20  playing it back 
232f0 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74  from beginning t
23300 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75 73  o.** end.  We us
23310 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70  e the OP_Sort op
23320 63 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66 20  code instead of 
23330 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f 20  OP_Rewind to do 
23340 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67  the.** rewinding
23350 20 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c 6f   so that the glo
23360 62 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69 6c  bal variable wil
23370 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64  l be incremented
23380 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73 69   and.** regressi
23390 6f 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65 74  on tests can det
233a0 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f  ermine whether o
233b0 72 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d 69  r not the optimi
233c0 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63  zer is.** correc
233d0 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f  tly optimizing o
233e0 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73  ut sorts..*/.cas
233f0 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a  e OP_SorterSort:
23400 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
23410 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20  ase OP_Sort: {  
23420 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
23430 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
23440 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f  EST.  sqlite3_so
23450 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71  rt_count++;.  sq
23460 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
23470 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70  nt--;.#endif.  p
23480 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54  ->aCounter[SQLIT
23490 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52  E_STMTSTATUS_SOR
234a0 54 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  T]++;.  /* Fall 
234b0 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
234c0 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f  Rewind */.}./* O
234d0 70 63 6f 64 65 3a 20 52 65 77 69 6e 64 20 50 31  pcode: Rewind P1
234e0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
234f0 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20  The next use of 
23500 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c  the Rowid or Col
23510 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74  umn or Next inst
23520 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a  ruction for P1 .
23530 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f  ** will refer to
23540 20 74 68 65 20 66 69 72 73 74 20 65 6e 74 72 79   the first entry
23550 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
23560 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
23570 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65  .** If the table
23580 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70   or index is emp
23590 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65  ty and P2>0, the
235a0 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
235b0 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20  ly to P2..** If 
235c0 50 32 20 69 73 20 30 20 6f 72 20 69 66 20 74 68  P2 is 0 or if th
235d0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
235e0 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66   is not empty, f
235f0 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
23600 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
23610 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
23620 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20  case OP_Rewind: 
23630 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
23640 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
23650 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
23660 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
23670 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  es;..  assert( p
23680 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
23690 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
236a0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
236b0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
236c0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
236d0 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
236e0 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70  er(pC)==(pOp->op
236f0 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53  code==OP_SorterS
23700 6f 72 74 29 20 29 3b 0a 20 20 72 65 73 20 3d 20  ort) );.  res = 
23710 31 3b 0a 20 20 69 66 28 20 69 73 53 6f 72 74 65  1;.  if( isSorte
23720 72 28 70 43 29 20 29 7b 0a 20 20 20 20 72 63 20  r(pC) ){.    rc 
23730 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
23740 74 65 72 52 65 77 69 6e 64 28 64 62 2c 20 70 43  terRewind(db, pC
23750 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65  , &res);.  }else
23760 7b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70 43  {.    pCrsr = pC
23770 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 61  ->pCursor;.    a
23780 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a  ssert( pCrsr );.
23790 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
237a0 42 74 72 65 65 46 69 72 73 74 28 70 43 72 73 72  BtreeFirst(pCrsr
237b0 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d  , &res);.    pC-
237c0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
237d0 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
237e0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
237f0 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e  _STALE;.    pC->
23800 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
23810 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c  ;.  }.  pC->null
23820 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20  Row = (u8)res;. 
23830 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
23840 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d  >0 && pOp->p2<p-
23850 3e 6e 4f 70 20 29 3b 0a 20 20 69 66 28 20 72 65  >nOp );.  if( re
23860 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  s ){.    pc = pO
23870 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
23880 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
23890 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50 32  code: Next P1 P2
238a0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
238b0 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50  Advance cursor P
238c0 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  1 so that it poi
238d0 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20  nts to the next 
238e0 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e  key/data pair in
238f0 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72   its.** table or
23900 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72   index.  If ther
23910 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65  e are no more ke
23920 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68  y/value pairs th
23930 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  en fall through.
23940 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
23950 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
23960 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72    But if the cur
23970 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73 20  sor advance was 
23980 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a  successful,.** j
23990 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
239a0 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  to P2..**.** The
239b0 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
239c0 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61  be for a real ta
239d0 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
239e0 6f 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d 75 73  o-table.  P1 mus
239f0 74 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f  t have.** been o
23a00 70 65 6e 65 64 20 70 72 69 6f 72 20 74 6f 20 74  pened prior to t
23a10 68 69 73 20 6f 70 63 6f 64 65 20 6f 72 20 74 68  his opcode or th
23a20 65 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73  e program will s
23a30 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54  egfault..**.** T
23a40 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61  he P3 value is a
23a50 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72   hint to the btr
23a60 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ee implementatio
23a70 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61  n. If P3==1, tha
23a80 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73  t.** means P1 is
23a90 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e   an SQL index an
23aa0 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74  d that this inst
23ab0 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61  ruction could ha
23ac0 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74  ve been.** omitt
23ad0 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78  ed if that index
23ae0 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65   had been unique
23af0 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79  .  P3 is usually
23b00 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c   0.  P3 is.** al
23b10 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72  ways either 0 or
23b20 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20   1..**.** P4 is 
23b30 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50  always of type P
23b40 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66  4_ADVANCE. The f
23b50 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  unction pointer 
23b60 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c  points to.** sql
23b70 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 29 2e  ite3BtreeNext().
23b80 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
23b90 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65  positive and the
23ba0 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20   jump is taken, 
23bb0 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74  then event count
23bc0 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d  er.** number P5-
23bd0 31 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65  1 in the prepare
23be0 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69  d statement is i
23bf0 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a  ncremented..**.*
23c00 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76  * See also: Prev
23c10 2c 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a  , NextIfOpen.*/.
23c20 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 49  /* Opcode: NextI
23c30 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50  fOpen P1 P2 P3 P
23c40 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
23c50 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73  opcode works jus
23c60 74 20 6c 69 6b 65 20 4f 50 5f 4e 65 78 74 20 65  t like OP_Next e
23c70 78 63 65 70 74 20 74 68 61 74 20 69 66 20 63 75  xcept that if cu
23c80 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a  rsor P1 is not.*
23c90 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65  * open it behave
23ca0 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a  s a no-op..*/./*
23cb0 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31   Opcode: Prev P1
23cc0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
23cd0 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f  ** Back up curso
23ce0 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
23cf0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72  points to the pr
23d00 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20  evious key/data 
23d10 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74  pair in its.** t
23d20 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20  able or index.  
23d30 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70  If there is no p
23d40 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75  revious key/valu
23d50 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c  e pairs then fal
23d60 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
23d70 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
23d80 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20  struction.  But 
23d90 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 62 61  if the cursor ba
23da0 63 6b 75 70 20 77 61 73 20 73 75 63 63 65 73 73  ckup was success
23db0 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d  ful,.** jump imm
23dc0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
23dd0 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72  **.** The P1 cur
23de0 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20  sor must be for 
23df0 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
23e00 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
23e10 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 6e  .  If P1 is.** n
23e20 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74 68 65  ot open then the
23e30 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64   behavior is und
23e40 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  efined..**.** Th
23e50 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20  e P3 value is a 
23e60 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65  hint to the btre
23e70 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
23e80 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74  . If P3==1, that
23e90 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20  .** means P1 is 
23ea0 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64  an SQL index and
23eb0 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72   that this instr
23ec0 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76  uction could hav
23ed0 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65  e been.** omitte
23ee0 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20  d if that index 
23ef0 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e  had been unique.
23f00 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20    P3 is usually 
23f10 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77  0.  P3 is.** alw
23f20 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20  ays either 0 or 
23f30 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
23f40 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34  lways of type P4
23f50 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75  _ADVANCE. The fu
23f60 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70  nction pointer p
23f70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69  oints to.** sqli
23f80 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
23f90 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  ()..**.** If P5 
23fa0 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20  is positive and 
23fb0 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
23fc0 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f  n, then event co
23fd0 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20  unter.** number 
23fe0 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70  P5-1 in the prep
23ff0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69  ared statement i
24000 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a  s incremented..*
24010 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65  /./* Opcode: Pre
24020 76 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33  vIfOpen P1 P2 P3
24030 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
24040 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a  s opcode works j
24050 75 73 74 20 6c 69 6b 65 20 4f 50 5f 50 72 65 76  ust like OP_Prev
24060 20 65 78 63 65 70 74 20 74 68 61 74 20 69 66 20   except that if 
24070 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74  cursor P1 is not
24080 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61  .** open it beha
24090 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a  ves a no-op..*/.
240a0 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65  case OP_SorterNe
240b0 78 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a  xt: {  /* jump *
240c0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
240d0 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a  pC;.  int res;..
240e0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
240f0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
24100 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
24110 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
24120 65 33 56 64 62 65 53 6f 72 74 65 72 4e 65 78 74  e3VdbeSorterNext
24130 28 64 62 2c 20 70 43 2c 20 26 72 65 73 29 3b 0a  (db, pC, &res);.
24140 20 20 67 6f 74 6f 20 6e 65 78 74 5f 74 61 69 6c    goto next_tail
24150 3b 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 49 66  ;.case OP_PrevIf
24160 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70  Open:    /* jump
24170 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74   */.case OP_Next
24180 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75  IfOpen:    /* ju
24190 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 61  mp */.  if( p->a
241a0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3d 3d 30  pCsr[pOp->p1]==0
241b0 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46   ) break;.  /* F
241c0 61 6c 6c 20 74 68 72 6f 75 67 68 20 2a 2f 0a 63  all through */.c
241d0 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20 20  ase OP_Prev:    
241e0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
241f0 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20 20  .case OP_Next:  
24200 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
24210 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
24220 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
24230 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
24240 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
24250 70 35 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e  p5<ArraySize(p->
24260 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20 70  aCounter) );.  p
24270 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
24280 2d 3e 70 31 5d 3b 0a 20 20 72 65 73 20 3d 20 70  ->p1];.  res = p
24290 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
242a0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
242b0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
242c0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
242d0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
242e0 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
242f0 20 72 65 73 3d 3d 30 20 7c 7c 20 28 72 65 73 3d   res==0 || (res=
24300 3d 31 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c  =1 && pC->isTabl
24310 65 3d 3d 30 29 20 29 3b 0a 20 20 74 65 73 74 63  e==0) );.  testc
24320 61 73 65 28 20 72 65 73 3d 3d 31 20 29 3b 0a 20  ase( res==1 );. 
24330 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
24340 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c  code!=OP_Next ||
24350 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
24360 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e  e==sqlite3BtreeN
24370 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ext );.  assert(
24380 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
24390 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34  _Prev || pOp->p4
243a0 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
243b0 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 20  e3BtreePrevious 
243c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
243d0 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78  ->opcode!=OP_Nex
243e0 74 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e  tIfOpen || pOp->
243f0 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
24400 69 74 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b  ite3BtreeNext );
24410 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
24420 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49  opcode!=OP_PrevI
24430 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34  fOpen || pOp->p4
24440 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
24450 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 29  e3BtreePrevious)
24460 3b 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34  ;.  rc = pOp->p4
24470 2e 78 41 64 76 61 6e 63 65 28 70 43 2d 3e 70 43  .xAdvance(pC->pC
24480 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 6e 65  ursor, &res);.ne
24490 78 74 5f 74 61 69 6c 3a 0a 20 20 70 43 2d 3e 63  xt_tail:.  pC->c
244a0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
244b0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20  HE_STALE;.  if( 
244c0 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70 43  res==0 ){.    pC
244d0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
244e0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
244f0 2d 20 31 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75  - 1;.    p->aCou
24500 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b  nter[pOp->p5]++;
24510 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
24520 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  EST.    sqlite3_
24530 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a  search_count++;.
24540 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 7b 0a  #endif.  }else{.
24550 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20      pC->nullRow 
24560 3d 20 31 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 72  = 1;.  }.  pC->r
24570 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
24580 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f  .  goto check_fo
24590 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a  r_interrupt;.}..
245a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e  /* Opcode: IdxIn
245b0 73 65 72 74 20 50 31 20 50 32 20 50 33 20 2a 20  sert P1 P2 P3 * 
245c0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
245d0 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  key=r[P2].**.** 
245e0 52 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64  Register P2 hold
245f0 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b  s an SQL index k
24600 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68  ey made using th
24610 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20  e.** MakeRecord 
24620 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54  instructions.  T
24630 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65  his opcode write
24640 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e  s that key.** in
24650 74 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e  to the index P1.
24660 20 20 44 61 74 61 20 66 6f 72 20 74 68 65 20 65    Data for the e
24670 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a  ntry is nil..**.
24680 2a 2a 20 50 33 20 69 73 20 61 20 66 6c 61 67 20  ** P3 is a flag 
24690 74 68 61 74 20 70 72 6f 76 69 64 65 73 20 61 20  that provides a 
246a0 68 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72  hint to the b-tr
246b0 65 65 20 6c 61 79 65 72 20 74 68 61 74 20 74 68  ee layer that th
246c0 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73 20  is.** insert is 
246d0 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20  likely to be an 
246e0 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  append..**.** If
246f0 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c   P5 has the OPFL
24700 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 73  AG_NCHANGE bit s
24710 65 74 2c 20 74 68 65 6e 20 74 68 65 20 63 68 61  et, then the cha
24720 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 0a 2a  nge counter is.*
24730 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79  * incremented by
24740 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
24750 6e 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41  n.  If the OPFLA
24760 47 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 69 73  G_NCHANGE bit is
24770 20 63 6c 65 61 72 2c 0a 2a 2a 20 74 68 65 6e 20   clear,.** then 
24780 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
24790 65 72 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e  er is unchanged.
247a0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73  .**.** If P5 has
247b0 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53   the OPFLAG_USES
247c0 45 45 4b 52 45 53 55 4c 54 20 62 69 74 20 73 65  EEKRESULT bit se
247d0 74 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 73  t, then the curs
247e0 6f 72 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20  or must have.** 
247f0 6a 75 73 74 20 64 6f 6e 65 20 61 20 73 65 65 6b  just done a seek
24800 20 74 6f 20 74 68 65 20 73 70 6f 74 20 77 68 65   to the spot whe
24810 72 65 20 74 68 65 20 6e 65 77 20 65 6e 74 72 79  re the new entry
24820 20 69 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74   is to be insert
24830 65 64 2e 0a 2a 2a 20 54 68 69 73 20 66 6c 61 67  ed..** This flag
24840 20 61 76 6f 69 64 73 20 64 6f 69 6e 67 20 61 6e   avoids doing an
24850 20 65 78 74 72 61 20 73 65 65 6b 2e 0a 2a 2a 0a   extra seek..**.
24860 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
24870 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66  ion only works f
24880 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54 68 65  or indices.  The
24890 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74   equivalent inst
248a0 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74  ruction.** for t
248b0 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73 65  ables is OP_Inse
248c0 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  rt..*/.case OP_S
248d0 6f 72 74 65 72 49 6e 73 65 72 74 3a 20 20 20 20  orterInsert:    
248e0 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63 61 73     /* in2 */.cas
248f0 65 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a 20  e OP_IdxInsert: 
24900 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20  {        /* in2 
24910 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
24920 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
24930 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 6e 4b  *pCrsr;.  int nK
24940 65 79 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  ey;.  const char
24950 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73 73 65 72   *zKey;..  asser
24960 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
24970 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
24980 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
24990 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
249a0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
249b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73   );.  assert( is
249c0 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70  Sorter(pC)==(pOp
249d0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72  ->opcode==OP_Sor
249e0 74 65 72 49 6e 73 65 72 74 29 20 29 3b 0a 20 20  terInsert) );.  
249f0 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
24a00 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
24a10 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn2->flags & M
24a20 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 70 43 72  EM_Blob );.  pCr
24a30 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
24a40 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ;.  if( pOp->p5 
24a50 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
24a60 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b   ) p->nChange++;
24a70 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
24a80 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
24a90 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
24aa0 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64  );.  rc = Expand
24ab0 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69 66  Blob(pIn2);.  if
24ac0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
24ad0 29 7b 0a 20 20 20 20 69 66 28 20 69 73 53 6f 72  ){.    if( isSor
24ae0 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 20  ter(pC) ){.     
24af0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
24b00 65 53 6f 72 74 65 72 57 72 69 74 65 28 64 62 2c  eSorterWrite(db,
24b10 20 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20   pC, pIn2);.    
24b20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4b 65  }else{.      nKe
24b30 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20  y = pIn2->n;.   
24b40 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e 32 2d 3e     zKey = pIn2->
24b50 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  z;.      rc = sq
24b60 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74  lite3BtreeInsert
24b70 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c 20 6e 4b  (pCrsr, zKey, nK
24b80 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c 20 70 4f  ey, "", 0, 0, pO
24b90 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20 20 20 20  p->p3, .        
24ba0 20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50    ((pOp->p5 & OP
24bb0 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
24bc0 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65  LT) ? pC->seekRe
24bd0 73 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20  sult : 0).      
24be0 20 20 20 20 29 3b 0a 20 20 20 20 20 20 61 73 73      );.      ass
24bf0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
24c00 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
24c10 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
24c20 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
24c30 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  E;.    }.  }.  b
24c40 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
24c50 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50 31  de: IdxDelete P1
24c60 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
24c70 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32  nopsis: key=r[P2
24c80 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  @P3].**.** The c
24c90 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72 65 67  ontent of P3 reg
24ca0 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20  isters starting 
24cb0 61 74 20 72 65 67 69 73 74 65 72 20 50 32 20 66  at register P2 f
24cc0 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b  orm.** an unpack
24cd0 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 54 68  ed index key. Th
24ce0 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65  is opcode remove
24cf0 73 20 74 68 61 74 20 65 6e 74 72 79 20 66 72 6f  s that entry fro
24d00 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20  m the .** index 
24d10 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72  opened by cursor
24d20 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
24d30 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56  IdxDelete: {.  V
24d40 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
24d50 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
24d60 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55  ;.  int res;.  U
24d70 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
24d80 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
24d90 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p3>0 );.  asser
24da0 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  t( pOp->p2>0 && 
24db0 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c  pOp->p2+pOp->p3<
24dc0 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
24dd0 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 61 73 73  rsor)+1 );.  ass
24de0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
24df0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
24e00 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
24e10 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
24e20 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
24e30 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
24e40 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61  pC->pCursor;.  a
24e50 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
24e60 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
24e70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 72 2e 70  ->p5==0 );.  r.p
24e80 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
24e90 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65  eyInfo;.  r.nFie
24ea0 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70  ld = (u16)pOp->p
24eb0 33 3b 0a 20 20 72 2e 66 6c 61 67 73 20 3d 20 55  3;.  r.flags = U
24ec0 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d  NPACKED_PREFIX_M
24ed0 41 54 43 48 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d  ATCH;.  r.aMem =
24ee0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
24ef0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
24f00 45 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20  EBUG.  { int i; 
24f10 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69  for(i=0; i<r.nFi
24f20 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74  eld; i++) assert
24f30 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
24f40 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65  aMem[i]) ); }.#e
24f50 6e 64 69 66 0a 20 20 72 63 20 3d 20 73 71 6c 69  ndif.  rc = sqli
24f60 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
24f70 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26 72  packed(pCrsr, &r
24f80 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  , 0, 0, &res);. 
24f90 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
24fa0 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a  OK && res==0 ){.
24fb0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
24fc0 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 72 73  BtreeDelete(pCrs
24fd0 72 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  r);.  }.  assert
24fe0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
24ff0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 2d  veto==0 );.  pC-
25000 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
25010 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72  ACHE_STALE;.  br
25020 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
25030 65 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20 50  e: IdxRowid P1 P
25040 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
25050 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64  sis: r[P2]=rowid
25060 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
25070 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  o register P2 an
25080 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
25090 73 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79  s the last entry
250a0 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61   in the record a
250b0 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20  t.** the end of 
250c0 74 68 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f  the index key po
250d0 69 6e 74 65 64 20 74 6f 20 62 79 20 63 75 72 73  inted to by curs
250e0 6f 72 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74  or P1.  This int
250f0 65 67 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a  eger should be.*
25100 2a 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  * the rowid of t
25110 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74  he table entry t
25120 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 6e 64  o which this ind
25130 65 78 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e  ex entry points.
25140 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
25150 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f   Rowid, MakeReco
25160 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  rd..*/.case OP_I
25170 64 78 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  dxRowid: {      
25180 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
25190 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
251a0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
251b0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
251c0 43 3b 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 0a  C;.  i64 rowid;.
251d0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
251e0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
251f0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
25200 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
25210 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
25220 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
25230 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
25240 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  r;.  assert( pCr
25250 73 72 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d  sr!=0 );.  pOut-
25260 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
25270 6c 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  l;.  rc = sqlite
25280 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
25290 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56  o(pC);.  if( NEV
252a0 45 52 28 72 63 29 20 29 20 67 6f 74 6f 20 61 62  ER(rc) ) goto ab
252b0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
252c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
252d0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
252e0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
252f0 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
25300 0a 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c  .  if( !pC->null
25310 52 6f 77 20 29 7b 0a 20 20 20 20 72 6f 77 69 64  Row ){.    rowid
25320 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
25330 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64  eded.  Only used
25340 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61   to silence a wa
25350 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63  rning. */.    rc
25360 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64   = sqlite3VdbeId
25370 78 52 6f 77 69 64 28 64 62 2c 20 70 43 72 73 72  xRowid(db, pCrsr
25380 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 69  , &rowid);.    i
25390 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
253a0 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
253b0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
253c0 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75  r;.    }.    pOu
253d0 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a  t->u.i = rowid;.
253e0 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
253f0 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20  = MEM_Int;.  }. 
25400 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
25410 63 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20 50  code: IdxGE P1 P
25420 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
25430 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
25440 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  @P4].**.** The P
25450 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65  4 register value
25460 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
25470 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61   P3 form an unpa
25480 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b  cked index .** k
25490 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68  ey that omits th
254a0 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72  e ROWID.  Compar
254b0 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
254c0 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64   against the ind
254d0 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69  ex .** that P1 i
254e0 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
254f0 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
25500 67 20 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74  g the ROWID on t
25510 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a  he P1 index..**.
25520 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64  ** If the P1 ind
25530 65 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61  ex entry is grea
25540 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
25550 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
25560 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20  ue.** then jump 
25570 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73  to P2.  Otherwis
25580 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  e fall through t
25590 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
255a0 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  uction..**.** If
255b0 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20   P5 is non-zero 
255c0 74 68 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  then the key val
255d0 75 65 20 69 73 20 69 6e 63 72 65 61 73 65 64 20  ue is increased 
255e0 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20 0a 2a  by an epsilon .*
255f0 2a 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 63  * prior to the c
25600 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73  omparison.  This
25610 20 6d 61 6b 65 20 74 68 65 20 6f 70 63 6f 64 65   make the opcode
25620 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78 47 54   work like IdxGT
25630 20 65 78 63 65 70 74 0a 2a 2a 20 74 68 61 74 20   except.** that 
25640 69 66 20 74 68 65 20 6b 65 79 20 66 72 6f 6d 20  if the key from 
25650 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 61  register P3 is a
25660 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b   prefix of the k
25670 65 79 20 69 6e 20 74 68 65 20 63 75 72 73 6f 72  ey in the cursor
25680 2c 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20  ,.** the result 
25690 69 73 20 66 61 6c 73 65 20 77 68 65 72 65 61 73  is false whereas
256a0 20 69 74 20 77 6f 75 6c 64 20 62 65 20 74 72 75   it would be tru
256b0 65 20 77 69 74 68 20 49 64 78 47 54 2e 0a 2a 2f  e with IdxGT..*/
256c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c  ./* Opcode: IdxL
256d0 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  T P1 P2 P3 P4 P5
256e0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
256f0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
25700 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
25710 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
25720 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
25730 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
25740 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
25750 69 74 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20  its the ROWID.  
25760 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
25770 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74   value against t
25780 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61  he index .** tha
25790 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  t P1 is currentl
257a0 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69  y pointing to, i
257b0 67 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49  gnoring the ROWI
257c0 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65  D on the P1 inde
257d0 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  x..**.** If the 
257e0 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
257f0 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  s less than the 
25800 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a  key value then j
25810 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74  ump to P2..** Ot
25820 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
25830 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
25840 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
25850 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e  .** If P5 is non
25860 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b  -zero then the k
25870 65 79 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72  ey value is incr
25880 65 61 73 65 64 20 62 79 20 61 6e 20 65 70 73 69  eased by an epsi
25890 6c 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a 20 74 6f  lon prior .** to
258a0 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
258b0 20 20 54 68 69 73 20 6d 61 6b 65 73 20 74 68 65    This makes the
258c0 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b   opcode work lik
258d0 65 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63 61 73 65  e IdxLE..*/.case
258e0 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20   OP_IdxLT:      
258f0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
25900 61 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 7b 20  ase OP_IdxGE: { 
25910 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
25920 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
25930 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  pC;.  int res;. 
25940 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
25950 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  r;..  assert( pO
25960 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
25970 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
25980 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
25990 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
259a0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
259b0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f   assert( pC->isO
259c0 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65  rdered );.  asse
259d0 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
259e0 3d 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  =0);.  assert( p
259f0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
25a00 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
25a10 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  ( pOp->p5==0 || 
25a20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20  pOp->p5==1 );.  
25a30 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
25a40 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
25a50 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20  .  r.pKeyInfo = 
25a60 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
25a70 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
25a80 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28  pOp->p4.i;.  if(
25a90 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
25aa0 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b  r.flags = UNPACK
25ab0 45 44 5f 49 4e 43 52 4b 45 59 20 7c 20 55 4e 50  ED_INCRKEY | UNP
25ac0 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54  ACKED_PREFIX_MAT
25ad0 43 48 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  CH;.  }else{.   
25ae0 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43   r.flags = UNPAC
25af0 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48  KED_PREFIX_MATCH
25b00 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d  ;.  }.  r.aMem =
25b10 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
25b20 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
25b30 45 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20  EBUG.  { int i; 
25b40 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69  for(i=0; i<r.nFi
25b50 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74  eld; i++) assert
25b60 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
25b70 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65  aMem[i]) ); }.#e
25b80 6e 64 69 66 0a 20 20 72 65 73 20 3d 20 30 3b 20  ndif.  res = 0; 
25b90 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
25ba0 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69   Only used to si
25bb0 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e  lence a warning.
25bc0 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
25bd0 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70  e3VdbeIdxKeyComp
25be0 61 72 65 28 70 43 2c 20 26 72 2c 20 26 72 65 73  are(pC, &r, &res
25bf0 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  );.  if( pOp->op
25c00 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29  code==OP_IdxLT )
25c10 7b 0a 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73  {.    res = -res
25c20 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
25c30 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
25c40 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 29 3b 0a  de==OP_IdxGE );.
25c50 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a 20      res++;.  }. 
25c60 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a 20 20   if( res>0 ){.  
25c70 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
25c80 20 31 20 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b   1 ;.  }.  break
25c90 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
25ca0 44 65 73 74 72 6f 79 20 50 31 20 50 32 20 50 33  Destroy P1 P2 P3
25cb0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74   * *.**.** Delet
25cc0 65 20 61 6e 20 65 6e 74 69 72 65 20 64 61 74 61  e an entire data
25cd0 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
25ce0 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70  dex whose root p
25cf0 61 67 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  age in the datab
25d00 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67  ase.** file is g
25d10 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a  iven by P1..**.*
25d20 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e  * The table bein
25d30 67 20 64 65 73 74 72 6f 79 65 64 20 69 73 20 69  g destroyed is i
25d40 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
25d50 61 73 65 20 66 69 6c 65 20 69 66 20 50 33 3d 3d  ase file if P3==
25d60 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20  0.  If.** P3==1 
25d70 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74  then the table t
25d80 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e  o be clear is in
25d90 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
25da0 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20  atabase file.** 
25db0 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
25dc0 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65  store tables cre
25dd0 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45  ate using CREATE
25de0 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45   TEMPORARY TABLE
25df0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56  ..**.** If AUTOV
25e00 41 43 55 55 4d 20 69 73 20 65 6e 61 62 6c 65 64  ACUUM is enabled
25e10 20 74 68 65 6e 20 69 74 20 69 73 20 70 6f 73 73   then it is poss
25e20 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65  ible that anothe
25e30 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d  r root page.** m
25e40 69 67 68 74 20 62 65 20 6d 6f 76 65 64 20 69 6e  ight be moved in
25e50 74 6f 20 74 68 65 20 6e 65 77 6c 79 20 64 65 6c  to the newly del
25e60 65 74 65 64 20 72 6f 6f 74 20 70 61 67 65 20 69  eted root page i
25e70 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
25e80 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65  all.** root page
25e90 73 20 63 6f 6e 74 69 67 75 6f 75 73 20 61 74 20  s contiguous at 
25ea0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
25eb0 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
25ec0 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61  The former.** va
25ed0 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 6f 74 20  lue of the root 
25ee0 70 61 67 65 20 74 68 61 74 20 6d 6f 76 65 64 20  page that moved 
25ef0 2d 20 69 74 73 20 76 61 6c 75 65 20 62 65 66 6f  - its value befo
25f00 72 65 20 74 68 65 20 6d 6f 76 65 20 6f 63 63 75  re the move occu
25f10 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f  rred -.** is sto
25f20 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
25f30 50 32 2e 20 20 49 66 20 6e 6f 20 70 61 67 65 20  P2.  If no page 
25f40 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73  .** movement was
25f50 20 72 65 71 75 69 72 65 64 20 28 62 65 63 61 75   required (becau
25f60 73 65 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  se the table bei
25f70 6e 67 20 64 72 6f 70 70 65 64 20 77 61 73 20 61  ng dropped was a
25f80 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c  lready .** the l
25f90 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65 20 64  ast one in the d
25fa0 61 74 61 62 61 73 65 29 20 74 68 65 6e 20 61 20  atabase) then a 
25fb0 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69  zero is stored i
25fc0 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
25fd0 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20  * If AUTOVACUUM 
25fe0 69 73 20 64 69 73 61 62 6c 65 64 20 74 68 65 6e  is disabled then
25ff0 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65   a zero is store
26000 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
26010 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
26020 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20  : Clear.*/.case 
26030 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20 20  OP_Destroy: {   
26040 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
26050 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d  ease */.  int iM
26060 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 43 6e 74  oved;.  int iCnt
26070 3b 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b  ;.  Vdbe *pVdbe;
26080 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20 61  .  int iDb;..  a
26090 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
260a0 6c 79 3d 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66  ly==0 );.#ifndef
260b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
260c0 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 43 6e 74  TUALTABLE.  iCnt
260d0 20 3d 20 30 3b 0a 20 20 66 6f 72 28 70 56 64 62   = 0;.  for(pVdb
260e0 65 3d 64 62 2d 3e 70 56 64 62 65 3b 20 70 56 64  e=db->pVdbe; pVd
260f0 62 65 3b 20 70 56 64 62 65 20 3d 20 70 56 64 62  be; pVdbe = pVdb
26100 65 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 69  e->pNext){.    i
26110 66 28 20 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d  f( pVdbe->magic=
26120 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20  =VDBE_MAGIC_RUN 
26130 26 26 20 70 56 64 62 65 2d 3e 62 49 73 52 65 61  && pVdbe->bIsRea
26140 64 65 72 20 0a 20 20 20 20 20 26 26 20 70 56 64  der .     && pVd
26150 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64  be->inVtabMethod
26160 3c 32 20 26 26 20 70 56 64 62 65 2d 3e 70 63 3e  <2 && pVdbe->pc>
26170 3d 30 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  =0 .    ){.     
26180 20 69 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20   iCnt++;.    }. 
26190 20 7d 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74 20   }.#else.  iCnt 
261a0 3d 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3b  = db->nVdbeRead;
261b0 0a 23 65 6e 64 69 66 0a 20 20 70 4f 75 74 2d 3e  .#endif.  pOut->
261c0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
261d0 3b 0a 20 20 69 66 28 20 69 43 6e 74 3e 31 20 29  ;.  if( iCnt>1 )
261e0 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
261f0 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d  E_LOCKED;.    p-
26200 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f  >errorAction = O
26210 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65  E_Abort;.  }else
26220 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d  {.    iDb = pOp-
26230 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28  >p3;.    assert(
26240 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20   iCnt==1 );.    
26250 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
26260 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61  eMask & (((yDbMa
26270 73 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d 30 20  sk)1)<<iDb))!=0 
26280 29 3b 0a 20 20 20 20 69 4d 6f 76 65 64 20 3d 20  );.    iMoved = 
26290 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  0;  /* Not neede
262a0 64 2e 20 20 4f 6e 6c 79 20 74 6f 20 73 69 6c 65  d.  Only to sile
262b0 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a  nce a warning. *
262c0 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  /.    rc = sqlit
262d0 65 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65  e3BtreeDropTable
262e0 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
262f0 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f  t, pOp->p1, &iMo
26300 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  ved);.    pOut->
26310 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
26320 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
26330 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66   iMoved;.#ifndef
26340 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
26350 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20  OVACUUM.    if( 
26360 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
26370 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20   iMoved!=0 ){.  
26380 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50      sqlite3RootP
26390 61 67 65 4d 6f 76 65 64 28 64 62 2c 20 69 44 62  ageMoved(db, iDb
263a0 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70  , iMoved, pOp->p
263b0 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c  1);.      /* All
263c0 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70 65 72   OP_Destroy oper
263d0 61 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20  ations occur on 
263e0 74 68 65 20 73 61 6d 65 20 62 74 72 65 65 20 2a  the same btree *
263f0 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
26400 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
26410 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53 63  lt==0 || resetSc
26420 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62  hemaOnFault==iDb
26430 2b 31 20 29 3b 0a 20 20 20 20 20 20 72 65 73 65  +1 );.      rese
26440 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d  tSchemaOnFault =
26450 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65   iDb+1;.    }.#e
26460 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ndif.  }.  break
26470 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
26480 43 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a  Clear P1 P2 P3.*
26490 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20  *.** Delete all 
264a0 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20  contents of the 
264b0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
264c0 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
264d0 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68  ot page.** in th
264e0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
264f0 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20  is given by P1. 
26500 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73   But, unlike Des
26510 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20  troy, do not.** 
26520 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65  remove the table
26530 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74   or index from t
26540 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
26550 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c  ..**.** The tabl
26560 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73  e being clear is
26570 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
26580 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 32  abase file if P2
26590 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d  ==0.  If.** P2==
265a0 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  1 then the table
265b0 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20   to be clear is 
265c0 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  in the auxiliary
265d0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
265e0 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  * that is used t
265f0 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63  o store tables c
26600 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41  reate using CREA
26610 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42  TE TEMPORARY TAB
26620 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  LE..**.** If the
26630 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e   P3 value is non
26640 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20  -zero, then the 
26650 74 61 62 6c 65 20 72 65 66 65 72 72 65 64 20 74  table referred t
26660 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20  o must be an.** 
26670 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e  intkey table (an
26680 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20   SQL table, not 
26690 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68  an index). In th
266a0 69 73 20 63 61 73 65 20 74 68 65 20 72 6f 77 20  is case the row 
266b0 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74  change .** count
266c0 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
266d0 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  by the number of
266e0 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62   rows in the tab
266f0 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64  le being cleared
26700 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67  . .** If P3 is g
26710 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f  reater than zero
26720 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65  , then the value
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 33 20 69 73 0a 2a 2a 20 61 6c 73  ter P3 is.** als
26750 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79  o incremented by
26760 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
26770 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ows in the table
26780 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a   being cleared..
26790 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
267a0 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20  Destroy.*/.case 
267b0 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e  OP_Clear: {.  in
267c0 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20 6e  t nChange;. .  n
267d0 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73  Change = 0;.  as
267e0 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
267f0 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  y==0 );.  assert
26800 28 20 70 4f 70 2d 3e 70 31 21 3d 31 20 29 3b 0a  ( pOp->p1!=1 );.
26810 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
26820 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62  reeMask & (((yDb
26830 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 32  Mask)1)<<pOp->p2
26840 29 29 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  ))!=0 );.  rc = 
26850 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61  sqlite3BtreeClea
26860 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64 62  rTable(.      db
26870 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70  ->aDb[pOp->p2].p
26880 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f  Bt, pOp->p1, (pO
26890 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67 65  p->p3 ? &nChange
268a0 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66 28   : 0).  );.  if(
268b0 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20   pOp->p3 ){.    
268c0 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43  p->nChange += nC
268d0 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20 70  hange;.    if( p
268e0 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20  Op->p3>0 ){.    
268f0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
26900 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
26910 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d 65  p3]) );.      me
26920 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
26930 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  , &aMem[pOp->p3]
26940 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f  );.      aMem[pO
26950 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43  p->p3].u.i += nC
26960 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d  hange;.    }.  }
26970 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
26980 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 54 61  Opcode: CreateTa
26990 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ble P1 P2 * * *.
269a0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
269b0 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a  2]=root iDb=P1.*
269c0 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20  *.** Allocate a 
269d0 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65  new table in the
269e0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
269f0 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20  ile if P1==0 or 
26a00 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69  in the.** auxili
26a10 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
26a20 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e  e if P1==1 or in
26a30 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
26a40 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31  abase if.** P1>1
26a50 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f  .  Write the roo
26a60 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  t page number of
26a70 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69   the new table i
26a80 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  nto.** register 
26a90 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66  P2.**.** The dif
26aa0 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
26ab0 61 20 74 61 62 6c 65 20 61 6e 64 20 61 6e 20 69  a table and an i
26ac0 6e 64 65 78 20 69 73 20 74 68 69 73 3a 20 20 41  ndex is this:  A
26ad0 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68   table must.** h
26ae0 61 76 65 20 61 20 34 2d 62 79 74 65 20 69 6e 74  ave a 4-byte int
26af0 65 67 65 72 20 6b 65 79 20 61 6e 64 20 63 61 6e  eger key and can
26b00 20 68 61 76 65 20 61 72 62 69 74 72 61 72 79 20   have arbitrary 
26b10 64 61 74 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a  data.  An index.
26b20 2a 2a 20 68 61 73 20 61 6e 20 61 72 62 69 74 72  ** has an arbitr
26b30 61 72 79 20 6b 65 79 20 62 75 74 20 6e 6f 20 64  ary key but no d
26b40 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ata..**.** See a
26b50 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e 64 65 78  lso: CreateIndex
26b60 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .*/./* Opcode: C
26b70 72 65 61 74 65 49 6e 64 65 78 20 50 31 20 50 32  reateIndex P1 P2
26b80 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
26b90 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69  is: r[P2]=root i
26ba0 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f  Db=P1.**.** Allo
26bb0 63 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65 78  cate a new index
26bc0 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
26bd0 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
26be0 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a  ==0 or in the.**
26bf0 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
26c00 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
26c10 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63  1 or in an attac
26c20 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a  hed database if.
26c30 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20  ** P1>1.  Write 
26c40 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  the root page nu
26c50 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20  mber of the new 
26c60 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65  table into.** re
26c70 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
26c80 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69   See documentati
26c90 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54  on on OP_CreateT
26ca0 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f  able for additio
26cb0 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
26cc0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61  .*/.case OP_Crea
26cd0 74 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20 20  teIndex:        
26ce0 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
26cf0 65 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65 20 4f  elease */.case O
26d00 50 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20 7b  P_CreateTable: {
26d10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
26d20 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
26d30 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e    int pgno;.  in
26d40 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70  t flags;.  Db *p
26d50 44 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d 20 30 3b  Db;..  pgno = 0;
26d60 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
26d70 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
26d80 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
26d90 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
26da0 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b  ask & (((yDbMask
26db0 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d  )1)<<pOp->p1))!=
26dc0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
26dd0 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
26de0 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
26df0 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  b[pOp->p1];.  as
26e00 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d  sert( pDb->pBt!=
26e10 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  0 );.  if( pOp->
26e20 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74  opcode==OP_Creat
26e30 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a  eTable ){.    /*
26e40 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49   flags = BTREE_I
26e50 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c  NTKEY; */.    fl
26e60 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b  ags = BTREE_INTK
26e70 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  EY;.  }else{.   
26e80 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 42   flags = BTREE_B
26e90 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63  LOBKEY;.  }.  rc
26ea0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
26eb0 72 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e  reateTable(pDb->
26ec0 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67  pBt, &pgno, flag
26ed0 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  s);.  pOut->u.i 
26ee0 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b  = pgno;.  break;
26ef0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
26f00 61 72 73 65 53 63 68 65 6d 61 20 50 31 20 2a 20  arseSchema P1 * 
26f10 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61  * P4 *.**.** Rea
26f20 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20  d and parse all 
26f30 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65  entries from the
26f40 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74   SQLITE_MASTER t
26f50 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65  able of database
26f60 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63   P1.** that matc
26f70 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  h the WHERE clau
26f80 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68  se P4. .**.** Th
26f90 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
26fa0 73 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20  s the parser to 
26fb0 63 72 65 61 74 65 20 61 20 6e 65 77 20 76 69 72  create a new vir
26fc0 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a  tual machine,.**
26fd0 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e   then runs the n
26fe0 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ew virtual machi
26ff0 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75 73 20  ne.  It is thus 
27000 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63  a re-entrant opc
27010 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
27020 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20  ParseSchema: {. 
27030 20 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73   int iDb;.  cons
27040 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b  t char *zMaster;
27050 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20  .  char *zSql;. 
27060 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61   InitData initDa
27070 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72  ta;..  /* Any pr
27080 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
27090 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20 74 68   that invokes th
270a0 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68  is opcode will h
270b0 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a  old mutexes.  **
270c0 20 6f 6e 20 65 76 65 72 79 20 62 74 72 65 65 2e   on every btree.
270d0 20 20 54 68 69 73 20 69 73 20 61 20 70 72 65 72    This is a prer
270e0 65 71 75 69 73 69 74 65 20 66 6f 72 20 69 6e 76  equisite for inv
270f0 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69  oking .  ** sqli
27100 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  te3InitCallback(
27110 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  )..  */.#ifdef S
27120 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f  QLITE_DEBUG.  fo
27130 72 28 69 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d  r(iDb=0; iDb<db-
27140 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20  >nDb; iDb++){.  
27150 20 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d 31    assert( iDb==1
27160 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65   || sqlite3Btree
27170 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61  HoldsMutex(db->a
27180 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a  Db[iDb].pBt) );.
27190 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44    }.#endif..  iD
271a0 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61  b = pOp->p1;.  a
271b0 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
271c0 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
271d0 20 20 61 73 73 65 72 74 28 20 44 62 48 61 73 50    assert( DbHasP
271e0 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c  roperty(db, iDb,
271f0 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
27200 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64 20 74  ) );.  /* Used t
27210 6f 20 62 65 20 61 20 63 6f 6e 64 69 74 69 6f 6e  o be a condition
27220 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61 73  al */ {.    zMas
27230 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54 41 42  ter = SCHEMA_TAB
27240 4c 45 28 69 44 62 29 3b 0a 20 20 20 20 69 6e 69  LE(iDb);.    ini
27250 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20  tData.db = db;. 
27260 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20     initData.iDb 
27270 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69  = pOp->p1;.    i
27280 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67  nitData.pzErrMsg
27290 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a   = &p->zErrMsg;.
272a0 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74      zSql = sqlit
272b0 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20  e3MPrintf(db,.  
272c0 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d       "SELECT nam
272d0 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c  e, rootpage, sql
272e0 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48   FROM '%q'.%s WH
272f0 45 52 45 20 25 73 20 4f 52 44 45 52 20 42 59 20  ERE %s ORDER BY 
27300 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64  rowid",.       d
27310 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d  b->aDb[iDb].zNam
27320 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d  e, zMaster, pOp-
27330 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20  >p4.z);.    if( 
27340 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20  zSql==0 ){.     
27350 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
27360 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  EM;.    }else{. 
27370 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
27380 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b  >init.busy==0 );
27390 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e  .      db->init.
273a0 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20  busy = 1;.      
273b0 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51  initData.rc = SQ
273c0 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61  LITE_OK;.      a
273d0 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c  ssert( !db->mall
273e0 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20  ocFailed );.    
273f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65    rc = sqlite3_e
27400 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71  xec(db, zSql, sq
27410 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
27420 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29  k, &initData, 0)
27430 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
27440 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d  SQLITE_OK ) rc =
27450 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20   initData.rc;.  
27460 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
27470 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20  e(db, zSql);.   
27480 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79     db->init.busy
27490 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 0;.    }.  }.
274a0 20 20 69 66 28 20 72 63 20 29 20 73 71 6c 69 74    if( rc ) sqlit
274b0 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61  e3ResetAllSchema
274c0 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62  sOfConnection(db
274d0 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
274e0 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
274f0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
27500 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a  }.  break;  .}..
27510 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
27520 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45  ITE_OMIT_ANALYZE
27530 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61  )./* Opcode: Loa
27540 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a  dAnalysis P1 * *
27550 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20   * *.**.** Read 
27560 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31  the sqlite_stat1
27570 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62   table for datab
27580 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20  ase P1 and load 
27590 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f  the content.** o
275a0 66 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74  f that table int
275b0 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69  o the internal i
275c0 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e  ndex hash table.
275d0 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
275e0 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69  e.** the analysi
275f0 73 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65  s to be used whe
27600 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20  n preparing all 
27610 73 75 62 73 65 71 75 65 6e 74 20 71 75 65 72 69  subsequent queri
27620 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  es..*/.case OP_L
27630 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20  oadAnalysis: {. 
27640 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
27650 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
27660 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d  b->nDb );.  rc =
27670 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73   sqlite3Analysis
27680 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31  Load(db, pOp->p1
27690 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a  );.  break;  .}.
276a0 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e  #endif /* !defin
276b0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
276c0 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f  NALYZE) */../* O
276d0 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65  pcode: DropTable
276e0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
276f0 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
27700 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
27710 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
27720 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
27730 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61  .** the table na
27740 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
27750 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
27760 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74  called after a t
27770 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70  able.** is dropp
27780 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ed in order to k
27790 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  eep the internal
277a0 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
277b0 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  of the.** schema
277c0 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68   consistent with
277d0 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b   what is on disk
277e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f  ..*/.case OP_Dro
277f0 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69  pTable: {.  sqli
27800 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
27810 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d  teTable(db, pOp-
27820 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
27830 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
27840 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65  Opcode: DropInde
27850 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  x P1 * * P4 *.**
27860 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
27870 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
27880 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
27890 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
278a0 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e  e.** the index n
278b0 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
278c0 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
278d0 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e   called after an
278e0 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f   index.** is dro
278f0 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  pped in order to
27900 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e   keep the intern
27910 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
27920 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
27930 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
27940 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
27950 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
27960 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71  ropIndex: {.  sq
27970 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
27980 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f  leteIndex(db, pO
27990 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
279a0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
279b0 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72  * Opcode: DropTr
279c0 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20  igger P1 * * P4 
279d0 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
279e0 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
279f0 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
27a00 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
27a10 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69  cribe.** the tri
27a20 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e  gger named P4 in
27a30 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54   database P1.  T
27a40 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66  his is called af
27a50 74 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a  ter a trigger.**
27a60 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f   is dropped in o
27a70 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65  rder to keep the
27a80 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73   internal repres
27a90 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
27aa0 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73  ** schema consis
27ab0 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69  tent with what i
27ac0 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61  s on disk..*/.ca
27ad0 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65  se OP_DropTrigge
27ae0 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e  r: {.  sqlite3Un
27af0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
27b00 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31  gger(db, pOp->p1
27b10 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
27b20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64  break;.}...#ifnd
27b30 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49  ef SQLITE_OMIT_I
27b40 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f  NTEGRITY_CHECK./
27b50 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72  * Opcode: Integr
27b60 69 74 79 43 6b 20 50 31 20 50 32 20 50 33 20 2a  ityCk P1 P2 P3 *
27b70 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20   P5.**.** Do an 
27b80 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20  analysis of the 
27b90 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64  currently open d
27ba0 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20  atabase.  Store 
27bb0 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  in.** register P
27bc0 31 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e  1 the text of an
27bd0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64   error message d
27be0 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72  escribing any pr
27bf0 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f  oblems..** If no
27c00 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f   problems are fo
27c10 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c  und, store a NUL
27c20 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  L in register P1
27c30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69  ..**.** The regi
27c40 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73  ster P3 contains
27c50 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d   the maximum num
27c60 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65  ber of allowed e
27c70 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73  rrors..** At mos
27c80 74 20 72 65 67 28 50 33 29 20 65 72 72 6f 72 73  t reg(P3) errors
27c90 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65   will be reporte
27ca0 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  d..** In other w
27cb0 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73  ords, the analys
27cc0 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e  is stops as soon
27cd0 20 61 73 20 72 65 67 28 50 31 29 20 65 72 72 6f   as reg(P1) erro
27ce0 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e  rs are .** seen.
27cf0 20 20 52 65 67 28 50 31 29 20 69 73 20 75 70 64    Reg(P1) is upd
27d00 61 74 65 64 20 77 69 74 68 20 74 68 65 20 6e 75  ated with the nu
27d10 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72  mber of errors r
27d20 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  emaining..**.** 
27d30 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  The root page nu
27d40 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62  mbers of all tab
27d50 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  les in the datab
27d60 61 73 65 20 61 72 65 20 69 6e 74 65 67 65 72 0a  ase are integer.
27d70 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  ** stored in reg
27d80 28 50 31 29 2c 20 72 65 67 28 50 31 2b 31 29 2c  (P1), reg(P1+1),
27d90 20 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e   reg(P1+2), ....
27da0 20 20 54 68 65 72 65 20 61 72 65 20 50 32 20 74    There are P2 t
27db0 61 62 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a  ables.** total..
27dc0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
27dd0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65  ot zero, the che
27de0 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68  ck is done on th
27df0 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
27e00 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f  base.** file, no
27e10 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  t the main datab
27e20 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
27e30 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  This opcode is u
27e40 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
27e50 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63   the integrity_c
27e60 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a  heck pragma..*/.
27e70 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74  case OP_Integrit
27e80 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f  yCk: {.  int nRo
27e90 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ot;      /* Numb
27ea0 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20  er of tables to 
27eb0 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20  check.  (Number 
27ec0 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20  of root pages.) 
27ed0 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b  */.  int *aRoot;
27ee0 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
27ef0 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72   rootpage number
27f00 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20  s for tables to 
27f10 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20  be checked */.  
27f20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20  int j;          
27f30 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20  /* Loop counter 
27f40 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
27f50 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
27f60 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65  f errors reporte
27f70 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20  d */.  char *z; 
27f80 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
27f90 66 20 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f  f the error repo
27fa0 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45  rt */.  Mem *pnE
27fb0 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73  rr;     /* Regis
27fc0 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63  ter keeping trac
27fd0 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61  k of errors rema
27fe0 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61 73 73 65  ining */..  asse
27ff0 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
28000 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f   );.  nRoot = pO
28010 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
28020 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 52   nRoot>0 );.  aR
28030 6f 6f 74 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  oot = sqlite3DbM
28040 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a  allocRaw(db, siz
28050 65 6f 66 28 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b  eof(int)*(nRoot+
28060 31 29 20 29 3b 0a 20 20 69 66 28 20 61 52 6f 6f  1) );.  if( aRoo
28070 74 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  t==0 ) goto no_m
28080 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  em;.  assert( pO
28090 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
280a0 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
280b0 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 6e  nCursor) );.  pn
280c0 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Err = &aMem[pOp-
280d0 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
280e0 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20  (pnErr->flags & 
280f0 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
28100 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d   assert( (pnErr-
28110 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74  >flags & (MEM_St
28120 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20  r|MEM_Blob))==0 
28130 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
28140 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f  m[pOp->p1];.  fo
28150 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20  r(j=0; j<nRoot; 
28160 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b  j++){.    aRoot[
28170 6a 5d 20 3d 20 28 69 6e 74 29 73 71 6c 69 74 65  j] = (int)sqlite
28180 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 26 70  3VdbeIntValue(&p
28190 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61  In1[j]);.  }.  a
281a0 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61  Root[j] = 0;.  a
281b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64  ssert( pOp->p5<d
281c0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
281d0 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
281e0 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31  k & (((yDbMask)1
281f0 29 3c 3c 70 4f 70 2d 3e 70 35 29 29 21 3d 30 20  )<<pOp->p5))!=0 
28200 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  );.  z = sqlite3
28210 42 74 72 65 65 49 6e 74 65 67 72 69 74 79 43 68  BtreeIntegrityCh
28220 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  eck(db->aDb[pOp-
28230 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c  >p5].pBt, aRoot,
28240 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20   nRoot,.        
28250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28260 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e           (int)pn
28270 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29  Err->u.i, &nErr)
28280 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
28290 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20  e(db, aRoot);.  
282a0 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45  pnErr->u.i -= nE
282b0 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  rr;.  sqlite3Vdb
282c0 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31  eMemSetNull(pIn1
282d0 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30  );.  if( nErr==0
282e0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
282f0 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20  z==0 );.  }else 
28300 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20  if( z==0 ){.    
28310 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
28320 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
28330 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
28340 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49  In1, z, -1, SQLI
28350 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33  TE_UTF8, sqlite3
28360 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50  _free);.  }.  UP
28370 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
28380 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74  E(pIn1);.  sqlit
28390 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
283a0 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64  ding(pIn1, encod
283b0 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ing);.  break;.}
283c0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
283d0 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
283e0 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70  _CHECK */../* Op
283f0 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20  code: RowSetAdd 
28400 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
28410 79 6e 6f 70 73 69 73 3a 20 20 72 6f 77 73 65 74  ynopsis:  rowset
28420 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  (P1)=r[P2].**.**
28430 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65   Insert the inte
28440 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62  ger value held b
28450 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e  y register P2 in
28460 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64  to a boolean ind
28470 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65  ex.** held in re
28480 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  gister P1..**.**
28490 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
284a0 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74  ils if P2 is not
284b0 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a   an integer..*/.
284c0 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64  case OP_RowSetAd
284d0 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e  d: {       /* in
284e0 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31  1, in2 */.  pIn1
284f0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
28500 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
28510 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
28520 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61  sert( (pIn2->fla
28530 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
28540 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   );.  if( (pIn1-
28550 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
28560 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  Set)==0 ){.    s
28570 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
28580 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20  RowSet(pIn1);.  
28590 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
285a0 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
285b0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
285c0 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  m;.  }.  sqlite3
285d0 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e  RowSetInsert(pIn
285e0 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49  1->u.pRowSet, pI
285f0 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61  n2->u.i);.  brea
28600 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
28610 20 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50   RowSetRead P1 P
28620 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
28630 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 6f 77  psis:  r[P3]=row
28640 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78  set(P1).**.** Ex
28650 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65  tract the smalle
28660 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f  st value from bo
28670 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61  olean index P1 a
28680 6e 64 20 70 75 74 20 74 68 61 74 20 76 61 6c 75  nd put that valu
28690 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
286a0 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62  er P3.  Or, if b
286b0 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20  oolean index P1 
286c0 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70  is initially emp
286d0 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20  ty, leave P3.** 
286e0 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75  unchanged and ju
286f0 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
28700 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
28710 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20  _RowSetRead: {  
28720 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
28730 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34  1, out3 */.  i64
28740 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20   val;..  pIn1 = 
28750 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
28760 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
28770 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
28780 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74  ==0 .   || sqlit
28790 65 33 52 6f 77 53 65 74 4e 65 78 74 28 70 49 6e  e3RowSetNext(pIn
287a0 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76  1->u.pRowSet, &v
287b0 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20  al)==0.  ){.    
287c0 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69  /* The boolean i
287d0 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f  ndex is empty */
287e0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
287f0 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29  MemSetNull(pIn1)
28800 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  ;.    pc = pOp->
28810 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  p2 - 1;.  }else{
28820 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20  .    /* A value 
28830 77 61 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20  was pulled from 
28840 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20  the index */.   
28850 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
28860 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f  etInt64(&aMem[pO
28870 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20  p->p3], val);.  
28880 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66  }.  goto check_f
28890 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a  or_interrupt;.}.
288a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
288b0 65 74 54 65 73 74 20 50 31 20 50 32 20 50 33 20  etTest P1 P2 P3 
288c0 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P4.** Synopsis: 
288d0 69 66 20 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73  if r[P3] in rows
288e0 65 74 28 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a  et(P1) goto P2.*
288f0 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33  *.** Register P3
28900 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 68   is assumed to h
28910 6f 6c 64 20 61 20 36 34 2d 62 69 74 20 69 6e 74  old a 64-bit int
28920 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20 72  eger value. If r
28930 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f  egister P1.** co
28940 6e 74 61 69 6e 73 20 61 20 52 6f 77 53 65 74 20  ntains a RowSet 
28950 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 61 74 20  object and that 
28960 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 63 6f  RowSet object co
28970 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61  ntains.** the va
28980 6c 75 65 20 68 65 6c 64 20 69 6e 20 50 33 2c 20  lue held in P3, 
28990 6a 75 6d 70 20 74 6f 20 72 65 67 69 73 74 65 72  jump to register
289a0 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
289b0 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e  insert the.** in
289c0 74 65 67 65 72 20 69 6e 20 50 33 20 69 6e 74 6f  teger in P3 into
289d0 20 74 68 65 20 52 6f 77 53 65 74 20 61 6e 64 20   the RowSet and 
289e0 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74  continue on to t
289f0 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64  he.** next opcod
28a00 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77  e..**.** The Row
28a10 53 65 74 20 6f 62 6a 65 63 74 20 69 73 20 6f 70  Set object is op
28a20 74 69 6d 69 7a 65 64 20 66 6f 72 20 74 68 65 20  timized for the 
28a30 63 61 73 65 20 77 68 65 72 65 20 73 75 63 63 65  case where succe
28a40 73 73 69 76 65 20 73 65 74 73 0a 2a 2a 20 6f 66  ssive sets.** of
28a50 20 69 6e 74 65 67 65 72 73 2c 20 77 68 65 72 65   integers, where
28a60 20 65 61 63 68 20 73 65 74 20 63 6f 6e 74 61 69   each set contai
28a70 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61 74 65 73  ns no duplicates
28a80 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a 20 6f 66  . Each set.** of
28a90 20 76 61 6c 75 65 73 20 69 73 20 69 64 65 6e 74   values is ident
28aa0 69 66 69 65 64 20 62 79 20 61 20 75 6e 69 71 75  ified by a uniqu
28ab0 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20  e P4 value. The 
28ac0 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73  first set.** mus
28ad0 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68  t have P4==0, th
28ae0 65 20 66 69 6e 61 6c 20 73 65 74 20 50 34 3d 2d  e final set P4=-
28af0 31 2e 20 20 50 34 20 6d 75 73 74 20 62 65 20 65  1.  P4 must be e
28b00 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e  ither -1 or.** n
28b10 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20 46 6f  on-negative.  Fo
28b20 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76  r non-negative v
28b30 61 6c 75 65 73 20 6f 66 20 50 34 20 6f 6e 6c 79  alues of P4 only
28b40 20 74 68 65 20 6c 6f 77 65 72 20 34 0a 2a 2a 20   the lower 4.** 
28b50 62 69 74 73 20 61 72 65 20 73 69 67 6e 69 66 69  bits are signifi
28b60 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  cant..**.** This
28b70 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61   allows optimiza
28b80 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e 20  tions: (a) when 
28b90 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20 6e  P4==0 there is n
28ba0 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a 2a  o need to test.*
28bb0 2a 20 74 68 65 20 72 6f 77 73 65 74 20 6f 62 6a  * the rowset obj
28bc0 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20 69  ect for P3, as i
28bd0 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20  t is guaranteed 
28be0 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69  not to contain i
28bf0 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20 50  t,.** (b) when P
28c00 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20 6e  4==-1 there is n
28c10 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72 74  o need to insert
28c20 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20 69   the value, as i
28c30 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20  t will.** never 
28c40 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20 61  be tested for, a
28c50 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20 76 61  nd (c) when a va
28c60 6c 75 65 20 74 68 61 74 20 69 73 20 70 61 72 74  lue that is part
28c70 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a 20   of set X is.** 
28c80 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65 20  inserted, there 
28c90 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65  is no need to se
28ca0 61 72 63 68 20 74 6f 20 73 65 65 20 69 66 20 74  arch to see if t
28cb0 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77 61  he same value wa
28cc0 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20  s.** previously 
28cd0 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74  inserted as part
28ce0 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79 20   of set X (only 
28cf0 69 66 20 69 74 20 77 61 73 20 70 72 65 76 69 6f  if it was previo
28d00 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64  usly.** inserted
28d10 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d 65   as part of some
28d20 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a   other set)..*/.
28d30 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54 65  case OP_RowSetTe
28d40 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  st: {           
28d50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
28d60 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20  p, in1, in3 */. 
28d70 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e 74   int iSet;.  int
28d80 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31   exists;..  pIn1
28d90 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
28da0 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  ];.  pIn3 = &aMe
28db0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53  m[pOp->p3];.  iS
28dc0 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  et = pOp->p4.i;.
28dd0 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
28de0 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
28df0 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20  ..  /* If there 
28e00 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65  is anything othe
28e10 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74 20  r than a rowset 
28e20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79  object in memory
28e30 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64   cell P1,.  ** d
28e40 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e 64  elete it now and
28e50 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20 77   initialize P1 w
28e60 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f 77  ith an empty row
28e70 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28  set.  */.  if( (
28e80 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
28e90 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a  M_RowSet)==0 ){.
28ea0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
28eb0 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31  emSetRowSet(pIn1
28ec0 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31  );.    if( (pIn1
28ed0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
28ee0 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20  wSet)==0 ) goto 
28ef0 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61  no_mem;.  }..  a
28f00 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
28f10 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
28f20 20 20 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d    assert( iSet==
28f30 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b  -1 || iSet>=0 );
28f40 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20  .  if( iSet ){. 
28f50 20 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69     exists = sqli
28f60 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 70 49  te3RowSetTest(pI
28f70 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 0a  n1->u.pRowSet, .
28f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
28fa0 75 38 29 28 69 53 65 74 3e 3d 30 20 3f 20 69 53  u8)(iSet>=0 ? iS
28fb0 65 74 20 26 20 30 78 66 20 3a 20 30 78 66 66 29  et & 0xf : 0xff)
28fc0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
28fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28fe0 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20   pIn3->u.i);.   
28ff0 20 69 66 28 20 65 78 69 73 74 73 20 29 7b 0a 20   if( exists ){. 
29000 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
29010 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 62 72 65  2 - 1;.      bre
29020 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ak;.    }.  }.  
29030 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a 20  if( iSet>=0 ){. 
29040 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74     sqlite3RowSet
29050 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70  Insert(pIn1->u.p
29060 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e  RowSet, pIn3->u.
29070 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  i);.  }.  break;
29080 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  .}...#ifndef SQL
29090 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
290a0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 6f  ../* Opcode: Pro
290b0 67 72 61 6d 20 50 31 20 50 32 20 50 33 20 50 34  gram P1 P2 P3 P4
290c0 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74   P5.**.** Execut
290d0 65 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  e the trigger pr
290e0 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61 73 20  ogram passed as 
290f0 50 34 20 28 74 79 70 65 20 50 34 5f 53 55 42 50  P4 (type P4_SUBP
29100 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20  ROGRAM). .**.** 
29110 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P1 contains the 
29120 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 6d  address of the m
29130 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20  emory cell that 
29140 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72  contains the fir
29150 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65  st memory .** ce
29160 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  ll in an array o
29170 66 20 76 61 6c 75 65 73 20 75 73 65 64 20 61 73  f values used as
29180 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68   arguments to th
29190 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 50  e sub-program. P
291a0 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74  2 .** contains t
291b0 68 65 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75  he address to ju
291c0 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73 75 62  mp to if the sub
291d0 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77 73 20  -program throws 
291e0 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65 78  an IGNORE .** ex
291f0 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20 74 68  ception using th
29200 65 20 52 41 49 53 45 28 29 20 66 75 6e 63 74 69  e RAISE() functi
29210 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50 33 20  on. Register P3 
29220 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
29230 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d 65  ress .** of a me
29240 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 69  mory cell in thi
29250 73 20 28 74 68 65 20 70 61 72 65 6e 74 29 20 56  s (the parent) V
29260 4d 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  M that is used t
29270 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 0a  o allocate the .
29280 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  ** memory requir
29290 65 64 20 62 79 20 74 68 65 20 73 75 62 2d 76 64  ed by the sub-vd
292a0 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a  be at runtime..*
292b0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
292c0 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d 20 63  nter to the VM c
292d0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72  ontaining the tr
292e0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 2a  igger program..*
292f0 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f  *.** If P5 is no
29300 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65 63  n-zero, then rec
29310 75 72 73 69 76 65 20 70 72 6f 67 72 61 6d 20 69  ursive program i
29320 6e 76 6f 63 61 74 69 6f 6e 20 69 73 20 65 6e 61  nvocation is ena
29330 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  bled..*/.case OP
29340 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20  _Program: {     
29350 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
29360 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20  int nMem;       
29370 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
29380 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69  r of memory regi
29390 73 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72  sters for sub-pr
293a0 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e  ogram */.  int n
293b0 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  Byte;           
293c0 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72     /* Bytes of r
293d0 75 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65 71  untime space req
293e0 75 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72  uired for sub-pr
293f0 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ogram */.  Mem *
29400 70 52 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  pRt;            
29410 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
29420 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69  o allocate runti
29430 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65  me space */.  Me
29440 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *pMem;        
29450 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f        /* Used to
29460 20 69 74 65 72 61 74 65 20 74 68 72 6f 75 67 68   iterate through
29470 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f   memory cells */
29480 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20  .  Mem *pEnd;   
29490 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61             /* La
294a0 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  st memory cell i
294b0 6e 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20  n new array */. 
294c0 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
294d0 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20  me;      /* New 
294e0 76 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78  vdbe frame to ex
294f0 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75  ecute in */.  Su
29500 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72  bProgram *pProgr
29510 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f  am;   /* Sub-pro
29520 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20  gram to execute 
29530 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20  */.  void *t;   
29540 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
29550 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e  Token identifyin
29560 67 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20  g trigger */..  
29570 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e  pProgram = pOp->
29580 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70  p4.pProgram;.  p
29590 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  Rt = &aMem[pOp->
295a0 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
295b0 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29  Program->nOp>0 )
295c0 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65  ;.  .  /* If the
295d0 20 70 35 20 66 6c 61 67 20 69 73 20 63 6c 65 61   p5 flag is clea
295e0 72 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76  r, then recursiv
295f0 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20  e invocation of 
29600 74 72 69 67 67 65 72 73 20 69 73 20 0a 20 20 2a  triggers is .  *
29610 2a 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20 62  * disabled for b
29620 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69  ackwards compati
29630 62 69 6c 69 74 79 20 28 70 35 20 69 73 20 73 65  bility (p5 is se
29640 74 20 69 66 20 74 68 69 73 20 73 75 62 2d 70 72  t if this sub-pr
29650 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65  ogram.  ** is re
29660 61 6c 6c 79 20 61 20 74 72 69 67 67 65 72 2c 20  ally a trigger, 
29670 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e 20 6b 65  not a foreign ke
29680 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68  y action, and th
29690 65 20 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20  e flag set.  ** 
296a0 61 6e 64 20 63 6c 65 61 72 65 64 20 62 79 20 74  and cleared by t
296b0 68 65 20 22 50 52 41 47 4d 41 20 72 65 63 75 72  he "PRAGMA recur
296c0 73 69 76 65 5f 74 72 69 67 67 65 72 73 22 20 63  sive_triggers" c
296d0 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61 72 29  ommand is clear)
296e0 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20  ..  ** .  ** It 
296f0 69 73 20 72 65 63 75 72 73 69 76 65 20 69 6e 76  is recursive inv
29700 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67  ocation of trigg
29710 65 72 73 2c 20 61 74 20 74 68 65 20 53 51 4c 20  ers, at the SQL 
29720 6c 65 76 65 6c 2c 20 74 68 61 74 20 69 73 20 0a  level, that is .
29730 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 49    ** disabled. I
29740 6e 20 73 6f 6d 65 20 63 61 73 65 73 20 61 20 73  n some cases a s
29750 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 6d 61  ingle trigger ma
29760 79 20 67 65 6e 65 72 61 74 65 20 6d 6f 72 65 20  y generate more 
29770 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53  than one .  ** S
29780 75 62 50 72 6f 67 72 61 6d 20 28 69 66 20 74 68  ubProgram (if th
29790 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 62 65  e trigger may be
297a0 20 65 78 65 63 75 74 65 64 20 77 69 74 68 20 6d   executed with m
297b0 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 64 69 66  ore than one dif
297c0 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20  ferent .  ** ON 
297d0 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74  CONFLICT algorit
297e0 68 6d 29 2e 20 53 75 62 50 72 6f 67 72 61 6d 20  hm). SubProgram 
297f0 73 74 72 75 63 74 75 72 65 73 20 61 73 73 6f 63  structures assoc
29800 69 61 74 65 64 20 77 69 74 68 20 61 0a 20 20 2a  iated with a.  *
29810 2a 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72  * single trigger
29820 20 61 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61   all have the sa
29830 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65  me value for the
29840 20 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65   SubProgram.toke
29850 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c 65  n .  ** variable
29860 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d  .  */.  if( pOp-
29870 3e 70 35 20 29 7b 0a 20 20 20 20 74 20 3d 20 70  >p5 ){.    t = p
29880 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a  Program->token;.
29890 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
298a0 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
298b0 20 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65   && pFrame->toke
298c0 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72  n!=t; pFrame=pFr
298d0 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20  ame->pParent);. 
298e0 20 20 20 69 66 28 20 70 46 72 61 6d 65 20 29 20     if( pFrame ) 
298f0 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66  break;.  }..  if
29900 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d  ( p->nFrame>=db-
29910 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
29920 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50  IMIT_TRIGGER_DEP
29930 54 48 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  TH] ){.    rc = 
29940 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
29950 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
29960 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
29970 64 62 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65  db, "too many le
29980 76 65 6c 73 20 6f 66 20 74 72 69 67 67 65 72 20  vels of trigger 
29990 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20  recursion");.   
299a0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
299b0 2a 20 52 65 67 69 73 74 65 72 20 70 52 74 20 69  * Register pRt i
299c0 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
299d0 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  the memory requi
299e0 72 65 64 20 74 6f 20 73 61 76 65 20 74 68 65 20  red to save the 
299f0 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68  state.  ** of th
29a00 65 20 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61  e current progra
29a10 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72  m, and the memor
29a20 79 20 72 65 71 75 69 72 65 64 20 61 74 20 72 75  y required at ru
29a30 6e 74 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65  ntime to execute
29a40 0a 20 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65  .  ** the trigge
29a50 72 20 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68  r program. If th
29a60 69 73 20 74 72 69 67 67 65 72 20 68 61 73 20 62  is trigger has b
29a70 65 65 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65  een fired before
29a80 2c 20 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a  , then pRt .  **
29a90 20 69 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f   is already allo
29aa0 63 61 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65  cated. Otherwise
29ab0 2c 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69  , it must be ini
29ac0 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20  tialized.  */.  
29ad0 69 66 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26  if( (pRt->flags&
29ae0 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b  MEM_Frame)==0 ){
29af0 0a 20 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72  .    /* SubProgr
29b00 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74  am.nMem is set t
29b10 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
29b20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65  memory cells use
29b30 64 20 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a  d by the .    **
29b40 20 70 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20   program stored 
29b50 69 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f  in SubProgram.aO
29b60 70 2e 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68  p. As well as th
29b70 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a  ese, one memory.
29b80 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72      ** cell is r
29b90 65 71 75 69 72 65 64 20 66 6f 72 20 65 61 63 68  equired for each
29ba0 20 63 75 72 73 6f 72 20 75 73 65 64 20 62 79 20   cursor used by 
29bb0 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74  the program. Set
29bc0 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61   local.    ** va
29bd0 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64  riable nMem (and
29be0 20 6c 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d   later, VdbeFram
29bf0 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20  e.nChildMem) to 
29c00 74 68 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20  this value..    
29c10 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50  */.    nMem = pP
29c20 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70  rogram->nMem + p
29c30 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20  Program->nCsr;. 
29c40 20 20 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44     nByte = ROUND
29c50 38 28 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61  8(sizeof(VdbeFra
29c60 6d 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  me)).           
29c70 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65     + nMem * size
29c80 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20  of(Mem).        
29c90 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d        + pProgram
29ca0 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28  ->nCsr * sizeof(
29cb0 56 64 62 65 43 75 72 73 6f 72 20 2a 29 0a 20 20  VdbeCursor *).  
29cc0 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 70 50              + pP
29cd0 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 20 2a 20  rogram->nOnce * 
29ce0 73 69 7a 65 6f 66 28 75 38 29 3b 0a 20 20 20 20  sizeof(u8);.    
29cf0 70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33  pFrame = sqlite3
29d00 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c  DbMallocZero(db,
29d10 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28   nByte);.    if(
29d20 20 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20   !pFrame ){.    
29d30 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
29d40 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
29d50 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70  VdbeMemRelease(p
29d60 52 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c  Rt);.    pRt->fl
29d70 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b  ags = MEM_Frame;
29d80 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61  .    pRt->u.pFra
29d90 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20  me = pFrame;..  
29da0 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b    pFrame->v = p;
29db0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68  .    pFrame->nCh
29dc0 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20  ildMem = nMem;. 
29dd0 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c     pFrame->nChil
29de0 64 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d  dCsr = pProgram-
29df0 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d  >nCsr;.    pFram
29e00 65 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  e->pc = pc;.    
29e10 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70  pFrame->aMem = p
29e20 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  ->aMem;.    pFra
29e30 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d  me->nMem = p->nM
29e40 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
29e50 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72  apCsr = p->apCsr
29e60 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43  ;.    pFrame->nC
29e70 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73  ursor = p->nCurs
29e80 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  or;.    pFrame->
29e90 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20  aOp = p->aOp;.  
29ea0 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20    pFrame->nOp = 
29eb0 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61  p->nOp;.    pFra
29ec0 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f  me->token = pPro
29ed0 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20  gram->token;.   
29ee0 20 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 46 6c   pFrame->aOnceFl
29ef0 61 67 20 3d 20 70 2d 3e 61 4f 6e 63 65 46 6c 61  ag = p->aOnceFla
29f00 67 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  g;.    pFrame->n
29f10 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 6e 4f  OnceFlag = p->nO
29f20 6e 63 65 46 6c 61 67 3b 0a 0a 20 20 20 20 70 45  nceFlag;..    pE
29f30 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d  nd = &VdbeFrameM
29f40 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61 6d  em(pFrame)[pFram
29f50 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20  e->nChildMem];. 
29f60 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65     for(pMem=Vdbe
29f70 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
29f80 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d  ; pMem!=pEnd; pM
29f90 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65  em++){.      pMe
29fa0 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55  m->flags = MEM_U
29fb0 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20 20 20 20  ndefined;.      
29fc0 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20  pMem->db = db;. 
29fd0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
29fe0 20 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e    pFrame = pRt->
29ff0 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73  u.pFrame;.    as
2a000 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
2a010 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e  nMem+pProgram->n
2a020 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68  Csr==pFrame->nCh
2a030 69 6c 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73  ildMem );.    as
2a040 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
2a050 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43  nCsr==pFrame->nC
2a060 68 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61  hildCsr );.    a
2a070 73 73 65 72 74 28 20 70 63 3d 3d 70 46 72 61 6d  ssert( pc==pFram
2a080 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20  e->pc );.  }..  
2a090 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70  p->nFrame++;.  p
2a0a0 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d  Frame->pParent =
2a0b0 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46   p->pFrame;.  pF
2a0c0 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20  rame->lastRowid 
2a0d0 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70  = lastRowid;.  p
2a0e0 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d  Frame->nChange =
2a0f0 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70   p->nChange;.  p
2a100 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20  ->nChange = 0;. 
2a110 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72   p->pFrame = pFr
2a120 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d  ame;.  p->aMem =
2a130 20 61 4d 65 6d 20 3d 20 26 56 64 62 65 46 72 61   aMem = &VdbeFra
2a140 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 2d 31  meMem(pFrame)[-1
2a150 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70  ];.  p->nMem = p
2a160 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
2a170 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d  ;.  p->nCursor =
2a180 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43   (u16)pFrame->nC
2a190 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70  hildCsr;.  p->ap
2a1a0 43 73 72 20 3d 20 28 56 64 62 65 43 75 72 73 6f  Csr = (VdbeCurso
2a1b0 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d  r **)&aMem[p->nM
2a1c0 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20  em+1];.  p->aOp 
2a1d0 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d  = aOp = pProgram
2a1e0 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20  ->aOp;.  p->nOp 
2a1f0 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b  = pProgram->nOp;
2a200 0a 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 20  .  p->aOnceFlag 
2a210 3d 20 28 75 38 20 2a 29 26 70 2d 3e 61 70 43 73  = (u8 *)&p->apCs
2a220 72 5b 70 2d 3e 6e 43 75 72 73 6f 72 5d 3b 0a 20  r[p->nCursor];. 
2a230 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20   p->nOnceFlag = 
2a240 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 3b  pProgram->nOnce;
2a250 0a 20 20 70 63 20 3d 20 2d 31 3b 0a 20 20 6d 65  .  pc = -1;.  me
2a260 6d 73 65 74 28 70 2d 3e 61 4f 6e 63 65 46 6c 61  mset(p->aOnceFla
2a270 67 2c 20 30 2c 20 70 2d 3e 6e 4f 6e 63 65 46 6c  g, 0, p->nOnceFl
2a280 61 67 29 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d  ag);..  break;.}
2a290 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72  ../* Opcode: Par
2a2a0 61 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  am P1 P2 * * *.*
2a2b0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2a2c0 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20 70 72   is only ever pr
2a2d0 65 73 65 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f  esent in sub-pro
2a2e0 67 72 61 6d 73 20 63 61 6c 6c 65 64 20 76 69 61  grams called via
2a2f0 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67   the .** OP_Prog
2a300 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ram instruction.
2a310 20 43 6f 70 79 20 61 20 76 61 6c 75 65 20 63 75   Copy a value cu
2a320 72 72 65 6e 74 6c 79 20 73 74 6f 72 65 64 20 69  rrently stored i
2a330 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63  n a memory .** c
2a340 65 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c 69  ell of the calli
2a350 6e 67 20 28 70 61 72 65 6e 74 29 20 66 72 61 6d  ng (parent) fram
2a360 65 20 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20  e to cell P2 in 
2a370 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d  the current fram
2a380 65 73 20 0a 2a 2a 20 61 64 64 72 65 73 73 20 73  es .** address s
2a390 70 61 63 65 2e 20 54 68 69 73 20 69 73 20 75 73  pace. This is us
2a3a0 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72  ed by trigger pr
2a3b0 6f 67 72 61 6d 73 20 74 6f 20 61 63 63 65 73 73  ograms to access
2a3c0 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61   the new.* .** a
2a3d0 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e  nd old.* values.
2a3e0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72 65  .**.** The addre
2a3f0 73 73 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 69  ss of the cell i
2a400 6e 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61  n the parent fra
2a410 6d 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  me is determined
2a420 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68   by adding.** th
2a430 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
2a440 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
2a450 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
2a460 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
2a470 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f  e.** calling OP_
2a480 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74  Program instruct
2a490 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
2a4a0 50 61 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20  Param: {        
2a4b0 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
2a4c0 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65 46  lease */.  VdbeF
2a4d0 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20  rame *pFrame;.  
2a4e0 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 46 72 61  Mem *pIn;.  pFra
2a4f0 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  me = p->pFrame;.
2a500 20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d    pIn = &pFrame-
2a510 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20  >aMem[pOp->p1 + 
2a520 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61  pFrame->aOp[pFra
2a530 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a  me->pc].p1];   .
2a540 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2a550 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
2a560 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d  , pIn, MEM_Ephem
2a570 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  );.  break;.}..#
2a580 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66  endif /* #ifndef
2a590 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
2a5a0 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GGER */..#ifndef
2a5b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
2a5c0 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f  EIGN_KEY./* Opco
2a5d0 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31  de: FkCounter P1
2a5e0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2a5f0 6f 70 73 69 73 3a 20 66 6b 63 74 72 5b 50 31 5d  opsis: fkctr[P1]
2a600 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65  +=P2.**.** Incre
2a610 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69  ment a "constrai
2a620 6e 74 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50  nt counter" by P
2a630 32 20 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67  2 (P2 may be neg
2a640 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76  ative or positiv
2a650 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  e)..** If P1 is 
2a660 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61  non-zero, the da
2a670 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e  tabase constrain
2a680 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63  t counter is inc
2a690 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65  remented .** (de
2a6a0 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b  ferred foreign k
2a6b0 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e  ey constraints).
2a6c0 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
2a6d0 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a  1 is zero, the .
2a6e0 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75  ** statement cou
2a6f0 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e  nter is incremen
2a700 74 65 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66  ted (immediate f
2a710 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
2a720 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65  raints)..*/.case
2a730 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b   OP_FkCounter: {
2a740 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73  .  if( db->flags
2a750 20 26 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46   & SQLITE_DeferF
2a760 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44  Ks ){.    db->nD
2a770 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 2b  eferredImmCons +
2a780 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c  = pOp->p2;.  }el
2a790 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  se if( pOp->p1 )
2a7a0 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72  {.    db->nDefer
2a7b0 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e  redCons += pOp->
2a7c0 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  p2;.  }else{.   
2a7d0 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e   p->nFkConstrain
2a7e0 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  t += pOp->p2;.  
2a7f0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
2a800 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72   Opcode: FkIfZer
2a810 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  o P1 P2 * * *.**
2a820 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 66 6b   Synopsis: if fk
2a830 63 74 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20  ctr[P1]==0 goto 
2a840 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P2.**.** This op
2a850 63 6f 64 65 20 74 65 73 74 73 20 69 66 20 61 20  code tests if a 
2a860 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
2a870 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69  traint-counter i
2a880 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f  s currently zero
2a890 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70  ..** If so, jump
2a8a0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
2a8b0 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66  P2. Otherwise, f
2a8c0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
2a8d0 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74  he next .** inst
2a8e0 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  ruction..**.** I
2a8f0 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
2a900 2c 20 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20  , then the jump 
2a910 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
2a920 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61  database constra
2a930 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69  int-counter.** i
2a940 73 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20  s zero (the one 
2a950 74 68 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65  that counts defe
2a960 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20  rred constraint 
2a970 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20  violations). If 
2a980 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74  P1 is.** zero, t
2a990 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
2a9a0 20 69 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e   if the statemen
2a9b0 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  t constraint-cou
2a9c0 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20  nter is zero.** 
2a9d0 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69  (immediate forei
2a9e0 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
2a9f0 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a  t violations)..*
2aa00 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65  /.case OP_FkIfZe
2aa10 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  ro: {         /*
2aa20 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70   jump */.  if( p
2aa30 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 69 66  Op->p1 ){.    if
2aa40 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  ( db->nDeferredC
2aa50 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44  ons==0 && db->nD
2aa60 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d  eferredImmCons==
2aa70 30 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  0 ) pc = pOp->p2
2aa80 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  -1;.  }else{.   
2aa90 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74   if( p->nFkConst
2aaa0 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e  raint==0 && db->
2aab0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
2aac0 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  ==0 ) pc = pOp->
2aad0 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61  p2-1;.  }.  brea
2aae0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 23  k;.}.#endif /* #
2aaf0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2ab00 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 2a  IT_FOREIGN_KEY *
2ab10 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
2ab20 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
2ab30 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  MENT./* Opcode: 
2ab40 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a 20 2a  MemMax P1 P2 * *
2ab50 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2ab60 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50 31 5d 2c  r[P1]=max(r[P1],
2ab70 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 50 31 20  r[P2]).**.** P1 
2ab80 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e  is a register in
2ab90 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20   the root frame 
2aba0 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68 65 20  of this VM (the 
2abb0 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a 2a  root frame is.**
2abc0 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20   different from 
2abd0 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d  the current fram
2abe0 65 20 69 66 20 74 68 69 73 20 69 6e 73 74 72 75  e if this instru
2abf0 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 65  ction is being e
2ac00 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68 69  xecuted.** withi
2ac10 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 29  n a sub-program)
2ac20 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75 65 20  . Set the value 
2ac30 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 74  of register P1 t
2ac40 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66  o the maximum of
2ac50 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e 74   .** its current
2ac60 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 76   value and the v
2ac70 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
2ac80 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
2ac90 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72 6f  instruction thro
2aca0 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74  ws an error if t
2acb0 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  he memory cell i
2acc0 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a  s not initially.
2acd0 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ** an integer..*
2ace0 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78  /.case OP_MemMax
2acf0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e  : {        /* in
2ad00 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  2 */.  VdbeFrame
2ad10 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66 28 20   *pFrame;.  if( 
2ad20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  p->pFrame ){.   
2ad30 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
2ad40 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70  Frame; pFrame->p
2ad50 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70  Parent; pFrame=p
2ad60 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
2ad70 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 70 46 72  .    pIn1 = &pFr
2ad80 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
2ad90 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  1];.  }else{.   
2ada0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2adb0 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61 73  p->p1];.  }.  as
2adc0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
2add0 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69  (pIn1) );.  sqli
2ade0 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
2adf0 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49  rify(pIn1);.  pI
2ae00 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
2ae10 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
2ae20 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
2ae30 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  pIn2);.  if( pIn
2ae40 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69  1->u.i<pIn2->u.i
2ae50 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69  ){.    pIn1->u.i
2ae60 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20   = pIn2->u.i;.  
2ae70 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2ae80 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2ae90 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
2aea0 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
2aeb0 49 66 50 6f 73 20 50 31 20 50 32 20 2a 20 2a 20  IfPos P1 P2 * * 
2aec0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
2aed0 66 20 72 5b 50 31 5d 3e 30 20 67 6f 74 6f 20 50  f r[P1]>0 goto P
2aee0 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76  2.**.** If the v
2aef0 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
2af00 20 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61   P1 is 1 or grea
2af10 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e  ter, jump to P2.
2af20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
2af30 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
2af40 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
2af50 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
2af60 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
2af70 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
2af80 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
2af90 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
2afa0 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
2afb0 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20  ase OP_IfPos: { 
2afc0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
2afd0 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
2afe0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2aff0 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
2b000 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
2b010 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
2b020 3e 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20  >0 ){.     pc = 
2b030 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
2b040 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2b050 4f 70 63 6f 64 65 3a 20 49 66 4e 65 67 20 50 31  Opcode: IfNeg P1
2b060 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2b070 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c  opsis: if r[P1]<
2b080 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  0 goto P2.**.** 
2b090 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  If the value of 
2b0a0 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6c  register P1 is l
2b0b0 65 73 73 20 74 68 61 6e 20 7a 65 72 6f 2c 20 6a  ess than zero, j
2b0c0 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a  ump to P2. .**.*
2b0d0 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20  * It is illegal 
2b0e0 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74  to use this inst
2b0f0 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67  ruction on a reg
2b100 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a  ister that does.
2b110 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  ** not contain a
2b120 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61  n integer.  An a
2b130 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77  ssertion fault w
2b140 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f  ill result if yo
2b150 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  u try..*/.case O
2b160 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20 20 20  P_IfNeg: {      
2b170 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
2b180 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
2b190 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2b1a0 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
2b1b0 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66  &MEM_Int );.  if
2b1c0 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b  ( pIn1->u.i<0 ){
2b1d0 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  .     pc = pOp->
2b1e0 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
2b1f0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2b200 65 3a 20 49 66 5a 65 72 6f 20 50 31 20 50 32 20  e: IfZero P1 P2 
2b210 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
2b220 69 73 3a 20 72 5b 50 31 5d 2b 3d 50 33 2c 20 69  is: r[P1]+=P3, i
2b230 66 20 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20  f r[P1]==0 goto 
2b240 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67  P2.**.** The reg
2b250 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f  ister P1 must co
2b260 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
2b270 2e 20 20 41 64 64 20 6c 69 74 65 72 61 6c 20 50  .  Add literal P
2b280 33 20 74 6f 20 74 68 65 0a 2a 2a 20 76 61 6c 75  3 to the.** valu
2b290 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
2b2a0 2e 20 20 49 66 20 74 68 65 20 72 65 73 75 6c 74  .  If the result
2b2b0 20 69 73 20 65 78 61 63 74 6c 79 20 30 2c 20 6a   is exactly 0, j
2b2c0 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a  ump to P2. .**.*
2b2d0 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20  * It is illegal 
2b2e0 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74  to use this inst
2b2f0 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67  ruction on a reg
2b300 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a  ister that does.
2b310 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  ** not contain a
2b320 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61  n integer.  An a
2b330 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77  ssertion fault w
2b340 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f  ill result if yo
2b350 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  u try..*/.case O
2b360 50 5f 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20  P_IfZero: {     
2b370 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
2b380 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
2b390 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
2b3a0 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
2b3b0 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70  s&MEM_Int );.  p
2b3c0 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d  In1->u.i += pOp-
2b3d0 3e 70 33 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  >p3;.  if( pIn1-
2b3e0 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 20  >u.i==0 ){.     
2b3f0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
2b400 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2b410 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  ../* Opcode: Agg
2b420 53 74 65 70 20 2a 20 50 32 20 50 33 20 50 34 20  Step * P2 P3 P4 
2b430 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
2b440 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70  accum=r[P3] step
2b450 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a  (r[P2@P5]).**.**
2b460 20 45 78 65 63 75 74 65 20 74 68 65 20 73 74 65   Execute the ste
2b470 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  p function for a
2b480 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 54 68  n aggregate.  Th
2b490 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61  e.** function ha
2b4a0 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20  s P5 arguments. 
2b4b0 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65    P4 is a pointe
2b4c0 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66  r to the FuncDef
2b4d0 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 68  .** structure th
2b4e0 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65  at specifies the
2b4f0 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55 73 65 20   function.  Use 
2b500 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 20 61  register.** P3 a
2b510 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f  s the accumulato
2b520 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20  r..**.** The P5 
2b530 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61  arguments are ta
2b540 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
2b550 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20  r P2 and its.** 
2b560 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63  successors..*/.c
2b570 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70 3a 20  ase OP_AggStep: 
2b580 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74  {.  int n;.  int
2b590 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b   i;.  Mem *pMem;
2b5a0 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 0a 20 20  .  Mem *pRec;.  
2b5b0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
2b5c0 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  ctx;.  sqlite3_v
2b5d0 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20  alue **apVal;.. 
2b5e0 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20   n = pOp->p5;.  
2b5f0 61 73 73 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a  assert( n>=0 );.
2b600 20 20 70 52 65 63 20 3d 20 26 61 4d 65 6d 5b 70    pRec = &aMem[p
2b610 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c  Op->p2];.  apVal
2b620 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61   = p->apArg;.  a
2b630 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20  ssert( apVal || 
2b640 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d  n==0 );.  for(i=
2b650 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65  0; i<n; i++, pRe
2b660 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  c++){.    assert
2b670 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65  ( memIsValid(pRe
2b680 63 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b  c) );.    apVal[
2b690 69 5d 20 3d 20 70 52 65 63 3b 0a 20 20 20 20 6d  i] = pRec;.    m
2b6a0 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
2b6b0 70 2c 20 70 52 65 63 29 3b 0a 20 20 20 20 73 71  p, pRec);.    sq
2b6c0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72  lite3VdbeMemStor
2b6d0 65 54 79 70 65 28 70 52 65 63 29 3b 0a 20 20 7d  eType(pRec);.  }
2b6e0 0a 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70  .  ctx.pFunc = p
2b6f0 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20  Op->p4.pFunc;.  
2b700 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
2b710 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
2b720 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
2b730 72 29 20 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d  r) );.  ctx.pMem
2b740 20 3d 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   = pMem = &aMem[
2b750 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d  pOp->p3];.  pMem
2b760 2d 3e 6e 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66  ->n++;.  ctx.s.f
2b770 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
2b780 0a 20 20 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a  .  ctx.s.z = 0;.
2b790 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20    ctx.s.zMalloc 
2b7a0 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65  = 0;.  ctx.s.xDe
2b7b0 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64  l = 0;.  ctx.s.d
2b7c0 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 69 73  b = db;.  ctx.is
2b7d0 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78  Error = 0;.  ctx
2b7e0 2e 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20 20 63 74  .pColl = 0;.  ct
2b7f0 78 2e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a  x.skipFlag = 0;.
2b800 20 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d    if( ctx.pFunc-
2b810 3e 66 75 6e 63 46 6c 61 67 73 20 26 20 53 51 4c  >funcFlags & SQL
2b820 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
2b830 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  L ){.    assert(
2b840 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20   pOp>p->aOp );. 
2b850 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
2b860 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  1].p4type==P4_CO
2b870 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73  LLSEQ );.    ass
2b880 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63  ert( pOp[-1].opc
2b890 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20  ode==OP_CollSeq 
2b8a0 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c  );.    ctx.pColl
2b8b0 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43   = pOp[-1].p4.pC
2b8c0 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63 74 78 2e  oll;.  }.  (ctx.
2b8d0 70 46 75 6e 63 2d 3e 78 53 74 65 70 29 28 26 63  pFunc->xStep)(&c
2b8e0 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f  tx, n, apVal); /
2b8f0 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32  * IMP: R-24505-2
2b900 33 32 33 30 20 2a 2f 0a 20 20 69 66 28 20 63 74  3230 */.  if( ct
2b910 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  x.isError ){.   
2b920 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
2b930 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
2b940 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
2b950 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78  _value_text(&ctx
2b960 2e 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63  .s));.    rc = c
2b970 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a  tx.isError;.  }.
2b980 20 20 69 66 28 20 63 74 78 2e 73 6b 69 70 46 6c    if( ctx.skipFl
2b990 61 67 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  ag ){.    assert
2b9a0 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65  ( pOp[-1].opcode
2b9b0 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a  ==OP_CollSeq );.
2b9c0 20 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e      i = pOp[-1].
2b9d0 70 31 3b 0a 20 20 20 20 69 66 28 20 69 20 29 20  p1;.    if( i ) 
2b9e0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2b9f0 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c  tInt64(&aMem[i],
2ba00 20 31 29 3b 0a 20 20 7d 0a 0a 20 20 73 71 6c 69   1);.  }..  sqli
2ba10 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
2ba20 65 28 26 63 74 78 2e 73 29 3b 0a 0a 20 20 62 72  e(&ctx.s);..  br
2ba30 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2ba40 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50  e: AggFinal P1 P
2ba50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
2ba60 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 31  psis: accum=r[P1
2ba70 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65  ] N=P2.**.** Exe
2ba80 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a  cute the finaliz
2ba90 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  er function for 
2baa0 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 50  an aggregate.  P
2bab0 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f  1 is.** the memo
2bac0 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
2bad0 20 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61   is the accumula
2bae0 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67 72  tor for the aggr
2baf0 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  egate..**.** P2 
2bb00 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
2bb10 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20   arguments that 
2bb20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
2bb30 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50  n takes and.** P
2bb40 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
2bb50 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f  o the FuncDef fo
2bb60 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e  r this function.
2bb70 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75    The P2.** argu
2bb80 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64  ment is not used
2bb90 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   by this opcode.
2bba0 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65    It is only the
2bbb0 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61  re to disambigua
2bbc0 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  te.** functions 
2bbd0 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61  that can take va
2bbe0 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66  rying numbers of
2bbf0 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65   arguments.  The
2bc00 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20  .** P4 argument 
2bc10 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66  is only needed f
2bc20 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72 61 74  or the degenerat
2bc30 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20  e case where.** 
2bc40 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
2bc50 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f  n was not previo
2bc60 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a  usly called..*/.
2bc70 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c  case OP_AggFinal
2bc80 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  : {.  Mem *pMem;
2bc90 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2bca0 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
2bcb0 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
2bcc0 72 73 6f 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20  rsor) );.  pMem 
2bcd0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2bce0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65  ;.  assert( (pMe
2bcf0 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d  m->flags & ~(MEM
2bd00 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d  _Null|MEM_Agg))=
2bd10 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
2bd20 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c  ite3VdbeMemFinal
2bd30 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70  ize(pMem, pOp->p
2bd40 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20  4.pFunc);.  if( 
2bd50 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  rc ){.    sqlite
2bd60 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2bd70 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
2bd80 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
2bd90 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d  text(pMem));.  }
2bda0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
2bdb0 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65  angeEncoding(pMe
2bdc0 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  m, encoding);.  
2bdd0 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
2bde0 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28  IZE(pMem);.  if(
2bdf0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
2be00 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20  ooBig(pMem) ){. 
2be10 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
2be20 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2be30 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2be40 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f  OMIT_WAL./* Opco
2be50 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50  de: Checkpoint P
2be60 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
2be70 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74  * Checkpoint dat
2be80 61 62 61 73 65 20 50 31 2e 20 54 68 69 73 20 69  abase P1. This i
2be90 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20  s a no-op if P1 
2bea0 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79  is not currently
2beb0 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e   in.** WAL mode.
2bec0 20 50 61 72 61 6d 65 74 65 72 20 50 32 20 69 73   Parameter P2 is
2bed0 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43   one of SQLITE_C
2bee0 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56  HECKPOINT_PASSIV
2bef0 45 2c 20 46 55 4c 4c 0a 2a 2a 20 6f 72 20 52 45  E, FULL.** or RE
2bf00 53 54 41 52 54 2e 20 20 57 72 69 74 65 20 31 20  START.  Write 1 
2bf10 6f 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  or 0 into mem[P3
2bf20 5d 20 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f  ] if the checkpo
2bf30 69 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53  int returns.** S
2bf40 51 4c 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f  QLITE_BUSY or no
2bf50 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  t, respectively.
2bf60 20 20 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62    Write the numb
2bf70 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
2bf80 68 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20  he.** WAL after 
2bf90 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69  the checkpoint i
2bfa0 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e  nto mem[P3+1] an
2bfb0 64 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  d the number of 
2bfc0 70 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  pages.** in the 
2bfd0 57 41 4c 20 74 68 61 74 20 68 61 76 65 20 62 65  WAL that have be
2bfe0 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20  en checkpointed 
2bff0 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70  after the checkp
2c000 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65  oint.** complete
2c010 73 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d  s into mem[P3+2]
2c020 2e 20 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e  .  However on an
2c030 20 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31   error, mem[P3+1
2c040 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b  ] and.** mem[P3+
2c050 32 5d 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a  2] are initializ
2c060 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73  ed to -1..*/.cas
2c070 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a  e OP_Checkpoint:
2c080 20 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20   {.  int i;     
2c090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0a0 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
2c0b0 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52  nter */.  int aR
2c0c0 65 73 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20  es[3];          
2c0d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
2c0e0 75 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ults */.  Mem *p
2c0f0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
2c100 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69            /* Wri
2c110 74 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 20  te results here 
2c120 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
2c130 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2c140 20 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20    aRes[0] = 0;. 
2c150 20 61 52 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b   aRes[1] = aRes[
2c160 32 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72  2] = -1;.  asser
2c170 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  t( pOp->p2==SQLI
2c180 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41  TE_CHECKPOINT_PA
2c190 53 53 49 56 45 0a 20 20 20 20 20 20 20 7c 7c 20  SSIVE.       || 
2c1a0 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
2c1b0 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a  CHECKPOINT_FULL.
2c1c0 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
2c1d0 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
2c1e0 4f 49 4e 54 5f 52 45 53 54 41 52 54 0a 20 20 29  OINT_RESTART.  )
2c1f0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2c200 43 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70  Checkpoint(db, p
2c210 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c  Op->p1, pOp->p2,
2c220 20 26 61 52 65 73 5b 31 5d 2c 20 26 61 52 65 73   &aRes[1], &aRes
2c230 5b 32 5d 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  [2]);.  if( rc==
2c240 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
2c250 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
2c260 4b 3b 0a 20 20 20 20 61 52 65 73 5b 30 5d 20 3d  K;.    aRes[0] =
2c270 20 31 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d   1;.  }.  for(i=
2c280 30 2c 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b  0, pMem = &aMem[
2c290 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69  pOp->p3]; i<3; i
2c2a0 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20  ++, pMem++){.   
2c2b0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2c2c0 65 74 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69  etInt64(pMem, (i
2c2d0 36 34 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d  64)aRes[i]);.  }
2c2e0 20 20 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b      .  break;.};
2c2f0 20 20 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64    .#endif..#ifnd
2c300 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
2c310 52 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a  RAGMA./* Opcode:
2c320 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20   JournalMode P1 
2c330 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
2c340 43 68 61 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e  Change the journ
2c350 61 6c 20 6d 6f 64 65 20 6f 66 20 64 61 74 61 62  al mode of datab
2c360 61 73 65 20 50 31 20 74 6f 20 50 33 2e 20 50 33  ase P1 to P3. P3
2c370 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20   must be one of 
2c380 74 68 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55  the.** PAGER_JOU
2c390 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c  RNALMODE_XXX val
2c3a0 75 65 73 2e 20 49 66 20 63 68 61 6e 67 69 6e 67  ues. If changing
2c3b0 20 62 65 74 77 65 65 6e 20 74 68 65 20 76 61 72   between the var
2c3c0 69 6f 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a  ious rollback.**
2c3d0 20 6d 6f 64 65 73 20 28 64 65 6c 65 74 65 2c 20   modes (delete, 
2c3e0 74 72 75 6e 63 61 74 65 2c 20 70 65 72 73 69 73  truncate, persis
2c3f0 74 2c 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72  t, off and memor
2c400 79 29 2c 20 74 68 69 73 20 69 73 20 61 20 73 69  y), this is a si
2c410 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f  mple.** operatio
2c420 6e 2e 20 4e 6f 20 49 4f 20 69 73 20 72 65 71 75  n. No IO is requ
2c430 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63  ired..**.** If c
2c440 68 61 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20  hanging into or 
2c450 6f 75 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20  out of WAL mode 
2c460 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 69 73  the procedure is
2c470 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65   more complicate
2c480 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61  d..**.** Write a
2c490 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69   string containi
2c4a0 6e 67 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75  ng the final jou
2c4b0 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67  rnal-mode to reg
2c4c0 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
2c4d0 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65  e OP_JournalMode
2c4e0 3a 20 7b 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70  : {    /* out2-p
2c4f0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42  rerelease */.  B
2c500 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20  tree *pBt;      
2c510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2c520 2a 20 42 74 72 65 65 20 74 6f 20 63 68 61 6e 67  * Btree to chang
2c530 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f  e journal mode o
2c540 66 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70 50  f */.  Pager *pP
2c550 61 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  ager;           
2c560 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 72 20         /* Pager 
2c570 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
2c580 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65  pBt */.  int eNe
2c590 77 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  w;              
2c5a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 77 20           /* New 
2c5b0 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a  journal mode */.
2c5c0 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20    int eOld;     
2c5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5e0 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75    /* The old jou
2c5f0 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69 66  rnal mode */.#if
2c600 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2c610 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68 61  _WAL.  const cha
2c620 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20  r *zFilename;   
2c630 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
2c640 66 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  f database file 
2c650 66 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 23 65  for pPager */.#e
2c660 6e 64 69 66 0a 0a 20 20 65 4e 65 77 20 3d 20 70  ndif..  eNew = p
2c670 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
2c680 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  ( eNew==PAGER_JO
2c690 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45  URNALMODE_DELETE
2c6a0 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77   .       || eNew
2c6b0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2c6c0 4f 44 45 5f 54 52 55 4e 43 41 54 45 20 0a 20 20  ODE_TRUNCATE .  
2c6d0 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2c6e0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2c6f0 50 45 52 53 49 53 54 20 0a 20 20 20 20 20 20 20  PERSIST .       
2c700 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
2c710 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20  OURNALMODE_OFF. 
2c720 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
2c730 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2c740 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c  _MEMORY.       |
2c750 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2c760 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20  URNALMODE_WAL.  
2c770 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2c780 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2c790 51 55 45 52 59 0a 20 20 29 3b 0a 20 20 61 73 73  QUERY.  );.  ass
2c7a0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2c7b0 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
2c7c0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
2c7d0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
2c7e0 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  ;..  pBt = db->a
2c7f0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
2c800 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69  .  pPager = sqli
2c810 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 42  te3BtreePager(pB
2c820 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c  t);.  eOld = sql
2c830 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f 75 72  ite3PagerGetJour
2c840 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 3b  nalMode(pPager);
2c850 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47  .  if( eNew==PAG
2c860 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
2c870 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20 65 4f  UERY ) eNew = eO
2c880 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74  ld;.  if( !sqlit
2c890 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67  e3PagerOkToChang
2c8a0 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  eJournalMode(pPa
2c8b0 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20 65 4f  ger) ) eNew = eO
2c8c0 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ld;..#ifndef SQL
2c8d0 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a  ITE_OMIT_WAL.  z
2c8e0 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74  Filename = sqlit
2c8f0 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d 65 28  e3PagerFilename(
2c900 70 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f  pPager, 1);..  /
2c910 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61  * Do not allow a
2c920 20 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a   transition to j
2c930 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20  ournal_mode=WAL 
2c940 66 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a 20  for a database. 
2c950 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72 79   ** in temporary
2c960 20 73 74 6f 72 61 67 65 20 6f 72 20 69 66 20 74   storage or if t
2c970 68 65 20 56 46 53 20 64 6f 65 73 20 6e 6f 74 20  he VFS does not 
2c980 73 75 70 70 6f 72 74 20 73 68 61 72 65 64 20 6d  support shared m
2c990 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66  emory .  */.  if
2c9a0 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  ( eNew==PAGER_JO
2c9b0 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20  URNALMODE_WAL.  
2c9c0 20 26 26 20 28 73 71 6c 69 74 65 33 53 74 72 6c   && (sqlite3Strl
2c9d0 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d  en30(zFilename)=
2c9e0 3d 30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  =0           /* 
2c9f0 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20  Temp file */.   
2ca00 20 20 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50      || !sqlite3P
2ca10 61 67 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64  agerWalSupported
2ca20 28 70 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e  (pPager))   /* N
2ca30 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20  o shared-memory 
2ca40 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a  support */.  ){.
2ca50 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b      eNew = eOld;
2ca60 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65  .  }..  if( (eNe
2ca70 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20 28  w!=eOld).   && (
2ca80 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eOld==PAGER_JOUR
2ca90 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65  NALMODE_WAL || e
2caa0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2cab0 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b  ALMODE_WAL).  ){
2cac0 0a 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75  .    if( !db->au
2cad0 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e  toCommit || db->
2cae0 6e 56 64 62 65 52 65 61 64 3e 31 20 29 7b 0a 20  nVdbeRead>1 ){. 
2caf0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
2cb00 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 73 71  _ERROR;.      sq
2cb10 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
2cb20 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
2cb30 0a 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e  .          "cann
2cb40 6f 74 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c  ot change %s wal
2cb50 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69   mode from withi
2cb60 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22  n a transaction"
2cb70 2c 0a 20 20 20 20 20 20 20 20 20 20 28 65 4e 65  ,.          (eNe
2cb80 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2cb90 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f  MODE_WAL ? "into
2cba0 22 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20  " : "out of").  
2cbb0 20 20 20 20 29 3b 0a 20 20 20 20 20 20 62 72 65      );.      bre
2cbc0 61 6b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ak;.    }else{. 
2cbd0 0a 20 20 20 20 20 20 69 66 28 20 65 4f 6c 64 3d  .      if( eOld=
2cbe0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2cbf0 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20 20  DE_WAL ){.      
2cc00 20 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e 67 20    /* If leaving 
2cc10 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20  WAL mode, close 
2cc20 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66  the log file. If
2cc30 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65   successful, the
2cc40 20 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a   call.        **
2cc50 20 74 6f 20 50 61 67 65 72 43 6c 6f 73 65 57 61   to PagerCloseWa
2cc60 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e 74 73 20  l() checkpoints 
2cc70 61 6e 64 20 64 65 6c 65 74 65 73 20 74 68 65 20  and deletes the 
2cc80 77 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20  write-ahead-log 
2cc90 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c 65  .        ** file
2cca0 2e 20 41 6e 20 45 58 43 4c 55 53 49 56 45 20 6c  . An EXCLUSIVE l
2ccb0 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62 65  ock may still be
2ccc0 20 68 65 6c 64 20 6f 6e 20 74 68 65 20 64 61 74   held on the dat
2ccd0 61 62 61 73 65 20 66 69 6c 65 20 0a 20 20 20 20  abase file .    
2cce0 20 20 20 20 2a 2a 20 61 66 74 65 72 20 61 20 73      ** after a s
2ccf0 75 63 63 65 73 73 66 75 6c 20 72 65 74 75 72 6e  uccessful return
2cd00 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  . .        */.  
2cd10 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
2cd20 65 33 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28  e3PagerCloseWal(
2cd30 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20 20  pPager);.       
2cd40 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2cd50 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
2cd60 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a  sqlite3PagerSetJ
2cd70 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
2cd80 72 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20 20 20  r, eNew);.      
2cd90 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20    }.      }else 
2cda0 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f  if( eOld==PAGER_
2cdb0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f  JOURNALMODE_MEMO
2cdc0 52 59 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  RY ){.        /*
2cdd0 20 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69   Cannot transiti
2cde0 6f 6e 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d  on directly from
2cdf0 20 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20   MEMORY to WAL. 
2ce00 20 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20   Use mode OFF.  
2ce10 20 20 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 69        ** as an i
2ce20 6e 74 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20  ntermediate */. 
2ce30 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
2ce40 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerSetJournalMod
2ce50 65 28 70 50 61 67 65 72 2c 20 50 41 47 45 52 5f  e(pPager, PAGER_
2ce60 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29  JOURNALMODE_OFF)
2ce70 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  ;.      }.  .   
2ce80 20 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61     /* Open a tra
2ce90 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20  nsaction on the 
2cea0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 52  database file. R
2ceb0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65  egardless of the
2cec0 20 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a   journal.      *
2ced0 2a 20 6d 6f 64 65 2c 20 74 68 69 73 20 74 72 61  * mode, this tra
2cee0 6e 73 61 63 74 69 6f 6e 20 61 6c 77 61 79 73 20  nsaction always 
2cef0 75 73 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20  uses a rollback 
2cf00 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a  journal..      *
2cf10 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
2cf20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e  sqlite3BtreeIsIn
2cf30 54 72 61 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b  Trans(pBt)==0 );
2cf40 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
2cf50 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2cf60 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2cf70 42 74 72 65 65 53 65 74 56 65 72 73 69 6f 6e 28  BtreeSetVersion(
2cf80 70 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45  pBt, (eNew==PAGE
2cf90 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2cfa0 4c 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20 20  L ? 2 : 1));.   
2cfb0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23     }.    }.  }.#
2cfc0 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65 66 20  endif /* ifndef 
2cfd0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20  SQLITE_OMIT_WAL 
2cfe0 2a 2f 0a 0a 20 20 69 66 28 20 72 63 20 29 7b 0a  */..  if( rc ){.
2cff0 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b      eNew = eOld;
2d000 0a 20 20 7d 0a 20 20 65 4e 65 77 20 3d 20 73 71  .  }.  eNew = sq
2d010 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75  lite3PagerSetJou
2d020 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c  rnalMode(pPager,
2d030 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 20   eNew);..  pOut 
2d040 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
2d050 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
2d060 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74  = MEM_Str|MEM_St
2d070 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20  atic|MEM_Term;. 
2d080 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72   pOut->z = (char
2d090 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61   *)sqlite3Journa
2d0a0 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b  lModename(eNew);
2d0b0 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c  .  pOut->n = sql
2d0c0 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 75  ite3Strlen30(pOu
2d0d0 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65  t->z);.  pOut->e
2d0e0 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38  nc = SQLITE_UTF8
2d0f0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  ;.  sqlite3VdbeC
2d100 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f  hangeEncoding(pO
2d110 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ut, encoding);. 
2d120 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69   break;.};.#endi
2d130 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2d140 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20  _PRAGMA */..#if 
2d150 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2d160 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26 20  OMIT_VACUUM) && 
2d170 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2d180 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20  OMIT_ATTACH)./* 
2d190 4f 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a  Opcode: Vacuum *
2d1a0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56   * * * *.**.** V
2d1b0 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65  acuum the entire
2d1c0 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 69 73   database.  This
2d1d0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63 61 75   opcode will cau
2d1e0 73 65 20 6f 74 68 65 72 20 76 69 72 74 75 61 6c  se other virtual
2d1f0 0a 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74 6f 20  .** machines to 
2d200 62 65 20 63 72 65 61 74 65 64 20 61 6e 64 20 72  be created and r
2d210 75 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f 74 20  un.  It may not 
2d220 62 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77  be called from w
2d230 69 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73  ithin.** a trans
2d240 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  action..*/.case 
2d250 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 61  OP_Vacuum: {.  a
2d260 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2d270 6c 79 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  ly==0 );.  rc = 
2d280 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d  sqlite3RunVacuum
2d290 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2d2a0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
2d2b0 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e  ndif..#if !defin
2d2c0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
2d2d0 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70  UTOVACUUM)./* Op
2d2e0 63 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75 6d  code: IncrVacuum
2d2f0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
2d300 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69 6e  ** Perform a sin
2d310 67 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65 20  gle step of the 
2d320 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75  incremental vacu
2d330 75 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a  um procedure on.
2d340 2a 2a 20 74 68 65 20 50 31 20 64 61 74 61 62 61  ** the P1 databa
2d350 73 65 2e 20 49 66 20 74 68 65 20 76 61 63 75 75  se. If the vacuu
2d360 6d 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20  m has finished, 
2d370 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
2d380 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72  ion.** P2. Other
2d390 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75  wise, fall throu
2d3a0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
2d3b0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
2d3c0 61 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75 75  ase OP_IncrVacuu
2d3d0 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  m: {        /* j
2d3e0 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a  ump */.  Btree *
2d3f0 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pBt;..  assert( 
2d400 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2d410 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
2d420 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
2d430 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44  treeMask & (((yD
2d440 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70  bMask)1)<<pOp->p
2d450 31 29 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  1))!=0 );.  asse
2d460 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
2d470 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62  =0 );.  pBt = db
2d480 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
2d490 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  Bt;.  rc = sqlit
2d4a0 65 33 42 74 72 65 65 49 6e 63 72 56 61 63 75 75  e3BtreeIncrVacuu
2d4b0 6d 28 70 42 74 29 3b 0a 20 20 69 66 28 20 72 63  m(pBt);.  if( rc
2d4c0 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b  ==SQLITE_DONE ){
2d4d0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
2d4e0 32 20 2d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20  2 - 1;.    rc = 
2d4f0 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20  SQLITE_OK;.  }. 
2d500 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2d510 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70  ../* Opcode: Exp
2d520 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ire P1 * * * *.*
2d530 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65 63 6f  *.** Cause preco
2d540 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74  mpiled statement
2d550 73 20 74 6f 20 62 65 63 6f 6d 65 20 65 78 70 69  s to become expi
2d560 72 65 64 2e 20 41 6e 20 65 78 70 69 72 65 64 20  red. An expired 
2d570 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 66 61 69  statement.** fai
2d580 6c 73 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72  ls with an error
2d590 20 63 6f 64 65 20 6f 66 20 53 51 4c 49 54 45 5f   code of SQLITE_
2d5a0 53 43 48 45 4d 41 20 69 66 20 69 74 20 69 73 20  SCHEMA if it is 
2d5b0 65 76 65 72 20 65 78 65 63 75 74 65 64 20 0a 2a  ever executed .*
2d5c0 2a 20 28 76 69 61 20 73 71 6c 69 74 65 33 5f 73  * (via sqlite3_s
2d5d0 74 65 70 28 29 29 2e 0a 2a 2a 20 0a 2a 2a 20 49  tep())..** .** I
2d5e0 66 20 50 31 20 69 73 20 30 2c 20 74 68 65 6e 20  f P1 is 0, then 
2d5f0 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  all SQL statemen
2d600 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65  ts become expire
2d610 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d  d. If P1 is non-
2d620 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e  zero,.** then on
2d630 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79  ly the currently
2d640 20 65 78 65 63 75 74 69 6e 67 20 73 74 61 74 65   executing state
2d650 6d 65 6e 74 20 69 73 20 61 66 66 65 63 74 65 64  ment is affected
2d660 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78  . .*/.case OP_Ex
2d670 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20 21 70  pire: {.  if( !p
2d680 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71  Op->p1 ){.    sq
2d690 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
2d6a0 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
2d6b0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
2d6c0 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a  p->expired = 1;.
2d6d0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2d6e0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2d6f0 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
2d700 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c  ./* Opcode: Tabl
2d710 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33 20 50  eLock P1 P2 P3 P
2d720 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
2d730 20 69 44 62 3d 50 31 20 72 6f 6f 74 3d 50 32 20   iDb=P1 root=P2 
2d740 77 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f  write=P3.**.** O
2d750 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20  btain a lock on 
2d760 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62  a particular tab
2d770 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63  le. This instruc
2d780 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65  tion is only use
2d790 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68  d when.** the sh
2d7a0 61 72 65 64 2d 63 61 63 68 65 20 66 65 61 74 75  ared-cache featu
2d7b0 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a  re is enabled. .
2d7c0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
2d7d0 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
2d7e0 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33  abase in sqlite3
2d7f0 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61  .aDb[] of the da
2d800 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69  tabase.** on whi
2d810 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61  ch the lock is a
2d820 63 71 75 69 72 65 64 2e 20 20 41 20 72 65 61 64  cquired.  A read
2d830 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64  lock is obtained
2d840 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20   if P3==0 or.** 
2d850 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20  a write lock if 
2d860 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  P3==1..**.** P2 
2d870 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f  contains the roo
2d880 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74 61  t-page of the ta
2d890 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a  ble to lock..**.
2d8a0 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61  ** P4 contains a
2d8b0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
2d8c0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
2d8d0 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20  e being locked. 
2d8e0 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20  This is only.** 
2d8f0 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  used to generate
2d900 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
2d910 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61  e if the lock ca
2d920 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64  nnot be obtained
2d930 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62  ..*/.case OP_Tab
2d940 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69  leLock: {.  u8 i
2d950 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38  sWriteLock = (u8
2d960 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20  )pOp->p3;.  if( 
2d970 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30  isWriteLock || 0
2d980 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  ==(db->flags&SQL
2d990 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74  ITE_ReadUncommit
2d9a0 74 65 64 29 20 29 7b 0a 20 20 20 20 69 6e 74 20  ted) ){.    int 
2d9b0 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20  p1 = pOp->p1; . 
2d9c0 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30     assert( p1>=0
2d9d0 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29   && p1<db->nDb )
2d9e0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
2d9f0 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28  ->btreeMask & ((
2da00 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 31 29  (yDbMask)1)<<p1)
2da10 29 21 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  )!=0 );.    asse
2da20 72 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d  rt( isWriteLock=
2da30 3d 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63  =0 || isWriteLoc
2da40 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63 20 3d  k==1 );.    rc =
2da50 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63   sqlite3BtreeLoc
2da60 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70  kTable(db->aDb[p
2da70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c  1].pBt, pOp->p2,
2da80 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20   isWriteLock);. 
2da90 20 20 20 69 66 28 20 28 72 63 26 30 78 46 46 29     if( (rc&0xFF)
2daa0 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  ==SQLITE_LOCKED 
2dab0 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  ){.      const c
2dac0 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34  har *z = pOp->p4
2dad0 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  .z;.      sqlite
2dae0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2daf0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 64 61 74  ErrMsg, db, "dat
2db00 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c  abase table is l
2db10 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a  ocked: %s", z);.
2db20 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
2db30 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2db40 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
2db50 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e  D_CACHE */..#ifn
2db60 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2db70 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2db80 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a  Opcode: VBegin *
2db90 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2dba0 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e  P4 may be a poin
2dbb0 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  ter to an sqlite
2dbc0 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
2dbd0 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68  . If so, call th
2dbe0 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74  e .** xBegin met
2dbf0 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61 62  hod for that tab
2dc00 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20  le..**.** Also, 
2dc10 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50  whether or not P
2dc20 34 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20  4 is set, check 
2dc30 74 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74  that this is not
2dc40 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72   being called fr
2dc50 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63  om.** within a c
2dc60 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72  allback to a vir
2dc70 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63  tual table xSync
2dc80 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74  () method. If it
2dc90 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a   is, the error.*
2dca0 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73  * code will be s
2dcb0 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43  et to SQLITE_LOC
2dcc0 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  KED..*/.case OP_
2dcd0 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62  VBegin: {.  VTab
2dce0 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54  le *pVTab;.  pVT
2dcf0 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
2dd00 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  ab;.  rc = sqlit
2dd10 65 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20  e3VtabBegin(db, 
2dd20 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56  pVTab);.  if( pV
2dd30 54 61 62 20 29 20 73 71 6c 69 74 65 33 56 74 61  Tab ) sqlite3Vta
2dd40 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
2dd50 20 70 56 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a   pVTab->pVtab);.
2dd60 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2dd70 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2dd80 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2dd90 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2dda0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2ddb0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43  LE./* Opcode: VC
2ddc0 72 65 61 74 65 20 50 31 20 2a 20 2a 20 50 34 20  reate P1 * * P4 
2ddd0 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68  *.**.** P4 is th
2dde0 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74  e name of a virt
2ddf0 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74  ual table in dat
2de00 61 62 61 73 65 20 50 31 2e 20 43 61 6c 6c 20 74  abase P1. Call t
2de10 68 65 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f  he xCreate metho
2de20 64 0a 2a 2a 20 66 6f 72 20 74 68 61 74 20 74 61  d.** for that ta
2de30 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
2de40 56 43 72 65 61 74 65 3a 20 7b 0a 20 20 72 63 20  VCreate: {.  rc 
2de50 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  = sqlite3VtabCal
2de60 6c 43 72 65 61 74 65 28 64 62 2c 20 70 4f 70 2d  lCreate(db, pOp-
2de70 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  >p1, pOp->p4.z, 
2de80 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20  &p->zErrMsg);.  
2de90 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2dea0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
2deb0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
2dec0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2ded0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2dee0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73  ./* Opcode: VDes
2def0 74 72 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a  troy P1 * * P4 *
2df00 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65  .**.** P4 is the
2df10 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75   name of a virtu
2df20 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61  al table in data
2df30 62 61 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74  base P1.  Call t
2df40 68 65 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68  he xDestroy meth
2df50 6f 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61  od.** of that ta
2df60 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
2df70 56 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20 70 2d  VDestroy: {.  p-
2df80 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
2df90 32 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  2;.  rc = sqlite
2dfa0 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79  3VtabCallDestroy
2dfb0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
2dfc0 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69  p->p4.z);.  p->i
2dfd0 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b  nVtabMethod = 0;
2dfe0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2dff0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2e000 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
2e010 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
2e020 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2e030 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
2e040 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a  Open P1 * * P4 *
2e050 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
2e060 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74  ointer to a virt
2e070 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  ual table object
2e080 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  , an sqlite3_vta
2e090 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20  b structure..** 
2e0a0 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e  P1 is a cursor n
2e0b0 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63  umber.  This opc
2e0c0 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73  ode opens a curs
2e0d0 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74 75 61  or to the virtua
2e0e0 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73  l.** table and s
2e0f0 74 6f 72 65 73 20 74 68 61 74 20 63 75 72 73 6f  tores that curso
2e100 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65  r in P1..*/.case
2e110 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56   OP_VOpen: {.  V
2e120 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
2e130 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  .  sqlite3_vtab_
2e140 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72  cursor *pVtabCur
2e150 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  sor;.  sqlite3_v
2e160 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71  tab *pVtab;.  sq
2e170 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
2e180 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74  odule;..  assert
2e190 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
2e1a0 3b 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a 20 20  ;.  pCur = 0;.  
2e1b0 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 30 3b  pVtabCursor = 0;
2e1c0 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
2e1d0 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b  p4.pVtab->pVtab;
2e1e0 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71  .  pModule = (sq
2e1f0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70  lite3_module *)p
2e200 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
2e210 20 61 73 73 65 72 74 28 70 56 74 61 62 20 26 26   assert(pVtab &&
2e220 20 70 4d 6f 64 75 6c 65 29 3b 0a 20 20 72 63 20   pModule);.  rc 
2e230 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e  = pModule->xOpen
2e240 28 70 56 74 61 62 2c 20 26 70 56 74 61 62 43 75  (pVtab, &pVtabCu
2e250 72 73 6f 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  rsor);.  sqlite3
2e260 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
2e270 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  (p, pVtab);.  if
2e280 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20  ( SQLITE_OK==rc 
2e290 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61  ){.    /* Initia
2e2a0 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61  lize sqlite3_vta
2e2b0 62 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c  b_cursor base cl
2e2c0 61 73 73 20 2a 2f 0a 20 20 20 20 70 56 74 61 62  ass */.    pVtab
2e2d0 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20  Cursor->pVtab = 
2e2e0 70 56 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49  pVtab;..    /* I
2e2f0 6e 69 74 69 61 6c 69 7a 65 20 76 64 62 65 20 63  nitialize vdbe c
2e300 75 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a  ursor object */.
2e310 20 20 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63      pCur = alloc
2e320 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
2e330 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b  ->p1, 0, -1, 0);
2e340 0a 20 20 20 20 69 66 28 20 70 43 75 72 20 29 7b  .    if( pCur ){
2e350 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70 56 74  .      pCur->pVt
2e360 61 62 43 75 72 73 6f 72 20 3d 20 70 56 74 61 62  abCursor = pVtab
2e370 43 75 72 73 6f 72 3b 0a 20 20 20 20 7d 65 6c 73  Cursor;.    }els
2e380 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c  e{.      db->mal
2e390 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20  locFailed = 1;. 
2e3a0 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43       pModule->xC
2e3b0 6c 6f 73 65 28 70 56 74 61 62 43 75 72 73 6f 72  lose(pVtabCursor
2e3c0 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
2e3d0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2e3e0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
2e3f0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
2e400 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2e410 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2e420 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74  /* Opcode: VFilt
2e430 65 72 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  er P1 P2 P3 P4 *
2e440 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 50  .** Synopsis: iP
2e450 6c 61 6e 3d 72 5b 50 33 5d 20 7a 50 6c 61 6e 3d  lan=r[P3] zPlan=
2e460 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  'P4'.**.** P1 is
2e470 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64   a cursor opened
2e480 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50   using VOpen.  P
2e490 32 20 69 73 20 61 6e 20 61 64 64 72 65 73 73 20  2 is an address 
2e4a0 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a  to jump to if.**
2e4b0 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 72 65   the filtered re
2e4c0 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74  sult set is empt
2e4d0 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65  y..**.** P4 is e
2e4e0 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20  ither NULL or a 
2e4f0 73 74 72 69 6e 67 20 74 68 61 74 20 77 61 73 20  string that was 
2e500 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65  generated by the
2e510 20 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d   xBestIndex.** m
2e520 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64  ethod of the mod
2e530 75 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70  ule.  The interp
2e540 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
2e550 50 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66  P4 string is lef
2e560 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75  t.** to the modu
2e570 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
2e580 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  n..**.** This op
2e590 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
2e5a0 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20   xFilter method 
2e5b0 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  on the virtual t
2e5c0 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a  able specified.*
2e5d0 2a 20 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e  * by P1.  The in
2e5e0 74 65 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e  teger query plan
2e5f0 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46   parameter to xF
2e600 69 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64 20  ilter is stored 
2e610 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50  in register.** P
2e620 33 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 31  3. Register P3+1
2e630 20 73 74 6f 72 65 73 20 74 68 65 20 61 72 67 63   stores the argc
2e640 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65   parameter to be
2e650 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a   passed to the.*
2e660 2a 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  * xFilter method
2e670 2e 20 52 65 67 69 73 74 65 72 73 20 50 33 2b 32  . Registers P3+2
2e680 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20  ..P3+1+argc are 
2e690 74 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69  the argc.** addi
2e6a0 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72  tional parameter
2e6b0 73 20 77 68 69 63 68 20 61 72 65 20 70 61 73 73  s which are pass
2e6c0 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72  ed to.** xFilter
2e6d0 20 61 73 20 61 72 67 76 2e 20 52 65 67 69 73 74   as argv. Regist
2e6e0 65 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20  er P3+2 becomes 
2e6f0 61 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73  argv[0] when pas
2e700 73 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a  sed to xFilter..
2e710 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20  **.** A jump is 
2e720 6d 61 64 65 20 74 6f 20 50 32 20 69 66 20 74 68  made to P2 if th
2e730 65 20 72 65 73 75 6c 74 20 73 65 74 20 61 66 74  e result set aft
2e740 65 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75  er filtering wou
2e750 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a  ld be empty..*/.
2e760 63 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a  case OP_VFilter:
2e770 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a   {   /* jump */.
2e780 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e    int nArg;.  in
2e790 74 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73  t iQuery;.  cons
2e7a0 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
2e7b0 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d   *pModule;.  Mem
2e7c0 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20   *pQuery;.  Mem 
2e7d0 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c 69 74 65  *pArgc;.  sqlite
2e7e0 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70  3_vtab_cursor *p
2e7f0 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71  VtabCursor;.  sq
2e800 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
2e810 62 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  b;.  VdbeCursor 
2e820 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73  *pCur;.  int res
2e830 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d  ;.  int i;.  Mem
2e840 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75   **apArg;..  pQu
2e850 65 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  ery = &aMem[pOp-
2e860 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20  >p3];.  pArgc = 
2e870 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43  &pQuery[1];.  pC
2e880 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
2e890 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2e8a0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 51 75  ( memIsValid(pQu
2e8b0 65 72 79 29 20 29 3b 0a 20 20 52 45 47 49 53 54  ery) );.  REGIST
2e8c0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
2e8d0 2c 20 70 51 75 65 72 79 29 3b 0a 20 20 61 73 73  , pQuery);.  ass
2e8e0 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62  ert( pCur->pVtab
2e8f0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 56 74 61  Cursor );.  pVta
2e900 62 43 75 72 73 6f 72 20 3d 20 70 43 75 72 2d 3e  bCursor = pCur->
2e910 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 70  pVtabCursor;.  p
2e920 56 74 61 62 20 3d 20 70 56 74 61 62 43 75 72 73  Vtab = pVtabCurs
2e930 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f  or->pVtab;.  pMo
2e940 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
2e950 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61  odule;..  /* Gra
2e960 62 20 74 68 65 20 69 6e 64 65 78 20 6e 75 6d 62  b the index numb
2e970 65 72 20 61 6e 64 20 61 72 67 63 20 70 61 72 61  er and argc para
2e980 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61 73 73 65  meters */.  asse
2e990 72 74 28 20 28 70 51 75 65 72 79 2d 3e 66 6c 61  rt( (pQuery->fla
2e9a0 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26  gs&MEM_Int)!=0 &
2e9b0 26 20 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d  & pArgc->flags==
2e9c0 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72  MEM_Int );.  nAr
2e9d0 67 20 3d 20 28 69 6e 74 29 70 41 72 67 63 2d 3e  g = (int)pArgc->
2e9e0 75 2e 69 3b 0a 20 20 69 51 75 65 72 79 20 3d 20  u.i;.  iQuery = 
2e9f0 28 69 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e 69  (int)pQuery->u.i
2ea00 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
2ea10 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f  he xFilter metho
2ea20 64 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 72 65 73  d */.  {.    res
2ea30 20 3d 20 30 3b 0a 20 20 20 20 61 70 41 72 67 20   = 0;.    apArg 
2ea40 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20  = p->apArg;.    
2ea50 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72  for(i = 0; i<nAr
2ea60 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61  g; i++){.      a
2ea70 70 41 72 67 5b 69 5d 20 3d 20 26 70 41 72 67 63  pArg[i] = &pArgc
2ea80 5b 69 2b 31 5d 3b 0a 20 20 20 20 20 20 73 71 6c  [i+1];.      sql
2ea90 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65  ite3VdbeMemStore
2eaa0 54 79 70 65 28 61 70 41 72 67 5b 69 5d 29 3b 0a  Type(apArg[i]);.
2eab0 20 20 20 20 7d 0a 0a 20 20 20 20 70 2d 3e 69 6e      }..    p->in
2eac0 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a  VtabMethod = 1;.
2ead0 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65      rc = pModule
2eae0 2d 3e 78 46 69 6c 74 65 72 28 70 56 74 61 62 43  ->xFilter(pVtabC
2eaf0 75 72 73 6f 72 2c 20 69 51 75 65 72 79 2c 20 70  ursor, iQuery, p
2eb00 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20  Op->p4.z, nArg, 
2eb10 61 70 41 72 67 29 3b 0a 20 20 20 20 70 2d 3e 69  apArg);.    p->i
2eb20 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b  nVtabMethod = 0;
2eb30 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62  .    sqlite3Vtab
2eb40 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
2eb50 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20  pVtab);.    if( 
2eb60 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
2eb70 0a 20 20 20 20 20 20 72 65 73 20 3d 20 70 4d 6f  .      res = pMo
2eb80 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56 74 61 62  dule->xEof(pVtab
2eb90 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 0a  Cursor);.    }..
2eba0 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
2ebb0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
2ebc0 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  2 - 1;.    }.  }
2ebd0 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  .  pCur->nullRow
2ebe0 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a   = 0;..  break;.
2ebf0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2ec00 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2ec10 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2ec20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2ec30 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2ec40 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20  ode: VColumn P1 
2ec50 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
2ec60 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 76 63 6f  opsis: r[P3]=vco
2ec70 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a 2a 2a 20 53  lumn(P2).**.** S
2ec80 74 6f 72 65 20 74 68 65 20 76 61 6c 75 65 20 6f  tore the value o
2ec90 66 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75  f the P2-th colu
2eca0 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77  mn of.** the row
2ecb0 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 2d   of the virtual-
2ecc0 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 0a  table that the .
2ecd0 2a 2a 20 50 31 20 63 75 72 73 6f 72 20 69 73 20  ** P1 cursor is 
2ece0 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f  pointing to into
2ecf0 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f   register P3..*/
2ed00 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e  .case OP_VColumn
2ed10 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  : {.  sqlite3_vt
2ed20 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e  ab *pVtab;.  con
2ed30 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
2ed40 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65  e *pModule;.  Me
2ed50 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c 69  m *pDest;.  sqli
2ed60 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e  te3_context sCon
2ed70 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43 75 72  text;..  VdbeCur
2ed80 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61  sor *pCur = p->a
2ed90 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2eda0 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70   assert( pCur->p
2edb0 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20  VtabCursor );.  
2edc0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
2edd0 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
2ede0 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
2edf0 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20  r) );.  pDest = 
2ee00 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2ee10 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
2ee20 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20  ge(p, pDest);.  
2ee30 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  if( pCur->nullRo
2ee40 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  w ){.    sqlite3
2ee50 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
2ee60 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  Dest);.    break
2ee70 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20  ;.  }.  pVtab = 
2ee80 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2ee90 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  r->pVtab;.  pMod
2eea0 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
2eeb0 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20  dule;.  assert( 
2eec0 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e  pModule->xColumn
2eed0 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 43   );.  memset(&sC
2eee0 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f  ontext, 0, sizeo
2eef0 66 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a 0a 20  f(sContext));.. 
2ef00 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74 20 63   /* The output c
2ef10 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64 79 20  ell may already 
2ef20 68 61 76 65 20 61 20 62 75 66 66 65 72 20 61 6c  have a buffer al
2ef30 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20  located. Move.  
2ef40 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74 20 63  ** the current c
2ef50 6f 6e 74 65 6e 74 73 20 74 6f 20 73 43 6f 6e 74  ontents to sCont
2ef60 65 78 74 2e 73 20 73 6f 20 69 6e 20 63 61 73 65  ext.s so in case
2ef70 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69   the user-functi
2ef80 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e 20 75 73 65  on .  ** can use
2ef90 20 74 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c   the already all
2efa0 6f 63 61 74 65 64 20 62 75 66 66 65 72 20 69 6e  ocated buffer in
2efb0 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74  stead of allocat
2efc0 69 6e 67 20 61 20 0a 20 20 2a 2a 20 6e 65 77 20  ing a .  ** new 
2efd0 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  one..  */.  sqli
2efe0 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26  te3VdbeMemMove(&
2eff0 73 43 6f 6e 74 65 78 74 2e 73 2c 20 70 44 65 73  sContext.s, pDes
2f000 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  t);.  MemSetType
2f010 46 6c 61 67 28 26 73 43 6f 6e 74 65 78 74 2e 73  Flag(&sContext.s
2f020 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20  , MEM_Null);..  
2f030 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  rc = pModule->xC
2f040 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56 74 61  olumn(pCur->pVta
2f050 62 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e 74 65  bCursor, &sConte
2f060 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  xt, pOp->p2);.  
2f070 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
2f080 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
2f090 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74 65 78  );.  if( sContex
2f0a0 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  t.isError ){.   
2f0b0 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69   rc = sContext.i
2f0c0 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f  sError;.  }..  /
2f0d0 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c  * Copy the resul
2f0e0 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
2f0f0 6e 20 74 6f 20 74 68 65 20 50 33 20 72 65 67 69  n to the P3 regi
2f100 73 74 65 72 2e 20 57 65 0a 20 20 2a 2a 20 64 6f  ster. We.  ** do
2f110 20 74 68 69 73 20 72 65 67 61 72 64 6c 65 73 73   this regardless
2f120 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e   of whether or n
2f130 6f 74 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75  ot an error occu
2f140 72 72 65 64 20 74 6f 20 65 6e 73 75 72 65 20 61  rred to ensure a
2f150 6e 79 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63 20  ny.  ** dynamic 
2f160 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 20 73 43  allocation in sC
2f170 6f 6e 74 65 78 74 2e 73 20 28 61 20 4d 65 6d 20  ontext.s (a Mem 
2f180 73 74 72 75 63 74 29 20 69 73 20 20 72 65 6c 65  struct) is  rele
2f190 61 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c  ased..  */.  sql
2f1a0 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
2f1b0 63 6f 64 69 6e 67 28 26 73 43 6f 6e 74 65 78 74  coding(&sContext
2f1c0 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  .s, encoding);. 
2f1d0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
2f1e0 6f 76 65 28 70 44 65 73 74 2c 20 26 73 43 6f 6e  ove(pDest, &sCon
2f1f0 74 65 78 74 2e 73 29 3b 0a 20 20 52 45 47 49 53  text.s);.  REGIS
2f200 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
2f210 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55 50 44  3, pDest);.  UPD
2f220 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
2f230 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28 20  (pDest);..  if( 
2f240 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
2f250 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20  oBig(pDest) ){. 
2f260 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
2f270 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2f280 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2f290 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2f2a0 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2f2b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2f2c0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2f2d0 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a  e: VNext P1 P2 *
2f2e0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e   * *.**.** Advan
2f2f0 63 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ce virtual table
2f300 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20   P1 to the next 
2f310 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c  row in its resul
2f320 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d  t set and.** jum
2f330 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
2f340 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65   P2.  Or, if the
2f350 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68   virtual table h
2f360 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68  as reached.** th
2f370 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73  e end of its res
2f380 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61  ult set, then fa
2f390 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
2f3a0 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
2f3b0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  on..*/.case OP_V
2f3c0 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  Next: {   /* jum
2f3d0 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  p */.  sqlite3_v
2f3e0 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
2f3f0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
2f400 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  le *pModule;.  i
2f410 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65 43 75  nt res;.  VdbeCu
2f420 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72  rsor *pCur;..  r
2f430 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d  es = 0;.  pCur =
2f440 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2f450 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2f460 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  ur->pVtabCursor 
2f470 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e  );.  if( pCur->n
2f480 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72  ullRow ){.    br
2f490 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62  eak;.  }.  pVtab
2f4a0 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75   = pCur->pVtabCu
2f4b0 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
2f4c0 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
2f4d0 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
2f4e0 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78  t( pModule->xNex
2f4f0 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  t );..  /* Invok
2f500 65 20 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65  e the xNext() me
2f510 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75  thod of the modu
2f520 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20  le. There is no 
2f530 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  way for the.  **
2f540 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c   underlying impl
2f550 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65  ementation to re
2f560 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66  turn an error if
2f570 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69   one occurs duri
2f580 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e  ng.  ** xNext().
2f590 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20   Instead, if an 
2f5a0 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72  error occurs, tr
2f5b0 75 65 20 69 73 20 72 65 74 75 72 6e 65 64 20 28  ue is returned (
2f5c0 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20  indicating that 
2f5d0 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76  .  ** data is av
2f5e0 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65  ailable) and the
2f5f0 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75   error code retu
2f600 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d  rned when xColum
2f610 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f  n or.  ** some o
2f620 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e  ther method is n
2f630 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74  ext invoked on t
2f640 68 65 20 73 61 76 65 20 76 69 72 74 75 61 6c 20  he save virtual 
2f650 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20  table cursor..  
2f660 2a 2f 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  */.  p->inVtabMe
2f670 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d  thod = 1;.  rc =
2f680 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28   pModule->xNext(
2f690 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2f6a0 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d  r);.  p->inVtabM
2f6b0 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 73 71 6c  ethod = 0;.  sql
2f6c0 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
2f6d0 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
2f6e0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2f6f0 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73 20 3d  _OK ){.    res =
2f700 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70   pModule->xEof(p
2f710 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2f720 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 21 72  );.  }..  if( !r
2f730 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  es ){.    /* If 
2f740 74 68 65 72 65 20 69 73 20 64 61 74 61 2c 20 6a  there is data, j
2f750 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20  ump to P2 */.   
2f760 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
2f770 31 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68  1;.  }.  goto ch
2f780 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
2f790 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  t;.}.#endif /* S
2f7a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2f7b0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2f7c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2f7d0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2f7e0 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20  Opcode: VRename 
2f7f0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
2f800 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
2f810 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  r to a virtual t
2f820 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20  able object, an 
2f830 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
2f840 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20  ucture..** This 
2f850 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
2f860 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
2f870 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e   xRename method.
2f880 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   The value.** in
2f890 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
2f8a0 70 61 73 73 65 64 20 61 73 20 74 68 65 20 7a 4e  passed as the zN
2f8b0 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  ame argument to 
2f8c0 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74 68  the xRename meth
2f8d0 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  od..*/.case OP_V
2f8e0 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69  Rename: {.  sqli
2f8f0 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
2f900 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a  .  Mem *pName;..
2f910 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70    pVtab = pOp->p
2f920 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a  4.pVtab->pVtab;.
2f930 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d 65 6d 5b    pName = &aMem[
2f940 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2f950 72 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  rt( pVtab->pModu
2f960 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20  le->xRename );. 
2f970 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
2f980 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b 0a 20 20  lid(pName) );.  
2f990 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
2f9a0 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 52 45 47 49  nly==0 );.  REGI
2f9b0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
2f9c0 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20 61 73  p1, pName);.  as
2f9d0 73 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66 6c 61  sert( pName->fla
2f9e0 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 3b 0a  gs & MEM_Str );.
2f9f0 20 20 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d    testcase( pNam
2fa00 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55  e->enc==SQLITE_U
2fa10 54 46 38 20 29 3b 0a 20 20 74 65 73 74 63 61 73  TF8 );.  testcas
2fa20 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53  e( pName->enc==S
2fa30 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29 3b  QLITE_UTF16BE );
2fa40 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e 61  .  testcase( pNa
2fa50 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  me->enc==SQLITE_
2fa60 55 54 46 31 36 4c 45 20 29 3b 0a 20 20 72 63 20  UTF16LE );.  rc 
2fa70 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61  = sqlite3VdbeCha
2fa80 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4e 61 6d  ngeEncoding(pNam
2fa90 65 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b  e, SQLITE_UTF8);
2faa0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
2fab0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d  E_OK ){.    rc =
2fac0 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d   pVtab->pModule-
2fad0 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62 2c 20  >xRename(pVtab, 
2fae0 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 20 20 73  pName->z);.    s
2faf0 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
2fb00 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
2fb10 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  ;.    p->expired
2fb20 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 0;.  }.  brea
2fb30 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  k;.}.#endif..#if
2fb40 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2fb50 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
2fb60 20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74 65   Opcode: VUpdate
2fb70 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
2fb80 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 64 61 74  ** Synopsis: dat
2fb90 61 3d 72 5b 50 33 40 50 32 5d 0a 2a 2a 0a 2a 2a  a=r[P3@P2].**.**
2fba0 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
2fbb0 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61   to a virtual ta
2fbc0 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73  ble object, an s
2fbd0 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
2fbe0 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f  cture..** This o
2fbf0 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
2fc00 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
2fc10 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 2e 20  xUpdate method. 
2fc20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  P2 values.** are
2fc30 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d 6f   contiguous memo
2fc40 72 79 20 63 65 6c 6c 73 20 73 74 61 72 74 69 6e  ry cells startin
2fc50 67 20 61 74 20 50 33 20 74 6f 20 70 61 73 73 20  g at P3 to pass 
2fc60 74 6f 20 74 68 65 20 78 55 70 64 61 74 65 20 0a  to the xUpdate .
2fc70 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20 54  ** invocation. T
2fc80 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
2fc90 73 74 65 72 20 28 50 33 2b 50 32 2d 31 29 20 63  ster (P3+P2-1) c
2fca0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
2fcb0 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65 6d 65  e .** p2th eleme
2fcc0 6e 74 20 6f 66 20 74 68 65 20 61 72 67 76 20 61  nt of the argv a
2fcd0 72 72 61 79 20 70 61 73 73 65 64 20 74 6f 20 78  rray passed to x
2fce0 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  Update..**.** Th
2fcf0 65 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64  e xUpdate method
2fd00 20 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c 45 54   will do a DELET
2fd10 45 20 6f 72 20 61 6e 20 49 4e 53 45 52 54 20 6f  E or an INSERT o
2fd20 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65 20 61  r both..** The a
2fd30 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74 20 28  rgv[0] element (
2fd40 77 68 69 63 68 20 63 6f 72 72 65 73 70 6f 6e 64  which correspond
2fd50 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  s to memory cell
2fd60 20 50 33 29 0a 2a 2a 20 69 73 20 74 68 65 20 72   P3).** is the r
2fd70 6f 77 69 64 20 6f 66 20 61 20 72 6f 77 20 74 6f  owid of a row to
2fd80 20 64 65 6c 65 74 65 2e 20 20 49 66 20 61 72 67   delete.  If arg
2fd90 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74 68 65  v[0] is NULL the
2fda0 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74 69 6f  n no .** deletio
2fdb0 6e 20 6f 63 63 75 72 73 2e 20 20 54 68 65 20 61  n occurs.  The a
2fdc0 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74 20 69  rgv[1] element i
2fdd0 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  s the rowid of t
2fde0 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e 20  he new .** row. 
2fdf0 20 54 68 69 73 20 63 61 6e 20 62 65 20 4e 55 4c   This can be NUL
2fe00 4c 20 74 6f 20 68 61 76 65 20 74 68 65 20 76 69  L to have the vi
2fe10 72 74 75 61 6c 20 74 61 62 6c 65 20 73 65 6c 65  rtual table sele
2fe20 63 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72  ct the new .** r
2fe30 6f 77 69 64 20 66 6f 72 20 69 74 73 65 6c 66 2e  owid for itself.
2fe40 20 20 54 68 65 20 73 75 62 73 65 71 75 65 6e 74    The subsequent
2fe50 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68 65   elements in the
2fe60 20 61 72 72 61 79 20 61 72 65 20 0a 2a 2a 20 74   array are .** t
2fe70 68 65 20 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c  he values of col
2fe80 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65 77 20  umns in the new 
2fe90 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32  row..**.** If P2
2fea0 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e 73 65  ==1 then no inse
2feb0 72 74 20 69 73 20 70 65 72 66 6f 72 6d 65 64 2e  rt is performed.
2fec0 20 20 61 72 67 76 5b 30 5d 20 69 73 20 74 68 65    argv[0] is the
2fed0 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61 20 72   rowid of.** a r
2fee0 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a  ow to delete..**
2fef0 0a 2a 2a 20 50 31 20 69 73 20 61 20 62 6f 6f 6c  .** P1 is a bool
2ff00 65 61 6e 20 66 6c 61 67 2e 20 49 66 20 69 74 20  ean flag. If it 
2ff10 69 73 20 73 65 74 20 74 6f 20 74 72 75 65 20 61  is set to true a
2ff20 6e 64 20 74 68 65 20 78 55 70 64 61 74 65 20 63  nd the xUpdate c
2ff30 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63 65 73  all.** is succes
2ff40 73 66 75 6c 2c 20 74 68 65 6e 20 74 68 65 20 76  sful, then the v
2ff50 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79  alue returned by
2ff60 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e   sqlite3_last_in
2ff70 73 65 72 74 5f 72 6f 77 69 64 28 29 20 0a 2a 2a  sert_rowid() .**
2ff80 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76   is set to the v
2ff90 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 77 69  alue of the rowi
2ffa0 64 20 66 6f 72 20 74 68 65 20 72 6f 77 20 6a 75  d for the row ju
2ffb0 73 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 0a  st inserted..**.
2ffc0 2a 2a 20 50 35 20 69 73 20 74 68 65 20 65 72 72  ** P5 is the err
2ffd0 6f 72 20 61 63 74 69 6f 6e 73 20 28 4f 45 5f 52  or actions (OE_R
2ffe0 65 70 6c 61 63 65 2c 20 4f 45 5f 46 61 69 6c 2c  eplace, OE_Fail,
2fff0 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 65 74 63 29   OE_Ignore, etc)
30000 20 74 6f 0a 2a 2a 20 61 70 70 6c 79 20 69 6e 20   to.** apply in 
30010 74 68 65 20 63 61 73 65 20 6f 66 20 61 20 63 6f  the case of a co
30020 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 75 72 65  nstraint failure
30030 20 6f 6e 20 61 6e 20 69 6e 73 65 72 74 20 6f 72   on an insert or
30040 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65   update..*/.case
30050 20 4f 50 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20   OP_VUpdate: {. 
30060 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
30070 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Vtab;.  sqlite3_
30080 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
30090 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69  .  int nArg;.  i
300a0 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 5f 69  nt i;.  sqlite_i
300b0 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20 20 4d 65  nt64 rowid;.  Me
300c0 6d 20 2a 2a 61 70 41 72 67 3b 0a 20 20 4d 65 6d  m **apArg;.  Mem
300d0 20 2a 70 58 3b 0a 0a 20 20 61 73 73 65 72 74 28   *pX;..  assert(
300e0 20 70 4f 70 2d 3e 70 32 3d 3d 31 20 20 20 20 20   pOp->p2==1     
300f0 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f     || pOp->p5==O
30100 45 5f 46 61 69 6c 20 20 20 7c 7c 20 70 4f 70 2d  E_Fail   || pOp-
30110 3e 70 35 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b  >p5==OE_Rollback
30120 20 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d   .       || pOp-
30130 3e 70 35 3d 3d 4f 45 5f 41 62 6f 72 74 20 7c 7c  >p5==OE_Abort ||
30140 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e   pOp->p5==OE_Ign
30150 6f 72 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  ore || pOp->p5==
30160 4f 45 5f 52 65 70 6c 61 63 65 0a 20 20 29 3b 0a  OE_Replace.  );.
30170 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
30180 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 56  dOnly==0 );.  pV
30190 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56  tab = pOp->p4.pV
301a0 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  tab->pVtab;.  pM
301b0 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65 33  odule = (sqlite3
301c0 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62 2d  _module *)pVtab-
301d0 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67  >pModule;.  nArg
301e0 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
301f0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
30200 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20 20  e==P4_VTAB );.  
30210 69 66 28 20 41 4c 57 41 59 53 28 70 4d 6f 64 75  if( ALWAYS(pModu
30220 6c 65 2d 3e 78 55 70 64 61 74 65 29 20 29 7b 0a  le->xUpdate) ){.
30230 20 20 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e      u8 vtabOnCon
30240 66 6c 69 63 74 20 3d 20 64 62 2d 3e 76 74 61 62  flict = db->vtab
30250 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20  OnConflict;.    
30260 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67  apArg = p->apArg
30270 3b 0a 20 20 20 20 70 58 20 3d 20 26 61 4d 65 6d  ;.    pX = &aMem
30280 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66  [pOp->p3];.    f
30290 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
302a0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65  i++){.      asse
302b0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
302c0 58 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41  X) );.      memA
302d0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
302e0 70 58 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  pX);.      sqlit
302f0 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79  e3VdbeMemStoreTy
30300 70 65 28 70 58 29 3b 0a 20 20 20 20 20 20 61 70  pe(pX);.      ap
30310 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20 20  Arg[i] = pX;.   
30320 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20     pX++;.    }. 
30330 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e     db->vtabOnCon
30340 66 6c 69 63 74 20 3d 20 70 4f 70 2d 3e 70 35 3b  flict = pOp->p5;
30350 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  .    rc = pModul
30360 65 2d 3e 78 55 70 64 61 74 65 28 70 56 74 61 62  e->xUpdate(pVtab
30370 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 2c 20 26  , nArg, apArg, &
30380 72 6f 77 69 64 29 3b 0a 20 20 20 20 64 62 2d 3e  rowid);.    db->
30390 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d  vtabOnConflict =
303a0 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b   vtabOnConflict;
303b0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62  .    sqlite3Vtab
303c0 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
303d0 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20  pVtab);.    if( 
303e0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
303f0 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
30400 20 20 61 73 73 65 72 74 28 20 6e 41 72 67 3e 31    assert( nArg>1
30410 20 26 26 20 61 70 41 72 67 5b 30 5d 20 26 26 20   && apArg[0] && 
30420 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61 67 73  (apArg[0]->flags
30430 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20  &MEM_Null) );.  
30440 20 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69      db->lastRowi
30450 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d 20  d = lastRowid = 
30460 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 20  rowid;.    }.   
30470 20 69 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d   if( (rc&0xff)==
30480 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
30490 54 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 56 74  T && pOp->p4.pVt
304a0 61 62 2d 3e 62 43 6f 6e 73 74 72 61 69 6e 74 20  ab->bConstraint 
304b0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  ){.      if( pOp
304c0 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20  ->p5==OE_Ignore 
304d0 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
304e0 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20  SQLITE_OK;.     
304f0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
30500 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d  p->errorAction =
30510 20 28 28 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52   ((pOp->p5==OE_R
30520 65 70 6c 61 63 65 29 20 3f 20 4f 45 5f 41 62 6f  eplace) ? OE_Abo
30530 72 74 20 3a 20 70 4f 70 2d 3e 70 35 29 3b 0a 20  rt : pOp->p5);. 
30540 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
30550 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 43 68 61 6e  {.      p->nChan
30560 67 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ge++;.    }.  }.
30570 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
30580 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
30590 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
305a0 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54  ..#ifndef  SQLIT
305b0 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
305c0 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  GMAS./* Opcode: 
305d0 50 61 67 65 63 6f 75 6e 74 20 50 31 20 50 32 20  Pagecount P1 P2 
305e0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
305f0 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 6e 75  e the current nu
30600 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
30610 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20   database P1 to 
30620 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e 0a  memory cell P2..
30630 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67 65 63  */.case OP_Pagec
30640 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ount: {         
30650 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
30660 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d  lease */.  pOut-
30670 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74  >u.i = sqlite3Bt
30680 72 65 65 4c 61 73 74 50 61 67 65 28 64 62 2d 3e  reeLastPage(db->
30690 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
306a0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
306b0 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 20  ndif...#ifndef  
306c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
306d0 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63  R_PRAGMAS./* Opc
306e0 6f 64 65 3a 20 4d 61 78 50 67 63 6e 74 20 50 31  ode: MaxPgcnt P1
306f0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
30700 20 54 72 79 20 74 6f 20 73 65 74 20 74 68 65 20   Try to set the 
30710 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75  maximum page cou
30720 6e 74 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  nt for database 
30730 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P1 to the value 
30740 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74  in P3..** Do not
30750 20 6c 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d   let the maximum
30760 20 70 61 67 65 20 63 6f 75 6e 74 20 66 61 6c 6c   page count fall
30770 20 62 65 6c 6f 77 20 74 68 65 20 63 75 72 72 65   below the curre
30780 6e 74 20 70 61 67 65 20 63 6f 75 6e 74 20 61 6e  nt page count an
30790 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63 68 61 6e  d.** do not chan
307a0 67 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70  ge the maximum p
307b0 61 67 65 20 63 6f 75 6e 74 20 76 61 6c 75 65 20  age count value 
307c0 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20  if P3==0..**.** 
307d0 53 74 6f 72 65 20 74 68 65 20 6d 61 78 69 6d 75  Store the maximu
307e0 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 61 66 74  m page count aft
307f0 65 72 20 74 68 65 20 63 68 61 6e 67 65 20 69 6e  er the change in
30800 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
30810 0a 63 61 73 65 20 4f 50 5f 4d 61 78 50 67 63 6e  .case OP_MaxPgcn
30820 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
30830 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
30840 73 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  se */.  unsigned
30850 20 69 6e 74 20 6e 65 77 4d 61 78 3b 0a 20 20 42   int newMax;.  B
30860 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 70 42  tree *pBt;..  pB
30870 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
30880 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 6e 65 77 4d  >p1].pBt;.  newM
30890 61 78 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f  ax = 0;.  if( pO
308a0 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 6e 65 77  p->p3 ){.    new
308b0 4d 61 78 20 3d 20 73 71 6c 69 74 65 33 42 74 72  Max = sqlite3Btr
308c0 65 65 4c 61 73 74 50 61 67 65 28 70 42 74 29 3b  eeLastPage(pBt);
308d0 0a 20 20 20 20 69 66 28 20 6e 65 77 4d 61 78 20  .    if( newMax 
308e0 3c 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d  < (unsigned)pOp-
308f0 3e 70 33 20 29 20 6e 65 77 4d 61 78 20 3d 20 28  >p3 ) newMax = (
30900 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33  unsigned)pOp->p3
30910 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  ;.  }.  pOut->u.
30920 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  i = sqlite3Btree
30930 4d 61 78 50 61 67 65 43 6f 75 6e 74 28 70 42 74  MaxPageCount(pBt
30940 2c 20 6e 65 77 4d 61 78 29 3b 0a 20 20 62 72 65  , newMax);.  bre
30950 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f  ak;.}.#endif.../
30960 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74 20 2a  * Opcode: Init *
30970 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
30980 6e 6f 70 73 69 73 3a 20 20 53 74 61 72 74 20 61  nopsis:  Start a
30990 74 20 50 32 0a 2a 2a 0a 2a 2a 20 50 72 6f 67 72  t P2.**.** Progr
309a0 61 6d 73 20 63 6f 6e 74 61 69 6e 20 61 20 73 69  ams contain a si
309b0 6e 67 6c 65 20 69 6e 73 74 61 6e 63 65 20 6f 66  ngle instance of
309c0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61 73 20   this opcode as 
309d0 74 68 65 20 76 65 72 79 20 66 69 72 73 74 0a 2a  the very first.*
309e0 2a 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  * opcode..**.** 
309f0 49 66 20 74 72 61 63 69 6e 67 20 69 73 20 65 6e  If tracing is en
30a00 61 62 6c 65 64 20 28 62 79 20 74 68 65 20 73 71  abled (by the sq
30a10 6c 69 74 65 33 5f 74 72 61 63 65 28 29 29 20 69  lite3_trace()) i
30a20 6e 74 65 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a  nterface, then.*
30a30 2a 20 74 68 65 20 55 54 46 2d 38 20 73 74 72 69  * the UTF-8 stri
30a40 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  ng contained in 
30a50 50 34 20 69 73 20 65 6d 69 74 74 65 64 20 6f 6e  P4 is emitted on
30a60 20 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62   the trace callb
30a70 61 63 6b 2e 0a 2a 2a 20 4f 72 20 69 66 20 50 34  ack..** Or if P4
30a80 20 69 73 20 62 6c 61 6e 6b 2c 20 75 73 65 20 74   is blank, use t
30a90 68 65 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e  he string return
30aa0 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73 71  ed by sqlite3_sq
30ab0 6c 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32  l()..**.** If P2
30ac0 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 6a 75   is not zero, ju
30ad0 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
30ae0 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
30af0 5f 49 6e 69 74 3a 20 7b 20 20 20 20 20 20 20 20  _Init: {        
30b00 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 63    /* jump */.  c
30b10 68 61 72 20 2a 7a 54 72 61 63 65 3b 0a 20 20 63  har *zTrace;.  c
30b20 68 61 72 20 2a 7a 3b 0a 0a 20 20 69 66 28 20 70  har *z;..  if( p
30b30 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 70 63  Op->p2 ){.    pc
30b40 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
30b50 20 20 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49    }.#ifndef SQLI
30b60 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 20 20  TE_OMIT_TRACE.  
30b70 69 66 28 20 64 62 2d 3e 78 54 72 61 63 65 0a 20  if( db->xTrace. 
30b80 20 20 26 26 20 21 70 2d 3e 64 6f 69 6e 67 52 65    && !p->doingRe
30b90 72 75 6e 0a 20 20 20 26 26 20 28 7a 54 72 61 63  run.   && (zTrac
30ba0 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f  e = (pOp->p4.z ?
30bb0 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e   pOp->p4.z : p->
30bc0 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20  zSql))!=0.  ){. 
30bd0 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 56 64     z = sqlite3Vd
30be0 62 65 45 78 70 61 6e 64 53 71 6c 28 70 2c 20 7a  beExpandSql(p, z
30bf0 54 72 61 63 65 29 3b 0a 20 20 20 20 64 62 2d 3e  Trace);.    db->
30c00 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72 61 63  xTrace(db->pTrac
30c10 65 41 72 67 2c 20 7a 29 3b 0a 20 20 20 20 73 71  eArg, z);.    sq
30c20 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
30c30 7a 29 3b 0a 20 20 7d 0a 23 69 66 64 65 66 20 53  z);.  }.#ifdef S
30c40 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c 5f  QLITE_USE_FCNTL_
30c50 54 52 41 43 45 0a 20 20 7a 54 72 61 63 65 20 3d  TRACE.  zTrace =
30c60 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f   (pOp->p4.z ? pO
30c70 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71  p->p4.z : p->zSq
30c80 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72 61 63 65  l);.  if( zTrace
30c90 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
30ca0 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62     for(i=0; i<db
30cb0 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20  ->nDb; i++){.   
30cc0 20 20 20 69 66 28 20 4d 41 53 4b 42 49 54 28 69     if( MASKBIT(i
30cd0 29 20 26 20 70 2d 3e 62 74 72 65 65 4d 61 73 6b  ) & p->btreeMask
30ce0 29 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b  )==0 ) continue;
30cf0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
30d00 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20  ile_control(db, 
30d10 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65  db->aDb[i].zName
30d20 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 54  , SQLITE_FCNTL_T
30d30 52 41 43 45 2c 20 7a 54 72 61 63 65 29 3b 0a 20  RACE, zTrace);. 
30d40 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20     }.  }.#endif 
30d50 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 5f 46 43  /* SQLITE_USE_FC
30d60 4e 54 4c 5f 54 52 41 43 45 20 2a 2f 0a 23 69 66  NTL_TRACE */.#if
30d70 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
30d80 0a 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61 67  .  if( (db->flag
30d90 73 20 26 20 53 51 4c 49 54 45 5f 53 71 6c 54 72  s & SQLITE_SqlTr
30da0 61 63 65 29 21 3d 30 0a 20 20 20 26 26 20 28 7a  ace)!=0.   && (z
30db0 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34  Trace = (pOp->p4
30dc0 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a  .z ? pOp->p4.z :
30dd0 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20   p->zSql))!=0.  
30de0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 65  ){.    sqlite3De
30df0 62 75 67 50 72 69 6e 74 66 28 22 53 51 4c 2d 74  bugPrintf("SQL-t
30e00 72 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a 54 72  race: %s\n", zTr
30e10 61 63 65 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  ace);.  }.#endif
30e20 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
30e30 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51   */.#endif /* SQ
30e40 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20  LITE_OMIT_TRACE 
30e50 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  */.  break;.}...
30e60 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20  /* Opcode: Noop 
30e70 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  * * * * *.**.** 
30e80 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69  Do nothing.  Thi
30e90 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
30ea0 20 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 61 73   often useful as
30eb0 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69   a jump.** desti
30ec0 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a  nation..*/./*.**
30ed0 20 54 68 65 20 6d 61 67 69 63 20 45 78 70 6c 61   The magic Expla
30ee0 69 6e 20 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e  in opcode are on
30ef0 6c 79 20 69 6e 73 65 72 74 65 64 20 77 68 65 6e  ly inserted when
30f00 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69   explain==2 (whi
30f10 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 20  ch.** is to say 
30f20 77 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e  when the EXPLAIN
30f30 20 51 55 45 52 59 20 50 4c 41 4e 20 73 79 6e 74   QUERY PLAN synt
30f40 61 78 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20  ax is used.).** 
30f50 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 63 6f  This opcode reco
30f60 72 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  rds information 
30f70 66 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a  from the optimiz
30f80 65 72 2e 20 20 49 74 20 69 73 20 74 68 65 0a 2a  er.  It is the.*
30f90 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20 61 20  * the same as a 
30fa0 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70 63  no-op.  This opc
30fb0 6f 64 65 73 6e 65 76 65 72 20 61 70 70 65 61 72  odesnever appear
30fc0 73 20 69 6e 20 61 20 72 65 61 6c 20 56 4d 20 70  s in a real VM p
30fd0 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75  rogram..*/.defau
30fe0 6c 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  lt: {          /
30ff0 2a 20 54 68 69 73 20 69 73 20 72 65 61 6c 6c 79  * This is really
31000 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f   OP_Noop and OP_
31010 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73  Explain */.  ass
31020 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
31030 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70  ==OP_Noop || pOp
31040 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70  ->opcode==OP_Exp
31050 6c 61 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b  lain );.  break;
31060 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .}../***********
31070 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31080 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31090 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
310a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
310b0 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20  **.** The cases 
310c0 6f 66 20 74 68 65 20 73 77 69 74 63 68 20 73 74  of the switch st
310d0 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68  atement above th
310e0 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61  is line should a
310f0 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a  ll be indented.*
31100 2a 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20  * by 6 spaces.  
31110 42 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73  But the left-mos
31120 74 20 36 20 73 70 61 63 65 73 20 68 61 76 65 20  t 6 spaces have 
31130 62 65 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20  been removed to 
31140 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72  improve the.** r
31150 65 61 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f  eadability.  Fro
31160 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20  m this point on 
31170 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c  down, the normal
31180 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c   indentation rul
31190 65 73 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72  es are.** restor
311a0 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ed..************
311b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
311c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
311d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
311e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
311f0 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66  */.    }..#ifdef
31200 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
31210 20 20 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6c    {.      u64 el
31220 61 70 73 65 64 20 3d 20 73 71 6c 69 74 65 33 48  apsed = sqlite3H
31230 77 74 69 6d 65 28 29 20 2d 20 73 74 61 72 74 3b  wtime() - start;
31240 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 79 63 6c  .      pOp->cycl
31250 65 73 20 2b 3d 20 65 6c 61 70 73 65 64 3b 0a 20  es += elapsed;. 
31260 20 20 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b       pOp->cnt++;
31270 0a 23 69 66 20 30 0a 20 20 20 20 20 20 20 20 66  .#if 0.        f
31280 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c 20 22  printf(stdout, "
31290 25 31 30 6c 6c 75 20 22 2c 20 65 6c 61 70 73 65  %10llu ", elapse
312a0 64 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  d);.        sqli
312b0 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73  te3VdbePrintOp(s
312c0 74 64 6f 75 74 2c 20 6f 72 69 67 50 63 2c 20 26  tdout, origPc, &
312d0 61 4f 70 5b 6f 72 69 67 50 63 5d 29 3b 0a 23 65  aOp[origPc]);.#e
312e0 6e 64 69 66 0a 20 20 20 20 7d 0a 23 65 6e 64 69  ndif.    }.#endi
312f0 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f  f..    /* The fo
31300 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61 64 64  llowing code add
31310 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65  s nothing to the
31320 20 61 63 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e   actual function
31330 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20  ality.    ** of 
31340 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 74  the program.  It
31350 20 69 73 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f   is only here fo
31360 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65  r testing and de
31370 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20  bugging..    ** 
31380 4f 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e  On the other han
31390 64 2c 20 69 74 20 64 6f 65 73 20 62 75 72 6e 20  d, it does burn 
313a0 43 50 55 20 63 79 63 6c 65 73 20 65 76 65 72 79  CPU cycles every
313b0 20 74 69 6d 65 20 74 68 72 6f 75 67 68 0a 20 20   time through.  
313c0 20 20 2a 2a 20 74 68 65 20 65 76 61 6c 75 61 74    ** the evaluat
313d0 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20  or loop.  So we 
313e0 63 61 6e 20 6c 65 61 76 65 20 69 74 20 6f 75 74  can leave it out
313f0 20 77 68 65 6e 20 4e 44 45 42 55 47 20 69 73 20   when NDEBUG is 
31400 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a  defined..    */.
31410 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20  #ifndef NDEBUG. 
31420 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d 2d     assert( pc>=-
31430 31 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29  1 && pc<p->nOp )
31440 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
31450 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 64  _DEBUG.    if( d
31460 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
31470 45 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a 20  E_VdbeTrace ){. 
31480 20 20 20 20 20 69 66 28 20 72 63 21 3d 30 20 29       if( rc!=0 )
31490 20 70 72 69 6e 74 66 28 22 72 63 3d 25 64 5c 6e   printf("rc=%d\n
314a0 22 2c 72 63 29 3b 0a 20 20 20 20 20 20 69 66 28  ",rc);.      if(
314b0 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20   pOp->opflags & 
314c0 28 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52  (OPFLG_OUT2_PRER
314d0 45 4c 45 41 53 45 7c 4f 50 46 4c 47 5f 4f 55 54  ELEASE|OPFLG_OUT
314e0 32 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65  2) ){.        re
314f0 67 69 73 74 65 72 54 72 61 63 65 28 70 4f 70 2d  gisterTrace(pOp-
31500 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p2, &aMem[pOp->
31510 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p2]);.      }.  
31520 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66      if( pOp->opf
31530 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54  lags & OPFLG_OUT
31540 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67  3 ){.        reg
31550 69 73 74 65 72 54 72 61 63 65 28 70 4f 70 2d 3e  isterTrace(pOp->
31560 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  p3, &aMem[pOp->p
31570 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  3]);.      }.   
31580 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53 51   }.#endif  /* SQ
31590 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65  LITE_DEBUG */.#e
315a0 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42 55 47 20  ndif  /* NDEBUG 
315b0 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20 65  */.  }  /* The e
315c0 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 28 3b 3b  nd of the for(;;
315d0 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70 73  ) loop the loops
315e0 20 74 68 72 6f 75 67 68 20 6f 70 63 6f 64 65 73   through opcodes
315f0 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20   */..  /* If we 
31600 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74  reach this point
31610 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  , it means that 
31620 65 78 65 63 75 74 69 6f 6e 20 69 73 20 66 69 6e  execution is fin
31630 69 73 68 65 64 20 77 69 74 68 0a 20 20 2a 2a 20  ished with.  ** 
31640 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d 65  an error of some
31650 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62 65   kind..  */.vdbe
31660 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20 61  _error_halt:.  a
31670 73 73 65 72 74 28 20 72 63 20 29 3b 0a 20 20 70  ssert( rc );.  p
31680 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 74 65 73  ->rc = rc;.  tes
31690 74 63 61 73 65 28 20 73 71 6c 69 74 65 33 47 6c  tcase( sqlite3Gl
316a0 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21  obalConfig.xLog!
316b0 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  =0 );.  sqlite3_
316c0 6c 6f 67 28 72 63 2c 20 22 73 74 61 74 65 6d 65  log(rc, "stateme
316d0 6e 74 20 61 62 6f 72 74 73 20 61 74 20 25 64 3a  nt aborts at %d:
316e0 20 5b 25 73 5d 20 25 73 22 2c 20 0a 20 20 20 20   [%s] %s", .    
316f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
31700 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a  c, p->zSql, p->z
31710 45 72 72 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74  ErrMsg);.  sqlit
31720 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20  e3VdbeHalt(p);. 
31730 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
31740 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 20 64 62  IOERR_NOMEM ) db
31750 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d  ->mallocFailed =
31760 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54   1;.  rc = SQLIT
31770 45 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72  E_ERROR;.  if( r
31780 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
31790 74 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  t>0 ){.    sqlit
317a0 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61  e3ResetOneSchema
317b0 28 64 62 2c 20 72 65 73 65 74 53 63 68 65 6d 61  (db, resetSchema
317c0 4f 6e 46 61 75 6c 74 2d 31 29 3b 0a 20 20 7d 0a  OnFault-1);.  }.
317d0 0a 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68  .  /* This is th
317e0 65 20 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f  e only way out o
317f0 66 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65  f this procedure
31800 2e 20 20 57 65 20 68 61 76 65 20 74 6f 0a 20 20  .  We have to.  
31810 2a 2a 20 72 65 6c 65 61 73 65 20 74 68 65 20 6d  ** release the m
31820 75 74 65 78 65 73 20 6f 6e 20 62 74 72 65 65 73  utexes on btrees
31830 20 74 68 61 74 20 77 65 72 65 20 61 63 71 75 69   that were acqui
31840 72 65 64 20 61 74 20 74 68 65 0a 20 20 2a 2a 20  red at the.  ** 
31850 74 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74  top. */.vdbe_ret
31860 75 72 6e 3a 0a 20 20 64 62 2d 3e 6c 61 73 74 52  urn:.  db->lastR
31870 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64  owid = lastRowid
31880 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 56  ;.  testcase( nV
31890 6d 53 74 65 70 3e 30 20 29 3b 0a 20 20 70 2d 3e  mStep>0 );.  p->
318a0 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f  aCounter[SQLITE_
318b0 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54  STMTSTATUS_VM_ST
318c0 45 50 5d 20 2b 3d 20 28 69 6e 74 29 6e 56 6d 53  EP] += (int)nVmS
318d0 74 65 70 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  tep;.  sqlite3Vd
318e0 62 65 4c 65 61 76 65 28 70 29 3b 0a 20 20 72 65  beLeave(p);.  re
318f0 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a  turn rc;..  /* J
31900 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61  ump to here if a
31910 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
31920 6c 61 72 67 65 72 20 74 68 61 6e 20 53 51 4c 49  larger than SQLI
31930 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20  TE_MAX_LENGTH.  
31940 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  ** is encountere
31950 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a  d..  */.too_big:
31960 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  .  sqlite3SetStr
31970 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
31980 20 64 62 2c 20 22 73 74 72 69 6e 67 20 6f 72 20   db, "string or 
31990 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a  blob too big");.
319a0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f    rc = SQLITE_TO
319b0 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62  OBIG;.  goto vdb
319c0 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
319d0 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
319e0 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
319f0 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65  ails..  */.no_me
31a00 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  m:.  db->mallocF
31a10 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c  ailed = 1;.  sql
31a20 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
31a30 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
31a40 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b  out of memory");
31a50 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e  .  rc = SQLITE_N
31a60 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62  OMEM;.  goto vdb
31a70 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
31a80 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
31a90 20 66 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6b   for any other k
31aa0 69 6e 64 20 6f 66 20 66 61 74 61 6c 20 65 72 72  ind of fatal err
31ab0 6f 72 2e 20 20 54 68 65 20 22 72 63 22 20 76 61  or.  The "rc" va
31ac0 72 69 61 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75  riable.  ** shou
31ad0 6c 64 20 68 6f 6c 64 20 74 68 65 20 65 72 72 6f  ld hold the erro
31ae0 72 20 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61  r number..  */.a
31af0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
31b00 72 3a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  r:.  assert( p->
31b10 7a 45 72 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20  zErrMsg==0 );.  
31b20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
31b30 69 6c 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49  iled ) rc = SQLI
31b40 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20  TE_NOMEM;.  if( 
31b50 72 63 21 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52  rc!=SQLITE_IOERR
31b60 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71  _NOMEM ){.    sq
31b70 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
31b80 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
31b90 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72  "%s", sqlite3Err
31ba0 53 74 72 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20  Str(rc));.  }.  
31bb0 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
31bc0 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
31bd0 20 74 6f 20 68 65 72 65 20 69 66 20 74 68 65 20   to here if the 
31be0 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
31bf0 74 28 29 20 41 50 49 20 73 65 74 73 20 74 68 65  t() API sets the
31c00 20 69 6e 74 65 72 72 75 70 74 0a 20 20 2a 2a 20   interrupt.  ** 
31c10 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74  flag..  */.abort
31c20 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70  _due_to_interrup
31c30 74 3a 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  t:.  assert( db-
31c40 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
31c50 64 20 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  d );.  rc = SQLI
31c60 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
31c70 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71  p->rc = rc;.  sq
31c80 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
31c90 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
31ca0 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72  "%s", sqlite3Err
31cb0 53 74 72 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f  Str(rc));.  goto
31cc0 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
31cd0 3b 0a 7d 0a                                      ;.}.