/ Hex Artifact Content
Login

Artifact 8c6fc7bb9f2218c0e43f24d847e596effa8671e2:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 79   like that every
0520: 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66   happens..*/.#if
0530: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
0540: 0a 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f  .# define memAbo
0550: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20  utToChange(P,M) 
0560: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62  sqlite3VdbeMemAb
0570: 6f 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29  outToChange(P,M)
0580: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
0590: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
05a0: 28 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (P,M).#endif../*
05b0: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
05c0: 67 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  g global variabl
05d0: 65 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  e is incremented
05e0: 20 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75   every time a cu
05f0: 72 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65  rsor.** moves, e
0600: 69 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f  ither by the OP_
0610: 53 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c  SeekXX, OP_Next,
0620: 20 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f   or OP_Prev opco
0630: 64 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a  des.  The test.*
0640: 2a 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  * procedures use
0650: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0660: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0670: 68 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a  hat indices are.
0680: 2a 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65  ** working corre
0690: 63 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69  ctly.  This vari
06a0: 61 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63  able has no func
06b0: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
06c0: 74 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66  to.** help verif
06d0: 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70  y the correct op
06e0: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c  eration of the l
06f0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0700: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0710: 74 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68  t sqlite3_search
0720: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0730: 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74  if../*.** When t
0740: 68 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  his global varia
0750: 62 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c  ble is positive,
0760: 20 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65   it gets decreme
0770: 6e 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65  nted once before
0780: 0a 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63  .** each instruc
0790: 74 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45  tion in the VDBE
07a0: 2e 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68  .  When it reach
07b0: 65 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e  es zero, the u1.
07c0: 69 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a  isInterrupted.**
07d0: 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71   field of the sq
07e0: 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20  lite3 structure 
07f0: 69 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20  is set in order 
0800: 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69  to simulate an i
0810: 6e 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20  nterrupt..**.** 
0820: 54 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73  This facility is
0830: 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e   used for testin
0840: 67 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e  g purposes only.
0850: 20 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75    It does not fu
0860: 6e 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20  nction.** in an 
0870: 6f 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a  ordinary build..
0880: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
0890: 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65  _TEST.int sqlite
08a0: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
08b0: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
08c0: 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c  *.** The next gl
08d0: 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73  obal variable is
08e0: 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63   incremented eac
08f0: 68 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f  h type the OP_So
0900: 72 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20  rt opcode.** is 
0910: 65 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74  executed.  The t
0920: 65 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75  est procedures u
0930: 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74  se this informat
0940: 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65  ion to make sure
0950: 20 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67   that.** sorting
0960: 20 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72   is occurring or
0970: 20 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61   not occurring a
0980: 74 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69  t appropriate ti
0990: 6d 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69  mes.   This vari
09a0: 61 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66  able.** has no f
09b0: 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68  unction other th
09c0: 61 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66  an to help verif
09d0: 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70  y the correct op
09e0: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  eration of the.*
09f0: 2a 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69  * library..*/.#i
0a00: 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
0a10: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72  .int sqlite3_sor
0a20: 74 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e  t_count = 0;.#en
0a30: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e  dif../*.** The n
0a40: 65 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  ext global varia
0a50: 62 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20  ble records the 
0a60: 73 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67  size of the larg
0a70: 65 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20  est MEM_Blob.** 
0a80: 6f 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20  or MEM_Str that 
0a90: 68 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79  has been used by
0aa0: 20 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20   a VDBE opcode. 
0ab0: 20 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64   The test proced
0ac0: 75 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73  ures.** use this
0ad0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20   information to 
0ae0: 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74  make sure that t
0af0: 68 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e  he zero-blob fun
0b00: 63 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73  ctionality.** is
0b10: 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74   working correct
0b20: 6c 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  ly.   This varia
0b30: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
0b40: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
0b50: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
0b60: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
0b70: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
0b80: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0b90: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0ba0: 20 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f   sqlite3_max_blo
0bb0: 62 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69  bsize = 0;.stati
0bc0: 63 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78  c void updateMax
0bd0: 42 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29  Blobsize(Mem *p)
0be0: 7b 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67  {.  if( (p->flag
0bf0: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
0c00: 5f 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d  _Blob))!=0 && p-
0c10: 3e 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62  >n>sqlite3_max_b
0c20: 6c 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73  lobsize ){.    s
0c30: 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73  qlite3_max_blobs
0c40: 69 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a  ize = p->n;.  }.
0c50: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
0c60: 54 68 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20  The next global 
0c70: 76 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72  variable is incr
0c80: 65 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d  emented each tim
0c90: 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f  e the OP_Found o
0ca0: 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63  pcode.** is exec
0cb0: 75 74 65 64 2e 20 54 68 69 73 20 69 73 20 75 73  uted. This is us
0cc0: 65 64 20 74 6f 20 74 65 73 74 20 77 68 65 74 68  ed to test wheth
0cd0: 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f  er or not the fo
0ce0: 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65  reign key.** ope
0cf0: 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  ration implement
0d00: 65 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73  ed using OP_FkIs
0d10: 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e  Zero is working.
0d20: 20 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a   This variable.*
0d30: 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f  * has no functio
0d40: 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20  n other than to 
0d50: 68 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20  help verify the 
0d60: 63 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f  correct operatio
0d70: 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72  n of the.** libr
0d80: 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ary..*/.#ifdef S
0d90: 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73  QLITE_TEST.int s
0da0: 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75  qlite3_found_cou
0db0: 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a  nt = 0;.#endif..
0dc0: 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67  /*.** Test a reg
0dd0: 69 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20  ister to see if 
0de0: 69 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63  it exceeds the c
0df0: 75 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62  urrent maximum b
0e00: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20  lob size..** If 
0e10: 69 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20  it does, record 
0e20: 74 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20  the new maximum 
0e30: 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69  blob size..*/.#i
0e40: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
0e50: 5f 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e  _TEST) && !defin
0e60: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ed(SQLITE_OMIT_B
0e70: 55 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64  UILTIN_TEST).# d
0e80: 65 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58  efine UPDATE_MAX
0e90: 5f 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70  _BLOBSIZE(P)  up
0ea0: 64 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28  dateMaxBlobsize(
0eb0: 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  P).#else.# defin
0ec0: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
0ed0: 42 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a  BSIZE(P).#endif.
0ee0: 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68  ./*.** Invoke th
0ef0: 65 20 56 44 42 45 20 63 6f 76 65 72 61 67 65 20  e VDBE coverage 
0f00: 63 61 6c 6c 62 61 63 6b 2c 20 69 66 20 74 68 61  callback, if tha
0f10: 74 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 64 65  t callback is de
0f20: 66 69 6e 65 64 2e 20 20 54 68 69 73 0a 2a 2a 20  fined.  This.** 
0f30: 66 65 61 74 75 72 65 20 69 73 20 75 73 65 64 20  feature is used 
0f40: 66 6f 72 20 74 65 73 74 20 73 75 69 74 65 20 76  for test suite v
0f50: 61 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c 79 20 61  alidation only a
0f60: 6e 64 20 64 6f 65 73 20 6e 6f 74 20 61 70 70 65  nd does not appe
0f70: 61 72 20 61 6e 0a 2a 2a 20 70 72 6f 64 75 63 74  ar an.** product
0f80: 69 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a  ion builds..**.*
0f90: 2a 20 4d 20 69 73 20 61 6e 20 69 6e 74 65 67 65  * M is an intege
0fa0: 72 2c 20 32 20 6f 72 20 33 2c 20 74 68 61 74 20  r, 2 or 3, that 
0fb0: 69 6e 64 69 63 65 73 20 68 6f 77 20 6d 61 6e 79  indices how many
0fc0: 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20   different ways 
0fd0: 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 63 61  the.** branch ca
0fe0: 6e 20 67 6f 2e 20 20 49 74 20 69 73 20 75 73 75  n go.  It is usu
0ff0: 61 6c 6c 79 20 32 2e 20 20 22 49 22 20 69 73 20  ally 2.  "I" is 
1000: 74 68 65 20 64 69 72 65 63 74 69 6f 6e 20 74 68  the direction th
1010: 65 20 62 72 61 6e 63 68 0a 2a 2a 20 67 6f 65 73  e branch.** goes
1020: 2e 20 20 30 20 6d 65 61 6e 73 20 66 61 6c 6c 73  .  0 means falls
1030: 20 74 68 72 6f 75 67 68 2e 20 20 31 20 6d 65 61   through.  1 mea
1040: 6e 73 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b  ns branch is tak
1050: 65 6e 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65  en.  2 means the
1060: 0a 2a 2a 20 73 65 63 6f 6e 64 20 61 6c 74 65 72  .** second alter
1070: 6e 61 74 69 76 65 20 62 72 61 6e 63 68 20 69 73  native branch is
1080: 20 74 61 6b 65 6e 2e 0a 2a 2f 0a 23 69 66 20 21   taken..*/.#if !
1090: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56  defined(SQLITE_V
10a0: 44 42 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20  DBE_COVERAGE).# 
10b0: 64 65 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63  define VdbeBranc
10c0: 68 54 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73  hTaken(I,M).#els
10d0: 65 0a 23 20 64 65 66 69 6e 65 20 56 64 62 65 42  e.# define VdbeB
10e0: 72 61 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20  ranchTaken(I,M) 
10f0: 76 64 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70  vdbeTakeBranch(p
1100: 4f 70 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d  Op->iSrcLine,I,M
1110: 29 0a 20 20 73 74 61 74 69 63 20 76 6f 69 64 20  ).  static void 
1120: 76 64 62 65 54 61 6b 65 42 72 61 6e 63 68 28 69  vdbeTakeBranch(i
1130: 6e 74 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20  nt iSrcLine, u8 
1140: 49 2c 20 75 38 20 4d 29 7b 0a 20 20 20 20 69 66  I, u8 M){.    if
1150: 28 20 69 53 72 63 4c 69 6e 65 3c 3d 32 20 26 26  ( iSrcLine<=2 &&
1160: 20 41 4c 57 41 59 53 28 69 53 72 63 4c 69 6e 65   ALWAYS(iSrcLine
1170: 3e 30 29 20 29 7b 0a 20 20 20 20 20 20 4d 20 3d  >0) ){.      M =
1180: 20 69 53 72 63 4c 69 6e 65 3b 0a 20 20 20 20 20   iSrcLine;.     
1190: 20 2f 2a 20 41 73 73 65 72 74 20 74 68 65 20 74   /* Assert the t
11a0: 72 75 74 68 20 6f 66 20 56 64 62 65 43 6f 76 65  ruth of VdbeCove
11b0: 72 61 67 65 41 6c 77 61 79 73 54 61 6b 65 6e 28  rageAlwaysTaken(
11c0: 29 20 61 6e 64 20 0a 20 20 20 20 20 20 2a 2a 20  ) and .      ** 
11d0: 56 64 62 65 43 6f 76 65 72 61 67 65 4e 65 76 65  VdbeCoverageNeve
11e0: 72 54 61 6b 65 6e 28 29 20 2a 2f 0a 20 20 20 20  rTaken() */.    
11f0: 20 20 61 73 73 65 72 74 28 20 28 4d 20 26 20 49    assert( (M & I
1200: 29 3d 3d 49 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==I );.    }els
1210: 65 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  e{.      if( sql
1220: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
1230: 2e 78 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20  .xVdbeBranch==0 
1240: 29 20 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f  ) return;  /*NO_
1250: 54 45 53 54 2a 2f 0a 20 20 20 20 20 20 73 71 6c  TEST*/.      sql
1260: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
1270: 2e 78 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c  .xVdbeBranch(sql
1280: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
1290: 2e 70 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c  .pVdbeBranchArg,
12a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c0: 20 20 20 20 20 20 20 69 53 72 63 4c 69 6e 65 2c         iSrcLine,
12d0: 49 2c 4d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  I,M);.    }.  }.
12e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f  #endif../*.** Co
12f0: 6e 76 65 72 74 20 74 68 65 20 67 69 76 65 6e 20  nvert the given 
1300: 72 65 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20  register into a 
1310: 73 74 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e  string if it isn
1320: 27 74 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64  't one.** alread
1330: 79 2e 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65  y. Return non-ze
1340: 72 6f 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29  ro if a malloc()
1350: 20 66 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69   fails..*/.#defi
1360: 6e 65 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20  ne Stringify(P, 
1370: 65 6e 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50  enc) \.   if(((P
1380: 29 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74  )->flags&(MEM_St
1390: 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20  r|MEM_Blob))==0 
13a0: 26 26 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  && sqlite3VdbeMe
13b0: 6d 53 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63  mStringify(P,enc
13c0: 29 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f  )) \.     { goto
13d0: 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a   no_mem; }../*.*
13e0: 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73  * An ephemeral s
13f0: 74 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67  tring value (sig
1400: 6e 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45  nified by the ME
1410: 4d 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f  M_Ephem flag) co
1420: 6e 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e  ntains.** a poin
1430: 74 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63  ter to a dynamic
1440: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
1450: 74 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65  tring where some
1460: 20 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a   other entity.**
1470: 20 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   is responsible 
1480: 66 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  for deallocating
1490: 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42   that string.  B
14a0: 65 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73  ecause the regis
14b0: 74 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20  ter.** does not 
14c0: 63 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69  control the stri
14d0: 6e 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20  ng, it might be 
14e0: 64 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20  deleted without 
14f0: 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  the register.** 
1500: 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a  knowing it..**.*
1510: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63  * This routine c
1520: 6f 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d  onverts an ephem
1530: 65 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f  eral string into
1540: 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61   a dynamically a
1550: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69  llocated.** stri
1560: 6e 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69  ng that the regi
1570: 73 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74  ster itself cont
1580: 72 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20  rols.  In other 
1590: 77 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e  words, it.** con
15a0: 76 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68  verts an MEM_Eph
15b0: 65 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  em string into a
15c0: 20 73 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a   string with P.z
15d0: 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a  ==P.zMalloc..*/.
15e0: 23 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65  #define Deepheme
15f0: 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69  ralize(P) \.   i
1600: 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  f( ((P)->flags&M
1610: 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20  EM_Ephem)!=0 \. 
1620: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
1630: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
1640: 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20  able(P) ){ goto 
1650: 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74  no_mem;}../* Ret
1660: 75 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20  urn true if the 
1670: 63 75 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65  cursor was opene
1680: 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f  d using the OP_O
1690: 70 65 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65  penSorter opcode
16a0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53  . */.#define isS
16b0: 6f 72 74 65 72 28 78 29 20 28 28 78 29 2d 3e 70  orter(x) ((x)->p
16c0: 53 6f 72 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a  Sorter!=0)../*.*
16d0: 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43  * Allocate VdbeC
16e0: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75  ursor number iCu
16f0: 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69  r.  Return a poi
1700: 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74  nter to it.  Ret
1710: 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77  urn NULL.** if w
1720: 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d  e run out of mem
1730: 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56  ory..*/.static V
1740: 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63  dbeCursor *alloc
1750: 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62  ateCursor(.  Vdb
1760: 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20  e *p,           
1770: 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61     /* The virtua
1780: 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69  l machine */.  i
1790: 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20 20 20  nt iCur,        
17a0: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
17b0: 20 74 68 65 20 6e 65 77 20 56 64 62 65 43 75 72   the new VdbeCur
17c0: 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  sor */.  int nFi
17d0: 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f  eld,           /
17e0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  * Number of fiel
17f0: 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ds in the table 
1800: 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  or index */.  in
1810: 74 20 69 44 62 2c 20 20 20 20 20 20 20 20 20 20  t iDb,          
1820: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
1830: 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e  the cursor belon
1840: 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a  gs to, or -1 */.
1850: 20 20 69 6e 74 20 69 73 42 74 72 65 65 43 75 72    int isBtreeCur
1860: 73 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65 20  sor     /* True 
1870: 66 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61 6c  for B-Tree.  Fal
1880: 73 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61  se for pseudo-ta
1890: 62 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a 29  ble or vtab */.)
18a0: 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20  {.  /* Find the 
18b0: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
18c0: 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f   will be used to
18d0: 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20   store the blob 
18e0: 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72  of memory.  ** r
18f0: 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
1900: 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75   VdbeCursor stru
1910: 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e  cture. It is con
1920: 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61  venient to use a
1930: 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f   .  ** vdbe memo
1940: 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67  ry cell to manag
1950: 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  e the memory all
1960: 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64  ocation required
1970: 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65   for a.  ** Vdbe
1980: 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65  Cursor structure
1990: 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69   for the followi
19a0: 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a  ng reasons:.  **
19b0: 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69  .  **   * Someti
19c0: 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  mes cursor numbe
19d0: 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20  rs are used for 
19e0: 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66  a couple of diff
19f0: 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70  erent.  **     p
1a00: 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62  urposes in a vdb
1a10: 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64  e program. The d
1a20: 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69  ifferent uses mi
1a30: 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a  ght require.  **
1a40: 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20 73       different s
1a50: 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ized allocations
1a60: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70  . Memory cells p
1a70: 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a  rovide growable.
1a80: 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74    **     allocat
1a90: 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ions..  **.  ** 
1aa0: 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45    * When using E
1ab0: 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e  NABLE_MEMORY_MAN
1ac0: 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20  AGEMENT, memory 
1ad0: 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e  cell buffers can
1ae0: 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65  .  **     be fre
1af0: 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68  ed lazily via th
1b00: 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73  e sqlite3_releas
1b10: 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20  e_memory() API. 
1b20: 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69  This.  **     mi
1b30: 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62  nimizes the numb
1b40: 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c  er of malloc cal
1b50: 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20 73  ls made by the s
1b60: 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ystem..  **.  **
1b70: 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f   Memory cells fo
1b80: 72 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c  r cursors are al
1b90: 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65 20 74  located at the t
1ba0: 6f 70 20 6f 66 20 74 68 65 20 61 64 64 72 65 73  op of the addres
1bb0: 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65  s.  ** space. Me
1bc0: 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d  mory cell (p->nM
1bd0: 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  em) corresponds 
1be0: 74 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61  to cursor 0. Spa
1bf0: 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73  ce for.  ** curs
1c00: 6f 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20  or 1 is managed 
1c10: 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28  by memory cell (
1c20: 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e  p->nMem-1), etc.
1c30: 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  .  */.  Mem *pMe
1c40: 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e  m = &p->aMem[p->
1c50: 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69  nMem-iCur];..  i
1c60: 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65  nt nByte;.  Vdbe
1c70: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
1c80: 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20  .  nByte = .    
1c90: 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28    ROUND8(sizeof(
1ca0: 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32  VdbeCursor)) + 2
1cb0: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
1cc0: 65 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 69 73  eld + .      (is
1cd0: 42 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69  BtreeCursor?sqli
1ce0: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1cf0: 7a 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65  ze():0);..  asse
1d00: 72 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72  rt( iCur<p->nCur
1d10: 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  sor );.  if( p->
1d20: 61 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20  apCsr[iCur] ){. 
1d30: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72     sqlite3VdbeFr
1d40: 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
1d50: 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20  pCsr[iCur]);.   
1d60: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1d70: 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53  = 0;.  }.  if( S
1d80: 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65  QLITE_OK==sqlite
1d90: 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4d 65  3VdbeMemGrow(pMe
1da0: 6d 2c 20 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a  m, nByte, 0) ){.
1db0: 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75      p->apCsr[iCu
1dc0: 72 5d 20 3d 20 70 43 78 20 3d 20 28 56 64 62 65  r] = pCx = (Vdbe
1dd0: 43 75 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b  Cursor*)pMem->z;
1de0: 0a 20 20 20 20 6d 65 6d 73 65 74 28 70 43 78 2c  .    memset(pCx,
1df0: 20 30 2c 20 73 69 7a 65 6f 66 28 56 64 62 65 43   0, sizeof(VdbeC
1e00: 75 72 73 6f 72 29 29 3b 0a 20 20 20 20 70 43 78  ursor));.    pCx
1e10: 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20  ->iDb = iDb;.   
1e20: 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e   pCx->nField = n
1e30: 46 69 65 6c 64 3b 0a 20 20 20 20 69 66 28 20 69  Field;.    if( i
1e40: 73 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a  sBtreeCursor ){.
1e50: 20 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73        pCx->pCurs
1e60: 6f 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29  or = (BtCursor*)
1e70: 0a 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d  .          &pMem
1e80: 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f  ->z[ROUND8(sizeo
1e90: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32  f(VdbeCursor))+2
1ea0: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
1eb0: 65 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69  eld];.      sqli
1ec0: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65  te3BtreeCursorZe
1ed0: 72 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29  ro(pCx->pCursor)
1ee0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
1ef0: 74 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a  turn pCx;.}../*.
1f00: 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72  ** Try to conver
1f10: 74 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61  t a value into a
1f20: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
1f30: 6e 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61  ntation if we ca
1f40: 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f  n.** do so witho
1f50: 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ut loss of infor
1f60: 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  mation.  In othe
1f70: 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20  r words, if the 
1f80: 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20  string.** looks 
1f90: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63  like a number, c
1fa0: 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61  onvert it into a
1fb0: 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20   number.  If it 
1fc0: 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b  does not.** look
1fd0: 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20   like a number, 
1fe0: 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a  leave it alone..
1ff0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
2000: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
2010: 69 74 79 28 4d 65 6d 20 2a 70 52 65 63 29 7b 0a  ity(Mem *pRec){.
2020: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
2030: 67 73 20 26 20 28 4d 45 4d 5f 52 65 61 6c 7c 4d  gs & (MEM_Real|M
2040: 45 4d 5f 49 6e 74 29 29 3d 3d 30 20 29 7b 0a 20  EM_Int))==0 ){. 
2050: 20 20 20 64 6f 75 62 6c 65 20 72 56 61 6c 75 65     double rValue
2060: 3b 0a 20 20 20 20 69 36 34 20 69 56 61 6c 75 65  ;.    i64 iValue
2070: 3b 0a 20 20 20 20 75 38 20 65 6e 63 20 3d 20 70  ;.    u8 enc = p
2080: 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 20 20 69 66  Rec->enc;.    if
2090: 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d  ( (pRec->flags&M
20a0: 45 4d 5f 53 74 72 29 3d 3d 30 20 29 20 72 65 74  EM_Str)==0 ) ret
20b0: 75 72 6e 3b 0a 20 20 20 20 69 66 28 20 73 71 6c  urn;.    if( sql
20c0: 69 74 65 33 41 74 6f 46 28 70 52 65 63 2d 3e 7a  ite3AtoF(pRec->z
20d0: 2c 20 26 72 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &rValue, pRec-
20e0: 3e 6e 2c 20 65 6e 63 29 3d 3d 30 20 29 20 72 65  >n, enc)==0 ) re
20f0: 74 75 72 6e 3b 0a 20 20 20 20 69 66 28 20 30 3d  turn;.    if( 0=
2100: 3d 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70  =sqlite3Atoi64(p
2110: 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c 75 65 2c  Rec->z, &iValue,
2120: 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 20 29   pRec->n, enc) )
2130: 7b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 75 2e  {.      pRec->u.
2140: 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20 20  i = iValue;.    
2150: 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d    pRec->flags |=
2160: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 65   MEM_Int;.    }e
2170: 6c 73 65 7b 0a 20 20 20 20 20 20 70 52 65 63 2d  lse{.      pRec-
2180: 3e 72 20 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20  >r = rValue;.   
2190: 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c     pRec->flags |
21a0: 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20  = MEM_Real;.    
21b0: 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50  }.  }.}../*.** P
21c0: 72 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74  rocessing is det
21d0: 65 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66  ermine by the af
21e0: 66 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72  finity parameter
21f0: 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  :.**.** SQLITE_A
2200: 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53  FF_INTEGER:.** S
2210: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a  QLITE_AFF_REAL:.
2220: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ** SQLITE_AFF_NU
2230: 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79  MERIC:.**    Try
2240: 20 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63   to convert pRec
2250: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72   to an integer r
2260: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72  epresentation or
2270: 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69   a .**    floati
2280: 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65  ng-point represe
2290: 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e  ntation if an in
22a0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
22b0: 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f  tion.**    is no
22c0: 74 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74  t possible.  Not
22d0: 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67  e that the integ
22e0: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
22f0: 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79  n is.**    alway
2300: 73 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65  s preferred, eve
2310: 6e 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74  n if the affinit
2320: 79 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75  y is REAL, becau
2330: 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65  se.**    an inte
2340: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
2350: 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65  on is more space
2360: 20 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69   efficient on di
2370: 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  sk..**.** SQLITE
2380: 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20  _AFF_TEXT:.**   
2390: 20 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f   Convert pRec to
23a0: 20 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e   a text represen
23b0: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51  tation..**.** SQ
23c0: 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 3a 0a 2a  LITE_AFF_NONE:.*
23d0: 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65  *    No-op.  pRe
23e0: 63 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a  c is unchanged..
23f0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
2400: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20  pplyAffinity(.  
2410: 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20  Mem *pRec,      
2420: 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65      /* The value
2430: 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69   to apply affini
2440: 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20  ty to */.  char 
2450: 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f  affinity,      /
2460: 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74  * The affinity t
2470: 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a  o be applied */.
2480: 20 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20    u8 enc        
2490: 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69        /* Use thi
24a0: 73 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  s text encoding 
24b0: 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69  */.){.  if( affi
24c0: 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46  nity==SQLITE_AFF
24d0: 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20  _TEXT ){.    /* 
24e0: 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65  Only attempt the
24f0: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54   conversion to T
2500: 45 58 54 20 69 66 20 74 68 65 72 65 20 69 73 20  EXT if there is 
2510: 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65  an integer or re
2520: 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73  al.    ** repres
2530: 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61  entation (blob a
2540: 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67  nd NULL do not g
2550: 65 74 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75  et converted) bu
2560: 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20  t no string.    
2570: 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ** representatio
2580: 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  n..    */.    if
2590: 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67  ( 0==(pRec->flag
25a0: 73 26 4d 45 4d 5f 53 74 72 29 20 26 26 20 28 70  s&MEM_Str) && (p
25b0: 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f  Rec->flags&(MEM_
25c0: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29  Real|MEM_Int)) )
25d0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
25e0: 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
25f0: 70 52 65 63 2c 20 65 6e 63 29 3b 0a 20 20 20 20  pRec, enc);.    
2600: 7d 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67  }.    pRec->flag
2610: 73 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c  s &= ~(MEM_Real|
2620: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73  MEM_Int);.  }els
2630: 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 21 3d  e if( affinity!=
2640: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20  SQLITE_AFF_NONE 
2650: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61  ){.    assert( a
2660: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
2670: 41 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61  AFF_INTEGER || a
2680: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
2690: 41 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20  AFF_REAL.       
26a0: 20 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74        || affinit
26b0: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  y==SQLITE_AFF_NU
26c0: 4d 45 52 49 43 20 29 3b 0a 20 20 20 20 61 70 70  MERIC );.    app
26d0: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
26e0: 79 28 70 52 65 63 29 3b 0a 20 20 20 20 69 66 28  y(pRec);.    if(
26f0: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d   pRec->flags & M
2700: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 20  EM_Real ){.     
2710: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65   sqlite3VdbeInte
2720: 67 65 72 41 66 66 69 6e 69 74 79 28 70 52 65 63  gerAffinity(pRec
2730: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a  );.    }.  }.}..
2740: 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e  /*.** Try to con
2750: 76 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66  vert the type of
2760: 20 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75   a function argu
2770: 6d 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74  ment or a result
2780: 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20   column.** into 
2790: 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73  a numeric repres
27a0: 65 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65  entation.  Use e
27b0: 69 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72  ither INTEGER or
27c0: 20 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a   REAL whichever.
27d0: 2a 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74  ** is appropriat
27e0: 65 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20  e.  But only do 
27f0: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  the conversion i
2800: 66 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  f it is possible
2810: 20 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73   without.** loss
2820: 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
2830: 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72  and return the r
2840: 65 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74  evised type of t
2850: 68 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  he argument..*/.
2860: 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  int sqlite3_valu
2870: 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73  e_numeric_type(s
2880: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
2890: 61 6c 29 7b 0a 20 20 69 6e 74 20 65 54 79 70 65  al){.  int eType
28a0: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
28b0: 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 69  _type(pVal);.  i
28c0: 66 28 20 65 54 79 70 65 3d 3d 53 51 4c 49 54 45  f( eType==SQLITE
28d0: 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d  _TEXT ){.    Mem
28e0: 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70   *pMem = (Mem*)p
28f0: 56 61 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75  Val;.    applyNu
2900: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d  mericAffinity(pM
2910: 65 6d 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d  em);.    eType =
2920: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
2930: 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20  ype(pVal);.  }. 
2940: 20 72 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d   return eType;.}
2950: 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64  ../*.** Exported
2960: 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c   version of appl
2970: 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69  yAffinity(). Thi
2980: 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73  s one works on s
2990: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a  qlite3_value*, .
29a0: 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72  ** not the inter
29b0: 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a  nal Mem* type..*
29c0: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  /.void sqlite3Va
29d0: 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79  lueApplyAffinity
29e0: 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  (.  sqlite3_valu
29f0: 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61  e *pVal, .  u8 a
2a00: 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65  ffinity, .  u8 e
2a10: 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66  nc.){.  applyAff
2a20: 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61  inity((Mem *)pVa
2a30: 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63  l, affinity, enc
2a40: 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  );.}..#ifdef SQL
2a50: 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
2a60: 57 72 69 74 65 20 61 20 6e 69 63 65 20 73 74 72  Write a nice str
2a70: 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69  ing representati
2a80: 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e  on of the conten
2a90: 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a  ts of cell pMem.
2aa0: 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72 20 7a  ** into buffer z
2ab0: 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66  Buf, length nBuf
2ac0: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
2ad0: 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72  3VdbeMemPrettyPr
2ae0: 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63  int(Mem *pMem, c
2af0: 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68  har *zBuf){.  ch
2b00: 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b  ar *zCsr = zBuf;
2b10: 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d  .  int f = pMem-
2b20: 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74 69  >flags;..  stati
2b30: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f  c const char *co
2b40: 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d  nst encnames[] =
2b50: 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22 2c 20   {"(X)", "(8)", 
2b60: 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36 42 45  "(16LE)", "(16BE
2b70: 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45  )"};..  if( f&ME
2b80: 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e  M_Blob ){.    in
2b90: 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20 63 3b  t i;.    char c;
2ba0: 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d  .    if( f & MEM
2bb0: 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 63 20  _Dyn ){.      c 
2bc0: 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'z';.      ass
2bd0: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
2be0: 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29  tatic|MEM_Ephem)
2bf0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
2c00: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
2c10: 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 63 20  atic ){.      c 
2c20: 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73  = 't';.      ass
2c30: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44  ert( (f & (MEM_D
2c40: 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  yn|MEM_Ephem))==
2c50: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
2c60: 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d  f( f & MEM_Ephem
2c70: 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 65   ){.      c = 'e
2c80: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
2c90: 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69   (f & (MEM_Stati
2ca0: 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29  c|MEM_Dyn))==0 )
2cb0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
2cc0: 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20 20 20     c = 's';.    
2cd0: 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  }..    sqlite3_s
2ce0: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
2cf0: 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20 20 20  r, "%c", c);.   
2d00: 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33   zCsr += sqlite3
2d10: 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a  Strlen30(zCsr);.
2d20: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
2d30: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
2d40: 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b  "%d[", pMem->n);
2d50: 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c  .    zCsr += sql
2d60: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
2d70: 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  r);.    for(i=0;
2d80: 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d   i<16 && i<pMem-
2d90: 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; i++){.      
2da0: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
2db0: 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 30 32  (100, zCsr, "%02
2dc0: 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e  X", ((int)pMem->
2dd0: 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b 0a 20  z[i] & 0xFF));. 
2de0: 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c       zCsr += sql
2df0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
2e00: 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f  r);.    }.    fo
2e10: 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69  r(i=0; i<16 && i
2e20: 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a  <pMem->n; i++){.
2e30: 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d 20 70        char z = p
2e40: 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20  Mem->z[i];.     
2e50: 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31   if( z<32 || z>1
2e60: 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27  26 ) *zCsr++ = '
2e70: 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65 20 2a  .';.      else *
2e80: 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20  zCsr++ = z;.    
2e90: 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  }..    sqlite3_s
2ea0: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
2eb0: 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e 61 6d  r, "]%s", encnam
2ec0: 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a  es[pMem->enc]);.
2ed0: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
2ee0: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
2ef0: 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  );.    if( f & M
2f00: 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
2f10: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
2f20: 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64  f(100, zCsr,"+%d
2f30: 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f  z",pMem->u.nZero
2f40: 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d  );.      zCsr +=
2f50: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
2f60: 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20  (zCsr);.    }.  
2f70: 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a    *zCsr = '\0';.
2f80: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
2f90: 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 69  MEM_Str ){.    i
2fa0: 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75  nt j, k;.    zBu
2fb0: 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20  f[0] = ' ';.    
2fc0: 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20  if( f & MEM_Dyn 
2fd0: 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d  ){.      zBuf[1]
2fe0: 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73   = 'z';.      as
2ff0: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
3000: 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d  Static|MEM_Ephem
3010: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
3020: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53  se if( f & MEM_S
3030: 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 7a  tatic ){.      z
3040: 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20  Buf[1] = 't';.  
3050: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3060: 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70   (MEM_Dyn|MEM_Ep
3070: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
3080: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
3090: 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20  M_Ephem ){.     
30a0: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a   zBuf[1] = 'e';.
30b0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
30c0: 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d   & (MEM_Static|M
30d0: 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20  EM_Dyn))==0 );. 
30e0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
30f0: 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20  zBuf[1] = 's';. 
3100: 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a     }.    k = 2;.
3110: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3120: 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66 5b  intf(100, &zBuf[
3130: 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e  k], "%d", pMem->
3140: 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c  n);.    k += sql
3150: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42  ite3Strlen30(&zB
3160: 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66  uf[k]);.    zBuf
3170: 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20  [k++] = '[';.   
3180: 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26   for(j=0; j<15 &
3190: 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b  & j<pMem->n; j++
31a0: 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20 3d 20  ){.      u8 c = 
31b0: 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20  pMem->z[j];.    
31c0: 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26 26    if( c>=0x20 &&
31d0: 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20 20 20   c<0x7f ){.     
31e0: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63     zBuf[k++] = c
31f0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
3200: 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d         zBuf[k++]
3210: 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a   = '.';.      }.
3220: 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b      }.    zBuf[k
3230: 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73  ++] = ']';.    s
3240: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
3250: 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e  100,&zBuf[k], en
3260: 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63  cnames[pMem->enc
3270: 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c  ]);.    k += sql
3280: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42  ite3Strlen30(&zB
3290: 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66  uf[k]);.    zBuf
32a0: 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d  [k++] = 0;.  }.}
32b0: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
32c0: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
32d0: 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76 61 6c  ** Print the val
32e0: 75 65 20 6f 66 20 61 20 72 65 67 69 73 74 65 72  ue of a register
32f0: 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70 75 72   for tracing pur
3300: 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63  poses:.*/.static
3310: 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65 50 72   void memTracePr
3320: 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20 20 69  int(Mem *p){.  i
3330: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3340: 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b 0a 20  M_Undefined ){. 
3350: 20 20 20 70 72 69 6e 74 66 28 22 20 75 6e 64 65     printf(" unde
3360: 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c 73 65  fined");.  }else
3370: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3380: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
3390: 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22 29 3b  printf(" NULL");
33a0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70 2d  .  }else if( (p-
33b0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
33c0: 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45  t|MEM_Str))==(ME
33d0: 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29  M_Int|MEM_Str) )
33e0: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 73  {.    printf(" s
33f0: 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29  i:%lld", p->u.i)
3400: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d  ;.  }else if( p-
3410: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
3420: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3430: 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69   i:%lld", p->u.i
3440: 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
3450: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
3460: 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66  POINT.  }else if
3470: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
3480: 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70 72 69  _Real ){.    pri
3490: 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e  ntf(" r:%g", p->
34a0: 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c  r);.#endif.  }el
34b0: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
34c0: 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b 0a  & MEM_RowSet ){.
34d0: 20 20 20 20 70 72 69 6e 74 66 28 22 20 28 72 6f      printf(" (ro
34e0: 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73 65  wset)");.  }else
34f0: 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b  {.    char zBuf[
3500: 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65  200];.    sqlite
3510: 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72  3VdbeMemPrettyPr
3520: 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20 20  int(p, zBuf);.  
3530: 20 20 70 72 69 6e 74 66 28 22 20 25 73 22 2c 20    printf(" %s", 
3540: 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61  zBuf);.  }.}.sta
3550: 74 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65  tic void registe
3560: 72 54 72 61 63 65 28 69 6e 74 20 69 52 65 67 2c  rTrace(int iReg,
3570: 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 70 72 69 6e   Mem *p){.  prin
3580: 74 66 28 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c  tf("REG[%d] = ",
3590: 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61   iReg);.  memTra
35a0: 63 65 50 72 69 6e 74 28 70 29 3b 0a 20 20 70 72  cePrint(p);.  pr
35b0: 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 7d 0a 23 65  intf("\n");.}.#e
35c0: 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
35d0: 49 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66  ITE_DEBUG.#  def
35e0: 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41  ine REGISTER_TRA
35f0: 43 45 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66  CE(R,M) if(db->f
3600: 6c 61 67 73 26 53 51 4c 49 54 45 5f 56 64 62 65  lags&SQLITE_Vdbe
3610: 54 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72  Trace)registerTr
3620: 61 63 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23  ace(R,M).#else.#
3630: 20 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45    define REGISTE
3640: 52 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e  R_TRACE(R,M).#en
3650: 64 69 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42  dif...#ifdef VDB
3660: 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a  E_PROFILE../* .*
3670: 2a 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61  * hwtime.h conta
3680: 69 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d  ins inline assem
3690: 62 6c 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d  bler code for im
36a0: 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68  plementing .** h
36b0: 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20  igh-performance 
36c0: 74 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e  timing routines.
36d0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77  .*/.#include "hw
36e0: 74 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a  time.h"..#endif.
36f0: 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
3700: 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74  /*.** This funct
3710: 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c  ion is only call
3720: 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61  ed from within a
3730: 6e 20 61 73 73 65 72 74 28 29 20 65 78 70 72 65  n assert() expre
3740: 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65  ssion. It.** che
3750: 63 6b 73 20 74 68 61 74 20 74 68 65 20 73 71 6c  cks that the sql
3760: 69 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f  ite3.nTransactio
3770: 6e 20 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f  n variable is co
3780: 72 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a  rrectly set to.*
3790: 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
37a0: 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  non-transaction 
37b0: 73 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65  savepoints curre
37c0: 6e 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20  ntly in the .** 
37d0: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72  linked list star
37e0: 74 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e  ting at sqlite3.
37f0: 70 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a  pSavepoint..** .
3800: 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20  ** Usage:.**.** 
3810: 20 20 20 20 61 73 73 65 72 74 28 20 63 68 65 63      assert( chec
3820: 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28  kSavepointCount(
3830: 64 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63  db) );.*/.static
3840: 20 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f   int checkSavepo
3850: 69 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33  intCount(sqlite3
3860: 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d   *db){.  int n =
3870: 20 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   0;.  Savepoint 
3880: 2a 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e  *p;.  for(p=db->
3890: 70 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70  pSavepoint; p; p
38a0: 3d 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a  =p->pNext) n++;.
38b0: 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62    assert( n==(db
38c0: 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64  ->nSavepoint + d
38d0: 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
38e0: 53 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20  Savepoint) );.  
38f0: 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64  return 1;.}.#end
3900: 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75  if.../*.** Execu
3910: 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61 20  te as much of a 
3920: 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73 20  VDBE program as 
3930: 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73 20  we can..** This 
3940: 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66 20 73  is the core of s
3950: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20 20  qlite3_step().  
3960: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  .*/.int sqlite3V
3970: 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65 20  dbeExec(.  Vdbe 
3980: 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *p              
3990: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
39a0: 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 70 63  E */.){.  int pc
39b0: 3d 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  =0;             
39c0: 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67       /* The prog
39d0: 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  ram counter */. 
39e0: 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f   Op *aOp = p->aO
39f0: 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  p;          /* C
3a00: 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f  opy of p->aOp */
3a10: 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20 20 20  .  Op *pOp;     
3a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
3a30: 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61 74 69   Current operati
3a40: 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d  on */.  int rc =
3a50: 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20   SQLITE_OK;     
3a60: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
3a70: 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  eturn */.  sqlit
3a80: 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20  e3 *db = p->db; 
3a90: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
3aa0: 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72 65  abase */.  u8 re
3ab0: 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
3ac0: 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20 73   = 0; /* Reset s
3ad0: 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20 65  chema after an e
3ae0: 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69 76 65  rror if positive
3af0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e   */.  u8 encodin
3b00: 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20 20 20  g = ENC(db);    
3b10: 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
3b20: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69   encoding */.  i
3b30: 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b  nt iCompare = 0;
3b40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
3b50: 75 6c 74 20 6f 66 20 6c 61 73 74 20 4f 50 5f 43  ult of last OP_C
3b60: 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 69 6f 6e  ompare operation
3b70: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e   */.  unsigned n
3b80: 56 6d 53 74 65 70 20 3d 20 30 3b 20 20 20 20 20  VmStep = 0;     
3b90: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69   /* Number of vi
3ba0: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 73 74  rtual machine st
3bb0: 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  eps */.#ifndef S
3bc0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
3bd0: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 75  ESS_CALLBACK.  u
3be0: 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73  nsigned nProgres
3bf0: 73 4c 69 6d 69 74 20 3d 20 30 3b 2f 2a 20 49 6e  sLimit = 0;/* In
3c00: 76 6f 6b 65 20 78 50 72 6f 67 72 65 73 73 28 29  voke xProgress()
3c10: 20 77 68 65 6e 20 6e 56 6d 53 74 65 70 20 72 65   when nVmStep re
3c20: 61 63 68 65 73 20 74 68 69 73 20 2a 2f 0a 23 65  aches this */.#e
3c30: 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d  ndif.  Mem *aMem
3c40: 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20 20 20   = p->aMem;     
3c50: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e    /* Copy of p->
3c60: 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  aMem */.  Mem *p
3c70: 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In1 = 0;        
3c80: 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e 70 75       /* 1st inpu
3c90: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
3ca0: 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20  em *pIn2 = 0;   
3cb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 6e 64            /* 2nd
3cc0: 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a   input operand *
3cd0: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20  /.  Mem *pIn3 = 
3ce0: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
3cf0: 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70 65 72  * 3rd input oper
3d00: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f  and */.  Mem *pO
3d10: 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ut = 0;         
3d20: 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70      /* Output op
3d30: 65 72 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 2a  erand */.  int *
3d40: 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 20 20 20  aPermute = 0;   
3d50: 20 20 20 20 20 20 2f 2a 20 50 65 72 6d 75 74 61        /* Permuta
3d60: 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  tion of columns 
3d70: 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65 20 2a  for OP_Compare *
3d80: 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69  /.  i64 lastRowi
3d90: 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  d = db->lastRowi
3da0: 64 3b 20 20 2f 2a 20 53 61 76 65 64 20 76 61 6c  d;  /* Saved val
3db0: 75 65 20 6f 66 20 74 68 65 20 6c 61 73 74 20 69  ue of the last i
3dc0: 6e 73 65 72 74 20 52 4f 57 49 44 20 2a 2f 0a 23  nsert ROWID */.#
3dd0: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
3de0: 4c 45 0a 20 20 75 36 34 20 73 74 61 72 74 3b 20  LE.  u64 start; 
3df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e00: 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75  /* CPU clock cou
3e10: 6e 74 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f  nt at start of o
3e20: 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a  pcode */.#endif.
3e30: 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20 53 54    /*** INSERT ST
3e40: 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45 20 2a  ACK UNION HERE *
3e50: 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70  **/..  assert( p
3e60: 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41  ->magic==VDBE_MA
3e70: 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73  GIC_RUN );  /* s
3e80: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 76 65  qlite3_step() ve
3e90: 72 69 66 69 65 73 20 74 68 69 73 20 2a 2f 0a 20  rifies this */. 
3ea0: 20 73 71 6c 69 74 65 33 56 64 62 65 45 6e 74 65   sqlite3VdbeEnte
3eb0: 72 28 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72  r(p);.  if( p->r
3ec0: 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  c==SQLITE_NOMEM 
3ed0: 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68  ){.    /* This h
3ee0: 61 70 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c  appens if a mall
3ef0: 6f 63 28 29 20 69 6e 73 69 64 65 20 61 20 63 61  oc() inside a ca
3f00: 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f  ll to sqlite3_co
3f10: 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20  lumn_text() or. 
3f20: 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f     ** sqlite3_co
3f30: 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61  lumn_text16() fa
3f40: 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f  iled.  */.    go
3f50: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
3f60: 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d   assert( p->rc==
3f70: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e  SQLITE_OK || p->
3f80: 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc==SQLITE_BUSY 
3f90: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
3fa0: 62 49 73 52 65 61 64 65 72 20 7c 7c 20 70 2d 3e  bIsReader || p->
3fb0: 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29 3b 0a 20  readOnly!=0 );. 
3fc0: 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f   p->rc = SQLITE_
3fd0: 4f 4b 3b 0a 20 20 70 2d 3e 69 43 75 72 72 65 6e  OK;.  p->iCurren
3fe0: 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20 61 73 73  tTime = 0;.  ass
3ff0: 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d  ert( p->explain=
4000: 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75  =0 );.  p->pResu
4010: 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d  ltSet = 0;.  db-
4020: 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75  >busyHandler.nBu
4030: 73 79 20 3d 20 30 3b 0a 20 20 69 66 28 20 64 62  sy = 0;.  if( db
4040: 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74  ->u1.isInterrupt
4050: 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  ed ) goto abort_
4060: 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74  due_to_interrupt
4070: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49  ;.  sqlite3VdbeI
4080: 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a 23 69  OTraceSql(p);.#i
4090: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
40a0: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
40b0: 41 43 4b 0a 20 20 69 66 28 20 64 62 2d 3e 78 50  ACK.  if( db->xP
40c0: 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20 20 61  rogress ){.    a
40d0: 73 73 65 72 74 28 20 30 20 3c 20 64 62 2d 3e 6e  ssert( 0 < db->n
40e0: 50 72 6f 67 72 65 73 73 4f 70 73 20 29 3b 0a 20  ProgressOps );. 
40f0: 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69     nProgressLimi
4100: 74 20 3d 20 28 75 6e 73 69 67 6e 65 64 29 70 2d  t = (unsigned)p-
4110: 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45  >aCounter[SQLITE
4120: 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53  _STMTSTATUS_VM_S
4130: 54 45 50 5d 3b 0a 20 20 20 20 69 66 28 20 6e 50  TEP];.    if( nP
4140: 72 6f 67 72 65 73 73 4c 69 6d 69 74 3d 3d 30 20  rogressLimit==0 
4150: 29 7b 0a 20 20 20 20 20 20 6e 50 72 6f 67 72 65  ){.      nProgre
4160: 73 73 4c 69 6d 69 74 20 3d 20 64 62 2d 3e 6e 50  ssLimit = db->nP
4170: 72 6f 67 72 65 73 73 4f 70 73 3b 0a 20 20 20 20  rogressOps;.    
4180: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 50 72  }else{.      nPr
4190: 6f 67 72 65 73 73 4c 69 6d 69 74 20 25 3d 20 28  ogressLimit %= (
41a0: 75 6e 73 69 67 6e 65 64 29 64 62 2d 3e 6e 50 72  unsigned)db->nPr
41b0: 6f 67 72 65 73 73 4f 70 73 3b 0a 20 20 20 20 7d  ogressOps;.    }
41c0: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64  .  }.#endif.#ifd
41d0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
41e0: 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65    sqlite3BeginBe
41f0: 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20  nignMalloc();.  
4200: 69 66 28 20 70 2d 3e 70 63 3d 3d 30 0a 20 20 20  if( p->pc==0.   
4210: 26 26 20 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73  && (p->db->flags
4220: 20 26 20 28 53 51 4c 49 54 45 5f 56 64 62 65 4c   & (SQLITE_VdbeL
4230: 69 73 74 69 6e 67 7c 53 51 4c 49 54 45 5f 56 64  isting|SQLITE_Vd
4240: 62 65 45 51 50 7c 53 51 4c 49 54 45 5f 56 64 62  beEQP|SQLITE_Vdb
4250: 65 54 72 61 63 65 29 29 21 3d 30 0a 20 20 29 7b  eTrace))!=0.  ){
4260: 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
4270: 69 6e 74 20 6f 6e 63 65 20 3d 20 31 3b 0a 20 20  int once = 1;.  
4280: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
4290: 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 69 66  ntSql(p);.    if
42a0: 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26  ( p->db->flags &
42b0: 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74   SQLITE_VdbeList
42c0: 69 6e 67 20 29 7b 0a 20 20 20 20 20 20 70 72 69  ing ){.      pri
42d0: 6e 74 66 28 22 56 44 42 45 20 50 72 6f 67 72 61  ntf("VDBE Progra
42e0: 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a  m Listing:\n");.
42f0: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
4300: 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20  <p->nOp; i++){. 
4310: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
4320: 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74  bePrintOp(stdout
4330: 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20  , i, &aOp[i]);. 
4340: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
4350: 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67   if( p->db->flag
4360: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 45  s & SQLITE_VdbeE
4370: 51 50 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28  QP ){.      for(
4380: 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69  i=0; i<p->nOp; i
4390: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  ++){.        if(
43a0: 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f 64 65 3d 3d   aOp[i].opcode==
43b0: 4f 50 5f 45 78 70 6c 61 69 6e 20 29 7b 0a 20 20  OP_Explain ){.  
43c0: 20 20 20 20 20 20 20 20 69 66 28 20 6f 6e 63 65          if( once
43d0: 20 29 20 70 72 69 6e 74 66 28 22 56 44 42 45 20   ) printf("VDBE 
43e0: 51 75 65 72 79 20 50 6c 61 6e 3a 5c 6e 22 29 3b  Query Plan:\n");
43f0: 0a 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74  .          print
4400: 66 28 22 25 73 5c 6e 22 2c 20 61 4f 70 5b 69 5d  f("%s\n", aOp[i]
4410: 2e 70 34 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20  .p4.z);.        
4420: 20 20 6f 6e 63 65 20 3d 20 30 3b 0a 20 20 20 20    once = 0;.    
4430: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
4440: 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64    }.    if( p->d
4450: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
4460: 45 5f 56 64 62 65 54 72 61 63 65 20 29 20 20 70  E_VdbeTrace )  p
4470: 72 69 6e 74 66 28 22 56 44 42 45 20 54 72 61 63  rintf("VDBE Trac
4480: 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20 73 71  e:\n");.  }.  sq
4490: 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
44a0: 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20  lloc();.#endif. 
44b0: 20 66 6f 72 28 70 63 3d 70 2d 3e 70 63 3b 20 72   for(pc=p->pc; r
44c0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20 70 63  c==SQLITE_OK; pc
44d0: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
44e0: 20 70 63 3e 3d 30 20 26 26 20 70 63 3c 70 2d 3e   pc>=0 && pc<p->
44f0: 6e 4f 70 20 29 3b 0a 20 20 20 20 69 66 28 20 64  nOp );.    if( d
4500: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
4510: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23  ) goto no_mem;.#
4520: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
4530: 4c 45 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73  LE.    start = s
4540: 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a  qlite3Hwtime();.
4550: 23 65 6e 64 69 66 0a 20 20 20 20 6e 56 6d 53 74  #endif.    nVmSt
4560: 65 70 2b 2b 3b 0a 20 20 20 20 70 4f 70 20 3d 20  ep++;.    pOp = 
4570: 26 61 4f 70 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f  &aOp[pc];..    /
4580: 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61  * Only allow tra
4590: 63 69 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44  cing if SQLITE_D
45a0: 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e  EBUG is defined.
45b0: 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  .    */.#ifdef S
45c0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
45d0: 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20  if( db->flags & 
45e0: 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
45f0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
4600: 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
4610: 6f 75 74 2c 20 70 63 2c 20 70 4f 70 29 3b 0a 20  out, pc, pOp);. 
4620: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
4630: 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b    ..    /* Check
4640: 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65   to see if we ne
4650: 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61  ed to simulate a
4660: 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68  n interrupt.  Th
4670: 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a  is only happens.
4680: 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76      ** if we hav
4690: 65 20 61 20 73 70 65 63 69 61 6c 20 74 65 73 74  e a special test
46a0: 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23   build..    */.#
46b0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
46c0: 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  T.    if( sqlite
46d0: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
46e0: 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  t>0 ){.      sql
46f0: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
4700: 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66  ount--;.      if
4710: 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  ( sqlite3_interr
4720: 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a  upt_count==0 ){.
4730: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
4740: 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20  interrupt(db);. 
4750: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e       }.    }.#en
4760: 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 20 61  dif..    /* On a
4770: 6e 79 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74  ny opcode with t
4780: 68 65 20 22 6f 75 74 32 2d 70 72 65 72 65 6c 65  he "out2-prerele
4790: 61 73 65 22 20 74 61 67 2c 20 66 72 65 65 20 61  ase" tag, free a
47a0: 6e 79 0a 20 20 20 20 2a 2a 20 65 78 74 65 72 6e  ny.    ** extern
47b0: 61 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 6f  al allocations o
47c0: 75 74 20 6f 66 20 6d 65 6d 5b 70 32 5d 20 61 6e  ut of mem[p2] an
47d0: 64 20 73 65 74 20 6d 65 6d 5b 70 32 5d 20 74 6f  d set mem[p2] to
47e0: 20 62 65 0a 20 20 20 20 2a 2a 20 61 6e 20 75 6e   be.    ** an un
47f0: 64 65 66 69 6e 65 64 20 69 6e 74 65 67 65 72 2e  defined integer.
4800: 20 20 4f 70 63 6f 64 65 73 20 77 69 6c 6c 20 65    Opcodes will e
4810: 69 74 68 65 72 20 66 69 6c 6c 20 69 6e 20 74 68  ither fill in th
4820: 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20 2a 2a  e integer.    **
4830: 20 76 61 6c 75 65 20 6f 72 20 63 6f 6e 76 65 72   value or conver
4840: 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 61 20 64  t mem[p2] to a d
4850: 69 66 66 65 72 65 6e 74 20 74 79 70 65 2e 0a 20  ifferent type.. 
4860: 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74     */.    assert
4870: 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d  ( pOp->opflags==
4880: 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f  sqlite3OpcodePro
4890: 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64  perty[pOp->opcod
48a0: 65 5d 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  e] );.    if( pO
48b0: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
48c0: 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41  LG_OUT2_PRERELEA
48d0: 53 45 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  SE ){.      asse
48e0: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
48f0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
4900: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
4910: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
4920: 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d        pOut = &aM
4930: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
4940: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
4950: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
4960: 20 20 20 20 56 64 62 65 4d 65 6d 52 65 6c 65 61      VdbeMemRelea
4970: 73 65 28 70 4f 75 74 29 3b 0a 20 20 20 20 20 20  se(pOut);.      
4980: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
4990: 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 0a 20 20  M_Int;.    }..  
49a0: 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63    /* Sanity chec
49b0: 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70  king on other op
49c0: 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66  erands */.#ifdef
49d0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
49e0: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
49f0: 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29  ags & OPFLG_IN1)
4a00: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
4a10: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29  ert( pOp->p1>0 )
4a20: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
4a30: 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
4a40: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
4a50: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
4a60: 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
4a70: 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20  pOp->p1]) );.   
4a80: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
4a90: 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e  e3VdbeCheckMemIn
4aa0: 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70  variants(&aMem[p
4ab0: 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20  Op->p1]) );.    
4ac0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
4ad0: 28 70 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b  (pOp->p1, &aMem[
4ae0: 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 7d  pOp->p1]);.    }
4af0: 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  .    if( (pOp->o
4b00: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49  pflags & OPFLG_I
4b10: 4e 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N2)!=0 ){.      
4b20: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
4b30: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
4b40: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  t( pOp->p2<=(p->
4b50: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
4b60: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
4b70: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
4b80: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a  em[pOp->p2]) );.
4b90: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
4ba0: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
4bb0: 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65  mInvariants(&aMe
4bc0: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20  m[pOp->p2]) );. 
4bd0: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
4be0: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d  ACE(pOp->p2, &aM
4bf0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20  em[pOp->p2]);.  
4c00: 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70    }.    if( (pOp
4c10: 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ->opflags & OPFL
4c20: 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20  G_IN3)!=0 ){.   
4c30: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
4c40: 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p3>0 );.      as
4c50: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
4c60: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
4c70: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73  or) );.      ass
4c80: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
4c90: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20  &aMem[pOp->p3]) 
4ca0: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
4cb0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
4cc0: 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26  kMemInvariants(&
4cd0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29  aMem[pOp->p3]) )
4ce0: 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52  ;.      REGISTER
4cf0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
4d00: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b  &aMem[pOp->p3]);
4d10: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28  .    }.    if( (
4d20: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
4d30: 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b  PFLG_OUT2)!=0 ){
4d40: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
4d50: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20  Op->p2>0 );.    
4d60: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
4d70: 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  2<=(p->nMem-p->n
4d80: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
4d90: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
4da0: 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  e(p, &aMem[pOp->
4db0: 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p2]);.    }.    
4dc0: 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67  if( (pOp->opflag
4dd0: 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21  s & OPFLG_OUT3)!
4de0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
4df0: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
4e00: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
4e10: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
4e20: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
4e30: 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
4e40: 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b  Change(p, &aMem[
4e50: 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d  pOp->p3]);.    }
4e60: 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 20 20 73  .#endif.  .    s
4e70: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
4e80: 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a  de ){../********
4e90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4ea0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4eb0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4ec0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4ed0: 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20 66 6f  *****.** What fo
4ee0: 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73 73 69  llows is a massi
4ef0: 76 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  ve switch statem
4f00: 65 6e 74 20 77 68 65 72 65 20 65 61 63 68 20 63  ent where each c
4f10: 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  ase implements a
4f20: 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69 6e 73  .** separate ins
4f30: 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20  truction in the 
4f40: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e  virtual machine.
4f50: 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77 20 74    If we follow t
4f60: 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e 64 65  he usual.** inde
4f70: 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e 74 69  ntation conventi
4f80: 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65 20 73  ons, each case s
4f90: 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65  hould be indente
4fa0: 64 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20  d by 6 spaces.  
4fb0: 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73 20 61  But.** that is a
4fc0: 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64 20 73   lot of wasted s
4fd0: 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65 66 74  pace on the left
4fe0: 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74 68 65   margin.  So the
4ff0: 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a 2a 20   code within.** 
5000: 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65  the switch state
5010: 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61 6b 20  ment will break 
5020: 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f 6e 20  with convention 
5030: 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c 65 66  and be flush-lef
5040: 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20 62 69  t. Another.** bi
5050: 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d 69 6c  g comment (simil
5060: 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65 29 20  ar to this one) 
5070: 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20 70 6f  will mark the po
5080: 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64 65 20  int in the code 
5090: 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72 61 6e  where.** we tran
50a0: 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f 20 6e  sition back to n
50b0: 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f  ormal indentatio
50c0: 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 72  n..**.** The for
50d0: 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63 68 20  matting of each 
50e0: 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74 61 6e  case is importan
50f0: 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69 6c 65  t.  The makefile
5100: 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a 20 67   for SQLite.** g
5110: 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43 20 66  enerates two C f
5120: 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e 68 22  iles "opcodes.h"
5130: 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e 63 22   and "opcodes.c"
5140: 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69   by scanning thi
5150: 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e  s.** file lookin
5160: 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68 61 74  g for lines that
5170: 20 62 65 67 69 6e 20 77 69 74 68 20 22 63 61 73   begin with "cas
5180: 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f 70 63  e OP_".  The opc
5190: 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a 2a 20  odes.h files.** 
51a0: 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64 20 77  will be filled w
51b0: 69 74 68 20 23 64 65 66 69 6e 65 73 20 74 68 61  ith #defines tha
51c0: 74 20 67 69 76 65 20 75 6e 69 71 75 65 20 69 6e  t give unique in
51d0: 74 65 67 65 72 20 76 61 6c 75 65 73 20 74 6f 20  teger values to 
51e0: 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65 20 61  each.** opcode a
51f0: 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73 2e 63  nd the opcodes.c
5200: 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65 64 20   file is filled 
5210: 77 69 74 68 20 61 6e 20 61 72 72 61 79 20 6f 66  with an array of
5220: 20 73 74 72 69 6e 67 73 20 77 68 65 72 65 0a 2a   strings where.*
5230: 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20 69 73  * each string is
5240: 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20 6e 61   the symbolic na
5250: 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72 72 65  me for the corre
5260: 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64 65 2e  sponding opcode.
5270: 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61 73 65    If the.** case
5280: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 66 6f   statement is fo
5290: 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d  llowed by a comm
52a0: 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ent of the form 
52b0: 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e 2e 20  "/# same as ... 
52c0: 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f 6d 6d  #/".** that comm
52d0: 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 64  ent is used to d
52e0: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70 61 72  etermine the par
52f0: 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20 6f 66  ticular value of
5300: 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a   the opcode..**.
5310: 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f 72 64  ** Other keyword
5320: 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65 6e 74  s in the comment
5330: 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 65 61   that follows ea
5340: 63 68 20 63 61 73 65 20 61 72 65 20 75 73 65 64  ch case are used
5350: 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75 63 74   to.** construct
5360: 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49   the OPFLG_INITI
5370: 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74 68 61  ALIZER value tha
5380: 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20 6f 70  t initializes op
5390: 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 2e 0a  codeProperty[]..
53a0: 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e 63 6c  ** Keywords incl
53b0: 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c 20 69  ude: in1, in2, i
53c0: 6e 33 2c 20 6f 75 74 32 5f 70 72 65 72 65 6c 65  n3, out2_prerele
53d0: 61 73 65 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e  ase, out2, out3.
53e0: 20 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f    See.** the mko
53f0: 70 63 6f 64 65 68 2e 61 77 6b 20 73 63 72 69 70  pcodeh.awk scrip
5400: 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  t for additional
5410: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a   information..**
5420: 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f  .** Documentatio
5430: 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f 70 63  n about VDBE opc
5440: 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61 74 65  odes is generate
5450: 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68  d by scanning th
5460: 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c  is file.** for l
5470: 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63 6f 6e  ines of that con
5480: 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20  tain "Opcode:". 
5490: 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64 20 61   That line and a
54a0: 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a  ll subsequent.**
54b0: 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61   comment lines a
54c0: 72 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 67  re used in the g
54d0: 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  eneration of the
54e0: 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63   opcode.html doc
54f0: 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69  umentation.** fi
5500: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52  le..**.** SUMMAR
5510: 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72  Y:.**.**     For
5520: 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70 6f 72  matting is impor
5530: 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74 73 20  tant to scripts 
5540: 74 68 61 74 20 73 63 61 6e 20 74 68 69 73 20 66  that scan this f
5550: 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e  ile..**     Do n
5560: 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f 6d 20  ot deviate from 
5570: 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 73  the formatting s
5580: 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79 20 69  tyle currently i
5590: 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a  n use..**.******
55a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
55b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
55c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
55d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
55e0: 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63  *******/../* Opc
55f0: 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20  ode:  Goto * P2 
5600: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75  * * *.**.** An u
5610: 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d  nconditional jum
5620: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
5630: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 73  .** The next ins
5640: 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75 74 65  truction execute
5650: 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68  d will be .** th
5660: 65 20 6f 6e 65 20 61 74 20 69 6e 64 65 78 20 50  e one at index P
5670: 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  2 from the begin
5680: 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70  ning of.** the p
5690: 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20  rogram..*/.case 
56a0: 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20  OP_Goto: {      
56b0: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
56c0: 2f 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  /.  pc = pOp->p2
56d0: 20 2d 20 31 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f   - 1;..  /* Opco
56e0: 64 65 73 20 74 68 61 74 20 61 72 65 20 75 73 65  des that are use
56f0: 64 20 61 73 20 74 68 65 20 62 6f 74 74 6f 6d 20  d as the bottom 
5700: 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65  of a loop (OP_Ne
5710: 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a  xt, OP_Prev,.  *
5720: 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 4f 50 5f 52  * OP_VNext, OP_R
5730: 6f 77 53 65 74 4e 65 78 74 2c 20 6f 72 20 4f 50  owSetNext, or OP
5740: 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61 6c 6c  _SorterNext) all
5750: 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f 6e 0a   jump here upon.
5760: 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e    ** completion.
5770: 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69    Check to see i
5780: 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  f sqlite3_interr
5790: 75 70 74 28 29 20 68 61 73 20 62 65 65 6e 20 63  upt() has been c
57a0: 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20 69 66  alled.  ** or if
57b0: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
57c0: 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74 6f 20  llback needs to 
57d0: 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20 20 2a  be invoked. .  *
57e0: 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f 64 65  *.  ** This code
57f0: 20 75 73 65 73 20 75 6e 73 74 72 75 63 74 75 72   uses unstructur
5800: 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74 65 6d  ed "goto" statem
5810: 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20 6e 6f  ents and does no
5820: 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20 20  t look clean..  
5830: 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73 20 6e  ** But that is n
5840: 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70 70 79  ot due to sloppy
5850: 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73 2e 20   coding habits. 
5860: 54 68 65 20 63 6f 64 65 20 69 73 20 77 72 69 74  The code is writ
5870: 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20 77 61  ten this.  ** wa
5880: 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63  y for performanc
5890: 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61 76 69  e, to avoid havi
58a0: 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20 69 6e  ng to run the in
58b0: 74 65 72 72 75 70 74 20 61 6e 64 20 70 72 6f 67  terrupt and prog
58c0: 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63 6b 73  ress.  ** checks
58d0: 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f 64 65   on every opcode
58e0: 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20 73 71  .  This helps sq
58f0: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74 6f 20  lite3_step() to 
5900: 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25 0a 20  run about 1.5%. 
5910: 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63 6f 72   ** faster accor
5920: 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72 69 6e  ding to "valgrin
5930: 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65 67 72  d --tool=cachegr
5940: 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f 66 6f  ind" */.check_fo
5950: 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 69  r_interrupt:.  i
5960: 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65  f( db->u1.isInte
5970: 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61  rrupted ) goto a
5980: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65  bort_due_to_inte
5990: 72 72 75 70 74 3b 0a 23 69 66 6e 64 65 66 20 53  rrupt;.#ifndef S
59a0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
59b0: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f  ESS_CALLBACK.  /
59c0: 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67 72  * Call the progr
59d0: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66 20  ess callback if 
59e0: 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64  it is configured
59f0: 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72 65   and the require
5a00: 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20 6f 66  d number.  ** of
5a10: 20 56 44 42 45 20 6f 70 73 20 68 61 76 65 20 62   VDBE ops have b
5a20: 65 65 6e 20 65 78 65 63 75 74 65 64 20 28 65 69  een executed (ei
5a30: 74 68 65 72 20 73 69 6e 63 65 20 74 68 69 73 20  ther since this 
5a40: 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20  invocation of.  
5a50: 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45 78  ** sqlite3VdbeEx
5a60: 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c 61  ec() or since la
5a70: 73 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f 67  st time the prog
5a80: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77 61  ress callback wa
5a90: 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a 20  s called)..  ** 
5aa0: 49 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  If the progress 
5ab0: 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e 73  callback returns
5ac0: 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20   non-zero, exit 
5ad0: 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  the virtual mach
5ae0: 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20 61 20  ine with.  ** a 
5af0: 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c 49  return code SQLI
5b00: 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a 20  TE_ABORT..  */. 
5b10: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
5b20: 73 73 21 3d 30 20 26 26 20 6e 56 6d 53 74 65 70  ss!=0 && nVmStep
5b30: 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74  >=nProgressLimit
5b40: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
5b50: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
5b60: 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67  !=0 );.    nProg
5b70: 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56 6d 53  ressLimit = nVmS
5b80: 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f 67 72  tep + db->nProgr
5b90: 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53 74 65  essOps - (nVmSte
5ba0: 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  p%db->nProgressO
5bb0: 70 73 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d  ps);.    if( db-
5bc0: 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70  >xProgress(db->p
5bd0: 50 72 6f 67 72 65 73 73 41 72 67 29 20 29 7b 0a  ProgressArg) ){.
5be0: 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
5bf0: 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20  E_INTERRUPT;.   
5c00: 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72     goto vdbe_err
5c10: 6f 72 5f 68 61 6c 74 3b 0a 20 20 20 20 7d 0a 20  or_halt;.    }. 
5c20: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 62   }.#endif.  .  b
5c30: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
5c40: 64 65 3a 20 20 47 6f 73 75 62 20 50 31 20 50 32  de:  Gosub P1 P2
5c50: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
5c60: 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 61  te the current a
5c70: 64 64 72 65 73 73 20 6f 6e 74 6f 20 72 65 67 69  ddress onto regi
5c80: 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74  ster P1.** and t
5c90: 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  hen jump to addr
5ca0: 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ess P2..*/.case 
5cb0: 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20 20 20 20  OP_Gosub: {     
5cc0: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
5cd0: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
5ce0: 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
5cf0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
5d00: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31  ursor) );.  pIn1
5d10: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
5d20: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64 62  ];.  assert( Vdb
5d30: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31  eMemDynamic(pIn1
5d40: 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f  )==0 );.  memAbo
5d50: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
5d60: 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  n1);.  pIn1->fla
5d70: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
5d80: 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a  pIn1->u.i = pc;.
5d90: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
5da0: 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b  (pOp->p1, pIn1);
5db0: 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20  .  pc = pOp->p2 
5dc0: 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  - 1;.  break;.}.
5dd0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65 74  ./* Opcode:  Ret
5de0: 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  urn P1 * * * *.*
5df0: 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65  *.** Jump to the
5e00: 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
5e10: 6e 20 61 66 74 65 72 20 74 68 65 20 61 64 64 72  n after the addr
5e20: 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ess in register 
5e30: 50 31 2e 20 20 41 66 74 65 72 0a 2a 2a 20 74 68  P1.  After.** th
5e40: 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72  e jump, register
5e50: 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65   P1 becomes unde
5e60: 66 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  fined..*/.case O
5e70: 50 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20 20 20  P_Return: {     
5e80: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
5e90: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
5ea0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
5eb0: 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d  t( pIn1->flags==
5ec0: 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 63 20  MEM_Int );.  pc 
5ed0: 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69  = (int)pIn1->u.i
5ee0: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
5ef0: 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b  = MEM_Undefined;
5f00: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
5f10: 4f 70 63 6f 64 65 3a 20 49 6e 69 74 43 6f 72 6f  Opcode: InitCoro
5f20: 75 74 69 6e 65 20 50 31 20 50 32 20 50 33 20 2a  utine P1 P2 P3 *
5f30: 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75 70 20   *.**.** Set up 
5f40: 72 65 67 69 73 74 65 72 20 50 31 20 73 6f 20 74  register P1 so t
5f50: 68 61 74 20 69 74 20 77 69 6c 6c 20 4f 50 5f 59  hat it will OP_Y
5f60: 69 65 6c 64 20 74 6f 20 74 68 65 20 63 6f 2d 72  ield to the co-r
5f70: 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65  outine.** locate
5f80: 64 20 61 74 20 61 64 64 72 65 73 73 20 50 33 2e  d at address P3.
5f90: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 21 3d 30 20  .**.** If P2!=0 
5fa0: 74 68 65 6e 20 74 68 65 20 63 6f 2d 72 6f 75 74  then the co-rout
5fb0: 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ine implementati
5fc0: 6f 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66  on immediately f
5fd0: 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69 73 20 6f  ollows.** this o
5fe0: 70 63 6f 64 65 2e 20 20 53 6f 20 6a 75 6d 70 20  pcode.  So jump 
5ff0: 6f 76 65 72 20 74 68 65 20 63 6f 2d 72 6f 75 74  over the co-rout
6000: 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ine implementati
6010: 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72 65 73 73  on to.** address
6020: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
6030: 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b  InitCoroutine: {
6040: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
6050: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
6060: 31 3e 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c  1>0 &&  pOp->p1<
6070: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
6080: 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72  rsor) );.  asser
6090: 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 26 26  t( pOp->p2>=0 &&
60a0: 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20   pOp->p2<p->nOp 
60b0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
60c0: 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p3>=0 && pOp->
60d0: 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70  p3<p->nOp );.  p
60e0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
60f0: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
6100: 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28  !VdbeMemDynamic(
6110: 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75 74 2d  pOut) );.  pOut-
6120: 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33 20 2d  >u.i = pOp->p3 -
6130: 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   1;.  pOut->flag
6140: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69  s = MEM_Int;.  i
6150: 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 70 63 20  f( pOp->p2 ) pc 
6160: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
6170: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6180: 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75 74  code:  EndCorout
6190: 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ine P1 * * * *.*
61a0: 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72 75 63  *.** The instruc
61b0: 74 69 6f 6e 20 61 74 20 74 68 65 20 61 64 64 72  tion at the addr
61c0: 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ess in register 
61d0: 50 31 20 69 73 20 61 6e 20 4f 50 5f 59 69 65 6c  P1 is an OP_Yiel
61e0: 64 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68  d..** Jump to th
61f0: 65 20 50 32 20 70 61 72 61 6d 65 74 65 72 20 6f  e P2 parameter o
6200: 66 20 74 68 61 74 20 4f 50 5f 59 69 65 6c 64 2e  f that OP_Yield.
6210: 0a 2a 2a 20 41 66 74 65 72 20 74 68 65 20 6a 75  .** After the ju
6220: 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20  mp, register P1 
6230: 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65  becomes undefine
6240: 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e  d..*/.case OP_En
6250: 64 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20  dCoroutine: {   
6260: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
6270: 2f 0a 20 20 56 64 62 65 4f 70 20 2a 70 43 61 6c  /.  VdbeOp *pCal
6280: 6c 65 72 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  ler;.  pIn1 = &a
6290: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
62a0: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
62b0: 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
62c0: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
62d0: 75 2e 69 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e  u.i>=0 && pIn1->
62e0: 75 2e 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  u.i<p->nOp );.  
62f0: 70 43 61 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70  pCaller = &aOp[p
6300: 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73  In1->u.i];.  ass
6310: 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70  ert( pCaller->op
6320: 63 6f 64 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29  code==OP_Yield )
6330: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61 6c  ;.  assert( pCal
6340: 6c 65 72 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43  ler->p2>=0 && pC
6350: 61 6c 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  aller->p2<p->nOp
6360: 20 29 3b 0a 20 20 70 63 20 3d 20 70 43 61 6c 6c   );.  pc = pCall
6370: 65 72 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 70 49  er->p2 - 1;.  pI
6380: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
6390: 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65  Undefined;.  bre
63a0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
63b0: 3a 20 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a  :  Yield P1 P2 *
63c0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20   * *.**.** Swap 
63d0: 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e  the program coun
63e0: 74 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c  ter with the val
63f0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
6400: 31 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  1..**.** If the 
6410: 63 6f 2d 72 6f 75 74 69 6e 65 20 65 6e 64 73 20  co-routine ends 
6420: 77 69 74 68 20 4f 50 5f 59 69 65 6c 64 20 6f 72  with OP_Yield or
6430: 20 4f 50 5f 52 65 74 75 72 6e 20 74 68 65 6e 20   OP_Return then 
6440: 63 6f 6e 74 69 6e 75 65 0a 2a 2a 20 74 6f 20 74  continue.** to t
6450: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
6460: 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65  ion.  But if the
6470: 20 63 6f 2d 72 6f 75 74 69 6e 65 20 65 6e 64 73   co-routine ends
6480: 20 77 69 74 68 0a 2a 2a 20 4f 50 5f 45 6e 64 43   with.** OP_EndC
6490: 6f 72 6f 75 74 69 6e 65 2c 20 6a 75 6d 70 20 69  oroutine, jump i
64a0: 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
64b0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65  ..*/.case OP_Yie
64c0: 6c 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ld: {           
64d0: 20 2f 2a 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f   /* in1, jump */
64e0: 0a 20 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20  .  int pcDest;. 
64f0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
6500: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
6510: 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63  ( VdbeMemDynamic
6520: 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 70  (pIn1)==0 );.  p
6530: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
6540: 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73 74 20 3d  _Int;.  pcDest =
6550: 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b   (int)pIn1->u.i;
6560: 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70  .  pIn1->u.i = p
6570: 63 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  c;.  REGISTER_TR
6580: 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e  ACE(pOp->p1, pIn
6590: 31 29 3b 0a 20 20 70 63 20 3d 20 70 63 44 65 73  1);.  pc = pcDes
65a0: 74 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  t;.  break;.}../
65b0: 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 49  * Opcode:  HaltI
65c0: 66 4e 75 6c 6c 20 20 50 31 20 50 32 20 50 33 20  fNull  P1 P2 P3 
65d0: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
65e0: 73 3a 20 20 69 66 20 72 5b 50 33 5d 3d 6e 75 6c  s:  if r[P3]=nul
65f0: 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65  l halt.**.** Che
6600: 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ck the value in 
6610: 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 49 66  register P3.  If
6620: 20 69 74 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e   it is NULL then
6630: 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70   Halt using.** p
6640: 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50 32 2c  arameter P1, P2,
6650: 20 61 6e 64 20 50 34 20 61 73 20 69 66 20 74 68   and P4 as if th
6660: 69 73 20 77 65 72 65 20 61 20 48 61 6c 74 20 69  is were a Halt i
6670: 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20  nstruction.  If 
6680: 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20  the.** value in 
6690: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6e  register P3 is n
66a0: 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68  ot NULL, then th
66b0: 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20  is routine is a 
66c0: 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20 50 35  no-op..** The P5
66d0: 20 70 61 72 61 6d 65 74 65 72 20 73 68 6f 75 6c   parameter shoul
66e0: 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61 73 65 20  d be 1..*/.case 
66f0: 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b  OP_HaltIfNull: {
6700: 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a        /* in3 */.
6710: 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
6720: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
6730: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
6740: 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65  M_Null)==0 ) bre
6750: 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68  ak;.  /* Fall th
6760: 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61  rough into OP_Ha
6770: 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  lt */.}../* Opco
6780: 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32 20  de:  Halt P1 P2 
6790: 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78  * P4 P5.**.** Ex
67a0: 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20  it immediately. 
67b0: 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72   All open cursor
67c0: 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73 65  s, etc are close
67d0: 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c  d.** automatical
67e0: 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ly..**.** P1 is 
67f0: 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20  the result code 
6800: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
6810: 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c 69  te3_exec(), sqli
6820: 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20  te3_reset(),.** 
6830: 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  or sqlite3_final
6840: 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f  ize().  For a no
6850: 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73 20  rmal halt, this 
6860: 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45  should be SQLITE
6870: 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20  _OK (0)..** For 
6880: 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20 62  errors, it can b
6890: 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c  e some other val
68a0: 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74 68  ue.  If P1!=0 th
68b0: 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65 72  en P2 will deter
68c0: 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20  mine.** whether 
68d0: 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61  or not to rollba
68e0: 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  ck the current t
68f0: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20  ransaction.  Do 
6900: 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20  not rollback.** 
6910: 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20  if P2==OE_Fail. 
6920: 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20  Do the rollback 
6930: 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61  if P2==OE_Rollba
6940: 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41  ck.  If P2==OE_A
6950: 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61  bort,.** then ba
6960: 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67  ck out all chang
6970: 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63  es that have occ
6980: 75 72 72 65 64 20 64 75 72 69 6e 67 20 74 68 69  urred during thi
6990: 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74  s execution of t
69a0: 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74 20  he.** VDBE, but 
69b0: 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  do not rollback 
69c0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  the transaction.
69d0: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73   .**.** If P4 is
69e0: 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69   not null then i
69f0: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d 65  t is an error me
6a00: 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a  ssage string..**
6a10: 0a 2a 2a 20 50 35 20 69 73 20 61 20 76 61 6c 75  .** P5 is a valu
6a20: 65 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20  e between 0 and 
6a30: 34 2c 20 69 6e 63 6c 75 73 69 76 65 2c 20 74 68  4, inclusive, th
6a40: 61 74 20 6d 6f 64 69 66 69 65 73 20 74 68 65 20  at modifies the 
6a50: 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a  P4 string..**.**
6a60: 20 20 20 20 30 3a 20 20 28 6e 6f 20 63 68 61 6e      0:  (no chan
6a70: 67 65 29 0a 2a 2a 20 20 20 20 31 3a 20 20 4e 4f  ge).**    1:  NO
6a80: 54 20 4e 55 4c 4c 20 63 6f 6e 74 72 61 69 6e 74  T NULL contraint
6a90: 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20   failed: P4.**  
6aa0: 20 20 32 3a 20 20 55 4e 49 51 55 45 20 63 6f 6e    2:  UNIQUE con
6ab0: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20  straint failed: 
6ac0: 50 34 0a 2a 2a 20 20 20 20 33 3a 20 20 43 48 45  P4.**    3:  CHE
6ad0: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  CK constraint fa
6ae0: 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 34  iled: P4.**    4
6af0: 3a 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 63  :  FOREIGN KEY c
6b00: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
6b10: 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  : P4.**.** If P5
6b20: 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64   is not zero and
6b30: 20 50 34 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65   P4 is NULL, the
6b40: 6e 20 65 76 65 72 79 74 68 69 6e 67 20 61 66 74  n everything aft
6b50: 65 72 20 74 68 65 20 22 3a 22 20 69 73 0a 2a 2a  er the ":" is.**
6b60: 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20   omitted..**.** 
6b70: 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70 6c  There is an impl
6b80: 69 65 64 20 22 48 61 6c 74 20 30 20 30 20 30 22  ied "Halt 0 0 0"
6b90: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 73   instruction ins
6ba0: 65 72 74 65 64 20 61 74 20 74 68 65 20 76 65 72  erted at the ver
6bb0: 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72  y end of.** ever
6bc0: 79 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61  y program.  So a
6bd0: 20 6a 75 6d 70 20 70 61 73 74 20 74 68 65 20 6c   jump past the l
6be0: 61 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ast instruction 
6bf0: 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a  of the program.*
6c00: 2a 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  * is the same as
6c10: 20 65 78 65 63 75 74 69 6e 67 20 48 61 6c 74 2e   executing Halt.
6c20: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74  .*/.case OP_Halt
6c30: 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  : {.  const char
6c40: 20 2a 7a 54 79 70 65 3b 0a 20 20 63 6f 6e 73 74   *zType;.  const
6c50: 20 63 68 61 72 20 2a 7a 4c 6f 67 46 6d 74 3b 0a   char *zLogFmt;.
6c60: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d  .  if( pOp->p1==
6c70: 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e  SQLITE_OK && p->
6c80: 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a  pFrame ){.    /*
6c90: 20 48 61 6c 74 20 74 68 65 20 73 75 62 2d 70 72   Halt the sub-pr
6ca0: 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f  ogram. Return co
6cb0: 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 70 61 72  ntrol to the par
6cc0: 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20  ent frame. */.  
6cd0: 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
6ce0: 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ame = p->pFrame;
6cf0: 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d  .    p->pFrame =
6d00: 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
6d10: 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d  ;.    p->nFrame-
6d20: 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  -;.    sqlite3Vd
6d30: 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c  beSetChanges(db,
6d40: 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20   p->nChange);.  
6d50: 20 20 70 63 20 3d 20 73 71 6c 69 74 65 33 56 64    pc = sqlite3Vd
6d60: 62 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28 70  beFrameRestore(p
6d70: 46 72 61 6d 65 29 3b 0a 20 20 20 20 6c 61 73 74  Frame);.    last
6d80: 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74  Rowid = db->last
6d90: 52 6f 77 69 64 3b 0a 20 20 20 20 69 66 28 20 70  Rowid;.    if( p
6da0: 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72  Op->p2==OE_Ignor
6db0: 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e  e ){.      /* In
6dc0: 73 74 72 75 63 74 69 6f 6e 20 70 63 20 69 73 20  struction pc is 
6dd0: 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74  the OP_Program t
6de0: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20  hat invoked the 
6df0: 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20  sub-program .   
6e00: 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20     ** currently 
6e10: 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66  being halted. If
6e20: 20 74 68 65 20 70 32 20 69 6e 73 74 72 75 63 74   the p2 instruct
6e30: 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48  ion of this OP_H
6e40: 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73  alt.      ** ins
6e50: 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20  truction is set 
6e60: 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68  to OE_Ignore, th
6e70: 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  en the sub-progr
6e80: 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20  am is throwing. 
6e90: 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52       ** an IGNOR
6ea0: 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20  E exception. In 
6eb0: 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74  this case jump t
6ec0: 6f 20 74 68 65 20 61 64 64 72 65 73 73 20 73 70  o the address sp
6ed0: 65 63 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a  ecified.      **
6ee0: 20 61 73 20 74 68 65 20 70 32 20 6f 66 20 74 68   as the p2 of th
6ef0: 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f  e calling OP_Pro
6f00: 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20  gram.  */.      
6f10: 70 63 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 5d 2e  pc = p->aOp[pc].
6f20: 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p2-1;.    }.    
6f30: 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20  aOp = p->aOp;.  
6f40: 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d    aMem = p->aMem
6f50: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
6f60: 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e  .  p->rc = pOp->
6f70: 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63  p1;.  p->errorAc
6f80: 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e  tion = (u8)pOp->
6f90: 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63  p2;.  p->pc = pc
6fa0: 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 20 29 7b  ;.  if( p->rc ){
6fb0: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
6fc0: 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63   ){.      static
6fd0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 63 6f   const char * co
6fe0: 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20 3d 20 7b  nst azType[] = {
6ff0: 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22 55 4e   "NOT NULL", "UN
7000: 49 51 55 45 22 2c 20 22 43 48 45 43 4b 22 2c 0a  IQUE", "CHECK",.
7010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7030: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46 4f               "FO
7040: 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b 0a 20 20  REIGN KEY" };.  
7050: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
7060: 3e 70 35 3e 3d 31 20 26 26 20 70 4f 70 2d 3e 70  >p5>=1 && pOp->p
7070: 35 3c 3d 34 20 29 3b 0a 20 20 20 20 20 20 74 65  5<=4 );.      te
7080: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
7090: 3d 31 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  =1 );.      test
70a0: 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 32  case( pOp->p5==2
70b0: 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
70c0: 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 33 20 29  se( pOp->p5==3 )
70d0: 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
70e0: 28 20 70 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a  ( pOp->p5==4 );.
70f0: 20 20 20 20 20 20 7a 54 79 70 65 20 3d 20 61 7a        zType = az
7100: 54 79 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d 3b  Type[pOp->p5-1];
7110: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
7120: 20 20 7a 54 79 70 65 20 3d 20 30 3b 0a 20 20 20    zType = 0;.   
7130: 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a   }.    assert( z
7140: 54 79 70 65 21 3d 30 20 7c 7c 20 70 4f 70 2d 3e  Type!=0 || pOp->
7150: 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 20 20 7a  p4.z!=0 );.    z
7160: 4c 6f 67 46 6d 74 20 3d 20 22 61 62 6f 72 74 20  LogFmt = "abort 
7170: 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a 20 25  at %d in [%s]: %
7180: 73 22 3b 0a 20 20 20 20 69 66 28 20 7a 54 79 70  s";.    if( zTyp
7190: 65 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29  e && pOp->p4.z )
71a0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  {.      sqlite3S
71b0: 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
71c0: 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 20 63 6f  rMsg, db, "%s co
71d0: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
71e0: 20 25 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20   %s", .         
71f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 54                zT
7200: 79 70 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  ype, pOp->p4.z);
7210: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70  .    }else if( p
7220: 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20  Op->p4.z ){.    
7230: 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
7240: 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
7250: 64 62 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70  db, "%s", pOp->p
7260: 34 2e 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  4.z);.    }else{
7270: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
7280: 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
7290: 4d 73 67 2c 20 64 62 2c 20 22 25 73 20 63 6f 6e  Msg, db, "%s con
72a0: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 22 2c  straint failed",
72b0: 20 7a 54 79 70 65 29 3b 0a 20 20 20 20 7d 0a 20   zType);.    }. 
72c0: 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70     sqlite3_log(p
72d0: 4f 70 2d 3e 70 31 2c 20 7a 4c 6f 67 46 6d 74 2c  Op->p1, zLogFmt,
72e0: 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d   pc, p->zSql, p-
72f0: 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20  >zErrMsg);.  }. 
7300: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
7310: 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65  eHalt(p);.  asse
7320: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  rt( rc==SQLITE_B
7330: 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  USY || rc==SQLIT
7340: 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  E_OK || rc==SQLI
7350: 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69 66  TE_ERROR );.  if
7360: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
7370: 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d  Y ){.    p->rc =
7380: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
7390: 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  Y;.  }else{.    
73a0: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
73b0: 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26  TE_OK || (p->rc&
73c0: 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f  0xff)==SQLITE_CO
73d0: 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20 20  NSTRAINT );.    
73e0: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
73f0: 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65  TE_OK || db->nDe
7400: 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 7c 7c 20  ferredCons>0 || 
7410: 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
7420: 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72 63  Cons>0 );.    rc
7430: 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54   = p->rc ? SQLIT
7440: 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54 45  E_ERROR : SQLITE
7450: 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74  _DONE;.  }.  got
7460: 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d  o vdbe_return;.}
7470: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  ../* Opcode: Int
7480: 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a  eger P1 P2 * * *
7490: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
74a0: 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68 65  P2]=P1.**.** The
74b0: 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20   32-bit integer 
74c0: 76 61 6c 75 65 20 50 31 20 69 73 20 77 72 69 74  value P1 is writ
74d0: 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ten into registe
74e0: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
74f0: 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20  _Integer: {     
7500: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
7510: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74  elease */.  pOut
7520: 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  ->u.i = pOp->p1;
7530: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
7540: 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20  Opcode: Int64 * 
7550: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
7560: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a  opsis: r[P2]=P4.
7570: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
7580: 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69  inter to a 64-bi
7590: 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  t integer value.
75a0: 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76  .** Write that v
75b0: 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
75c0: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
75d0: 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20  P_Int64: {      
75e0: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
75f0: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
7600: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36  ert( pOp->p4.pI6
7610: 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  4!=0 );.  pOut->
7620: 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70  u.i = *pOp->p4.p
7630: 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  I64;.  break;.}.
7640: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
7650: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
7660: 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  INT./* Opcode: R
7670: 65 61 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  eal * P2 * P4 *.
7680: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
7690: 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69  2]=P4.**.** P4 i
76a0: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
76b0: 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67   64-bit floating
76c0: 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a   point value..**
76d0: 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75   Write that valu
76e0: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
76f0: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P2..*/.case OP_R
7700: 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  eal: {          
7710: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
7720: 46 4c 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65 72  FLOAT, out2-prer
7730: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74  elease */.  pOut
7740: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65  ->flags = MEM_Re
7750: 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73  al;.  assert( !s
7760: 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70  qlite3IsNaN(*pOp
7770: 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20  ->p4.pReal) );. 
7780: 20 70 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d   pOut->r = *pOp-
7790: 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65  >p4.pReal;.  bre
77a0: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
77b0: 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 38   Opcode: String8
77c0: 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20   * P2 * P4 *.** 
77d0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
77e0: 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f  'P4'.**.** P4 po
77f0: 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20 74 65  ints to a nul te
7800: 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73  rminated UTF-8 s
7810: 74 72 69 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f  tring. This opco
7820: 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65  de is transforme
7830: 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 6e 20 4f 50  d .** into an OP
7840: 5f 53 74 72 69 6e 67 20 62 65 66 6f 72 65 20 69  _String before i
7850: 74 20 69 73 20 65 78 65 63 75 74 65 64 20 66 6f  t is executed fo
7860: 72 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65  r the first time
7870: 2e 20 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69  .  During.** thi
7880: 73 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  s transformation
7890: 2c 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20  , the length of 
78a0: 73 74 72 69 6e 67 20 50 34 20 69 73 20 63 6f 6d  string P4 is com
78b0: 70 75 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64  puted and stored
78c0: 0a 2a 2a 20 61 73 20 74 68 65 20 50 31 20 70 61  .** as the P1 pa
78d0: 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65  rameter..*/.case
78e0: 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20   OP_String8: {  
78f0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
7900: 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74  s TK_STRING, out
7910: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7920: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7930: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d  4.z!=0 );.  pOp-
7940: 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72  >opcode = OP_Str
7950: 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d  ing;.  pOp->p1 =
7960: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
7970: 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69  (pOp->p4.z);..#i
7980: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
7990: 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e  T_UTF16.  if( en
79a0: 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55  coding!=SQLITE_U
79b0: 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  TF8 ){.    rc = 
79c0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
79d0: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
79e0: 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  p4.z, -1, SQLITE
79f0: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
7a00: 41 54 49 43 29 3b 0a 20 20 20 20 69 66 28 20 72  ATIC);.    if( r
7a10: 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47  c==SQLITE_TOOBIG
7a20: 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b   ) goto too_big;
7a30: 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f  .    if( SQLITE_
7a40: 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43  OK!=sqlite3VdbeC
7a50: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f  hangeEncoding(pO
7a60: 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20  ut, encoding) ) 
7a70: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
7a80: 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 7a   assert( pOut->z
7a90: 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20  Malloc==pOut->z 
7aa0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 56  );.    assert( V
7ab0: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f  dbeMemDynamic(pO
7ac0: 75 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 70 4f  ut)==0 );.    pO
7ad0: 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b  ut->zMalloc = 0;
7ae0: 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
7af0: 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a   |= MEM_Static;.
7b00: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74      if( pOp->p4t
7b10: 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20  ype==P4_DYNAMIC 
7b20: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
7b30: 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e  DbFree(db, pOp->
7b40: 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20  p4.z);.    }.   
7b50: 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50   pOp->p4type = P
7b60: 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70  4_DYNAMIC;.    p
7b70: 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d  Op->p4.z = pOut-
7b80: 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20  >z;.    pOp->p1 
7b90: 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23  = pOut->n;.  }.#
7ba0: 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d  endif.  if( pOp-
7bb0: 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  >p1>db->aLimit[S
7bc0: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
7bd0: 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
7be0: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 2f  too_big;.  }.  /
7bf0: 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  * Fall through t
7c00: 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73 65 2c  o the next case,
7c10: 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a   OP_String */.}.
7c20: 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74    ./* Opcode: St
7c30: 72 69 6e 67 20 50 31 20 50 32 20 2a 20 50 34 20  ring P1 P2 * P4 
7c40: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
7c50: 5b 50 32 5d 3d 27 50 34 27 20 28 6c 65 6e 3d 50  [P2]='P4' (len=P
7c60: 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72  1).**.** The str
7c70: 69 6e 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20  ing value P4 of 
7c80: 6c 65 6e 67 74 68 20 50 31 20 28 62 79 74 65 73  length P1 (bytes
7c90: 29 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  ) is stored in r
7ca0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
7cb0: 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b  ase OP_String: {
7cc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
7cd0: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7ce0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7cf0: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  4.z!=0 );.  pOut
7d00: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74  ->flags = MEM_St
7d10: 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d  r|MEM_Static|MEM
7d20: 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a  _Term;.  pOut->z
7d30: 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
7d40: 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70  pOut->n = pOp->p
7d50: 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  1;.  pOut->enc =
7d60: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
7d70: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
7d80: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
7d90: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
7da0: 75 6c 6c 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ull P1 P2 P3 * *
7db0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
7dc0: 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a  [P2..P3]=NULL.**
7dd0: 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c  .** Write a NULL
7de0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20   into registers 
7df0: 50 32 2e 20 20 49 66 20 50 33 20 67 72 65 61 74  P2.  If P3 great
7e00: 65 72 20 74 68 61 6e 20 50 32 2c 20 74 68 65 6e  er than P2, then
7e10: 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e   also write.** N
7e20: 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ULL into registe
7e30: 72 20 50 33 20 61 6e 64 20 65 76 65 72 79 20 72  r P3 and every r
7e40: 65 67 69 73 74 65 72 20 69 6e 20 62 65 74 77 65  egister in betwe
7e50: 65 6e 20 50 32 20 61 6e 64 20 50 33 2e 20 20 49  en P2 and P3.  I
7e60: 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20  f P3.** is less 
7e70: 74 68 61 6e 20 50 32 20 28 74 79 70 69 63 61 6c  than P2 (typical
7e80: 6c 79 20 50 33 20 69 73 20 7a 65 72 6f 29 20 74  ly P3 is zero) t
7e90: 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73 74 65  hen only registe
7ea0: 72 20 50 32 20 69 73 0a 2a 2a 20 73 65 74 20 74  r P2 is.** set t
7eb0: 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66  o NULL..**.** If
7ec0: 20 74 68 65 20 50 31 20 76 61 6c 75 65 20 69 73   the P1 value is
7ed0: 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
7ee0: 61 6c 73 6f 20 73 65 74 20 74 68 65 20 4d 45 4d  also set the MEM
7ef0: 5f 43 6c 65 61 72 65 64 20 66 6c 61 67 20 73 6f  _Cleared flag so
7f00: 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61   that.** NULL va
7f10: 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f  lues will not co
7f20: 6d 70 61 72 65 20 65 71 75 61 6c 20 65 76 65 6e  mpare equal even
7f30: 20 69 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   if SQLITE_NULLE
7f40: 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f  Q is set on.** O
7f50: 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a  P_Ne or OP_Eq..*
7f60: 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20  /.case OP_Null: 
7f70: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
7f80: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
7f90: 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75  /.  int cnt;.  u
7fa0: 31 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 63  16 nullFlag;.  c
7fb0: 6e 74 20 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70  nt = pOp->p3-pOp
7fc0: 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
7fd0: 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
7fe0: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
7ff0: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
8000: 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70 4f 70 2d   nullFlag = pOp-
8010: 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c  >p1 ? (MEM_Null|
8020: 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20 3a 20 4d  MEM_Cleared) : M
8030: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 77 68 69 6c 65  EM_Null;.  while
8040: 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70  ( cnt>0 ){.    p
8050: 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62  Out++;.    memAb
8060: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
8070: 4f 75 74 29 3b 0a 20 20 20 20 56 64 62 65 4d 65  Out);.    VdbeMe
8080: 6d 52 65 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a  mRelease(pOut);.
8090: 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
80a0: 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20  = nullFlag;.    
80b0: 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65  cnt--;.  }.  bre
80c0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
80d0: 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20  : SoftNull P1 * 
80e0: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
80f0: 73 3a 20 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a  s:  r[P1]=NULL.*
8100: 2a 0a 2a 2a 20 53 65 74 20 72 65 67 69 73 74 65  *.** Set registe
8110: 72 20 50 31 20 74 6f 20 68 61 76 65 20 74 68 65  r P1 to have the
8120: 20 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73   value NULL as s
8130: 65 65 6e 20 62 79 20 74 68 65 20 4f 50 5f 4d 61  een by the OP_Ma
8140: 6b 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74  keRecord.** inst
8150: 72 75 63 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20  ruction, but do 
8160: 6e 6f 74 20 66 72 65 65 20 61 6e 79 20 73 74 72  not free any str
8170: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f  ing or blob memo
8180: 72 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ry associated wi
8190: 74 68 0a 2a 2a 20 74 68 65 20 72 65 67 69 73 74  th.** the regist
81a0: 65 72 2c 20 73 6f 20 74 68 61 74 20 69 66 20 74  er, so that if t
81b0: 68 65 20 76 61 6c 75 65 20 77 61 73 20 61 20 73  he value was a s
81c0: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68  tring or blob th
81d0: 61 74 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f  at was.** previo
81e0: 75 73 6c 79 20 63 6f 70 69 65 64 20 75 73 69 6e  usly copied usin
81f0: 67 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68 65 20  g OP_SCopy, the 
8200: 63 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74  copies will cont
8210: 69 6e 75 65 20 74 6f 20 62 65 20 76 61 6c 69 64  inue to be valid
8220: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66  ..*/.case OP_Sof
8230: 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72  tNull: {.  asser
8240: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
8250: 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
8260: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
8270: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
8280: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
8290: 2d 3e 66 6c 61 67 73 20 3d 20 28 70 4f 75 74 2d  ->flags = (pOut-
82a0: 3e 66 6c 61 67 73 7c 4d 45 4d 5f 4e 75 6c 6c 29  >flags|MEM_Null)
82b0: 26 7e 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b  &~MEM_Undefined;
82c0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
82d0: 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20  Opcode: Blob P1 
82e0: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
82f0: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 20  opsis: r[P2]=P4 
8300: 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50  (len=P1).**.** P
8310: 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c  4 points to a bl
8320: 6f 62 20 6f 66 20 64 61 74 61 20 50 31 20 62 79  ob of data P1 by
8330: 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65  tes long.  Store
8340: 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e   this.** blob in
8350: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
8360: 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b  .case OP_Blob: {
8370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8380: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
8390: 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  se */.  assert( 
83a0: 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54  pOp->p1 <= SQLIT
83b0: 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a  E_MAX_LENGTH );.
83c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
83d0: 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70  SetStr(pOut, pOp
83e0: 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c  ->p4.z, pOp->p1,
83f0: 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e   0, 0);.  pOut->
8400: 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
8410: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
8420: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
8430: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
8440: 64 65 3a 20 56 61 72 69 61 62 6c 65 20 50 31 20  de: Variable P1 
8450: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
8460: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 70 61 72  opsis: r[P2]=par
8470: 61 6d 65 74 65 72 28 50 31 2c 50 34 29 0a 2a 2a  ameter(P1,P4).**
8480: 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65  .** Transfer the
8490: 20 76 61 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64   values of bound
84a0: 20 70 61 72 61 6d 65 74 65 72 20 50 31 20 69 6e   parameter P1 in
84b0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  to register P2.*
84c0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70 61 72 61  *.** If the para
84d0: 6d 65 74 65 72 20 69 73 20 6e 61 6d 65 64 2c 20  meter is named, 
84e0: 74 68 65 6e 20 69 74 73 20 6e 61 6d 65 20 61 70  then its name ap
84f0: 70 65 61 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 20  pears in P4..** 
8500: 54 68 65 20 50 34 20 76 61 6c 75 65 20 69 73 20  The P4 value is 
8510: 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
8520: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
8530: 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ame()..*/.case O
8540: 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20  P_Variable: {   
8550: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
8560: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
8570: 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20   Mem *pVar;     
8580: 20 20 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67    /* Value being
8590: 20 74 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a   transferred */.
85a0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
85b0: 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
85c0: 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73  =p->nVar );.  as
85d0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d  sert( pOp->p4.z=
85e0: 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d  =0 || pOp->p4.z=
85f0: 3d 70 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e 70  =p->azVar[pOp->p
8600: 31 2d 31 5d 20 29 3b 0a 20 20 70 56 61 72 20 3d  1-1] );.  pVar =
8610: 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70   &p->aVar[pOp->p
8620: 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73 71  1 - 1];.  if( sq
8630: 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
8640: 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20  ig(pVar) ){.    
8650: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
8660: 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  }.  sqlite3VdbeM
8670: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
8680: 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74  ut, pVar, MEM_St
8690: 61 74 69 63 29 3b 0a 20 20 55 50 44 41 54 45 5f  atic);.  UPDATE_
86a0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
86b0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
86c0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20  /* Opcode: Move 
86d0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
86e0: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32 40  Synopsis:  r[P2@
86f0: 50 33 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a  P3]=r[P1@P3].**.
8700: 2a 2a 20 4d 6f 76 65 20 74 68 65 20 76 61 6c 75  ** Move the valu
8710: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
8720: 31 2e 2e 50 31 2b 50 33 20 6f 76 65 72 20 69 6e  1..P1+P3 over in
8730: 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20  to.** registers 
8740: 50 32 2e 2e 50 32 2b 50 33 2e 20 20 52 65 67 69  P2..P2+P3.  Regi
8750: 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20  sters P1..P1+P3 
8760: 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64  are.** left hold
8770: 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20  ing a NULL.  It 
8780: 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20  is an error for 
8790: 72 65 67 69 73 74 65 72 20 72 61 6e 67 65 73 0a  register ranges.
87a0: 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 20 61 6e 64  ** P1..P1+P3 and
87b0: 20 50 32 2e 2e 50 32 2b 50 33 20 74 6f 20 6f 76   P2..P2+P3 to ov
87c0: 65 72 6c 61 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f  erlap..*/.case O
87d0: 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 63 68 61 72  P_Move: {.  char
87e0: 20 2a 7a 4d 61 6c 6c 6f 63 3b 20 20 20 2f 2a 20   *zMalloc;   /* 
87f0: 48 6f 6c 64 69 6e 67 20 76 61 72 69 61 62 6c 65  Holding variable
8800: 20 66 6f 72 20 61 6c 6c 6f 63 61 74 65 64 20 6d   for allocated m
8810: 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 6e  emory */.  int n
8820: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
8830: 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65  umber of registe
8840: 72 73 20 6c 65 66 74 20 74 6f 20 63 6f 70 79 20  rs left to copy 
8850: 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20  */.  int p1;    
8860: 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
8870: 72 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a  r to copy from *
8880: 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20  /.  int p2;     
8890: 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
88a0: 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a   to copy to */..
88b0: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    n = pOp->p3;. 
88c0: 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
88d0: 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20   p2 = pOp->p2;. 
88e0: 20 61 73 73 65 72 74 28 20 6e 3e 3d 30 20 26 26   assert( n>=0 &&
88f0: 20 70 31 3e 30 20 26 26 20 70 32 3e 30 20 29 3b   p1>0 && p2>0 );
8900: 0a 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c  .  assert( p1+n<
8910: 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20  =p2 || p2+n<=p1 
8920: 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  );..  pIn1 = &aM
8930: 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  em[p1];.  pOut =
8940: 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f   &aMem[p2];.  do
8950: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
8960: 75 74 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d  ut<=&aMem[(p->nM
8970: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20  em-p->nCursor)] 
8980: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
8990: 49 6e 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e  In1<=&aMem[(p->n
89a0: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d  Mem-p->nCursor)]
89b0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
89c0: 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29  memIsValid(pIn1)
89d0: 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74   );.    memAbout
89e0: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
89f0: 29 3b 0a 20 20 20 20 56 64 62 65 4d 65 6d 52 65  );.    VdbeMemRe
8a00: 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a 20 20 20  lease(pOut);.   
8a10: 20 7a 4d 61 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d   zMalloc = pOut-
8a20: 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 6d 65  >zMalloc;.    me
8a30: 6d 63 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c  mcpy(pOut, pIn1,
8a40: 20 73 69 7a 65 6f 66 28 4d 65 6d 29 29 3b 0a 23   sizeof(Mem));.#
8a50: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
8a60: 55 47 0a 20 20 20 20 69 66 28 20 70 4f 75 74 2d  UG.    if( pOut-
8a70: 3e 70 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d  >pScopyFrom>=&aM
8a80: 65 6d 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e  em[p1] && pOut->
8a90: 70 53 63 6f 70 79 46 72 6f 6d 3c 26 61 4d 65 6d  pScopyFrom<&aMem
8aa0: 5b 70 31 2b 70 4f 70 2d 3e 70 33 5d 20 29 7b 0a  [p1+pOp->p3] ){.
8ab0: 20 20 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f        pOut->pSco
8ac0: 70 79 46 72 6f 6d 20 2b 3d 20 70 31 20 2d 20 70  pyFrom += p1 - p
8ad0: 4f 70 2d 3e 70 32 3b 0a 20 20 20 20 7d 0a 23 65  Op->p2;.    }.#e
8ae0: 6e 64 69 66 0a 20 20 20 20 70 49 6e 31 2d 3e 66  ndif.    pIn1->f
8af0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66  lags = MEM_Undef
8b00: 69 6e 65 64 3b 0a 20 20 20 20 70 49 6e 31 2d 3e  ined;.    pIn1->
8b10: 78 44 65 6c 20 3d 20 30 3b 0a 20 20 20 20 70 49  xDel = 0;.    pI
8b20: 6e 31 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 7a 4d  n1->zMalloc = zM
8b30: 61 6c 6c 6f 63 3b 0a 20 20 20 20 52 45 47 49 53  alloc;.    REGIS
8b40: 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20  TER_TRACE(p2++, 
8b50: 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b  pOut);.    pIn1+
8b60: 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20  +;.    pOut++;. 
8b70: 20 7d 77 68 69 6c 65 28 20 6e 2d 2d 20 29 3b 0a   }while( n-- );.
8b80: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
8b90: 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20 50  pcode: Copy P1 P
8ba0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
8bb0: 70 73 69 73 3a 20 72 5b 50 32 40 50 33 2b 31 5d  psis: r[P2@P3+1]
8bc0: 3d 72 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a  =r[P1@P3+1].**.*
8bd0: 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66  * Make a copy of
8be0: 20 72 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50   registers P1..P
8bf0: 31 2b 50 33 20 69 6e 74 6f 20 72 65 67 69 73 74  1+P3 into regist
8c00: 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a  ers P2..P2+P3..*
8c10: 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
8c20: 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65  ction makes a de
8c30: 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ep copy of the v
8c40: 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61  alue.  A duplica
8c50: 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66  te.** is made of
8c60: 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62   any string or b
8c70: 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53  lob constant.  S
8c80: 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79  ee also OP_SCopy
8c90: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70  ..*/.case OP_Cop
8ca0: 79 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20  y: {.  int n;.. 
8cb0: 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   n = pOp->p3;.  
8cc0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
8cd0: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
8ce0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
8cf0: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d    assert( pOut!=
8d00: 70 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65 28  pIn1 );.  while(
8d10: 20 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65   1 ){.    sqlite
8d20: 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
8d30: 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20  opy(pOut, pIn1, 
8d40: 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20  MEM_Ephem);.    
8d50: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70  Deephemeralize(p
8d60: 4f 75 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  Out);.#ifdef SQL
8d70: 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 70 4f  ITE_DEBUG.    pO
8d80: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d  ut->pScopyFrom =
8d90: 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 52   0;.#endif.    R
8da0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
8db0: 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c  p->p2+pOp->p3-n,
8dc0: 20 70 4f 75 74 29 3b 0a 20 20 20 20 69 66 28 20   pOut);.    if( 
8dd0: 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61 6b  (n--)==0 ) break
8de0: 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20  ;.    pOut++;.  
8df0: 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20    pIn1++;.  }.  
8e00: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
8e10: 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50 32  ode: SCopy P1 P2
8e20: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
8e30: 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a  is: r[P2]=r[P1].
8e40: 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61  **.** Make a sha
8e50: 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67  llow copy of reg
8e60: 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  ister P1 into re
8e70: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
8e80: 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
8e90: 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f  n makes a shallo
8ea0: 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61  w copy of the va
8eb0: 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c  lue.  If the val
8ec0: 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e  ue.** is a strin
8ed0: 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20  g or blob, then 
8ee0: 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79  the copy is only
8ef0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
8f00: 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e  e.** original an
8f10: 64 20 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f  d hence if the o
8f20: 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20  riginal changes 
8f30: 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79  so will the copy
8f40: 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74  ..** Worse, if t
8f50: 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64  he original is d
8f60: 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20  eallocated, the 
8f70: 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76  copy becomes inv
8f80: 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68  alid..** Thus th
8f90: 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67  e program must g
8fa0: 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 74 68  uarantee that th
8fb0: 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20  e original will 
8fc0: 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75  not change.** du
8fd0: 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d  ring the lifetim
8fe0: 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20  e of the copy.  
8ff0: 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d  Use OP_Copy to m
9000: 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a  ake a complete.*
9010: 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20  * copy..*/.case 
9020: 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20  OP_SCopy: {     
9030: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
9040: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
9050: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
9060: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
9070: 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
9080: 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71  ut!=pIn1 );.  sq
9090: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
90a0: 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49  lowCopy(pOut, pI
90b0: 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a  n1, MEM_Ephem);.
90c0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
90d0: 42 55 47 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e  BUG.  if( pOut->
90e0: 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29 20  pScopyFrom==0 ) 
90f0: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
9100: 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66 0a   = pIn1;.#endif.
9110: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9120: 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77  pcode: ResultRow
9130: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
9140: 53 79 6e 6f 70 73 69 73 3a 20 20 6f 75 74 70 75  Synopsis:  outpu
9150: 74 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a  t=r[P1@P2].**.**
9160: 20 54 68 65 20 72 65 67 69 73 74 65 72 73 20 50   The registers P
9170: 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d  1 through P1+P2-
9180: 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67  1 contain a sing
9190: 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73  le row of.** res
91a0: 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64  ults. This opcod
91b0: 65 20 63 61 75 73 65 73 20 74 68 65 20 73 71 6c  e causes the sql
91c0: 69 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c  ite3_step() call
91d0: 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a   to terminate.**
91e0: 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f   with an SQLITE_
91f0: 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20  ROW return code 
9200: 61 6e 64 20 69 74 20 73 65 74 73 20 75 70 20 74  and it sets up t
9210: 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a  he sqlite3_stmt.
9220: 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f 20  ** structure to 
9230: 70 72 6f 76 69 64 65 20 61 63 63 65 73 73 20 74  provide access t
9240: 6f 20 74 68 65 20 72 28 50 31 29 2e 2e 72 28 50  o the r(P1)..r(P
9250: 31 2b 50 32 2d 31 29 20 76 61 6c 75 65 73 20 61  1+P2-1) values a
9260: 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20  s.** the result 
9270: 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  row..*/.case OP_
9280: 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d  ResultRow: {.  M
9290: 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20  em *pMem;.  int 
92a0: 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  i;.  assert( p->
92b0: 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d  nResColumn==pOp-
92c0: 3e 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >p2 );.  assert(
92d0: 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20   pOp->p1>0 );.  
92e0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b  assert( pOp->p1+
92f0: 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p2<=(p->nMe
9300: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  m-p->nCursor)+1 
9310: 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
9320: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
9330: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 52  _CALLBACK.  /* R
9340: 75 6e 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  un the progress 
9350: 63 6f 75 6e 74 65 72 20 6a 75 73 74 20 62 65 66  counter just bef
9360: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 2e 0a 20  ore returning.. 
9370: 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50   */.  if( db->xP
9380: 72 6f 67 72 65 73 73 21 3d 30 0a 20 20 20 26 26  rogress!=0.   &&
9390: 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72   nVmStep>=nProgr
93a0: 65 73 73 4c 69 6d 69 74 0a 20 20 20 26 26 20 64  essLimit.   && d
93b0: 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d  b->xProgress(db-
93c0: 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 21 3d  >pProgressArg)!=
93d0: 30 0a 20 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  0.  ){.    rc = 
93e0: 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
93f0: 3b 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f  ;.    goto vdbe_
9400: 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 7d 0a  error_halt;.  }.
9410: 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20  #endif..  /* If 
9420: 74 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 68  this statement h
9430: 61 73 20 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65  as violated imme
9440: 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65  diate foreign ke
9450: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64  y constraints, d
9460: 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72  o.  ** not retur
9470: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
9480: 72 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e 20 41  rows modified. A
9490: 6e 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53  nd do not RELEAS
94a0: 45 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  E the statement.
94b0: 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e    ** transaction
94c0: 2e 20 49 74 20 6e 65 65 64 73 20 74 6f 20 62 65  . It needs to be
94d0: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a   rolled back.  *
94e0: 2f 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f  /.  if( SQLITE_O
94f0: 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69 74 65 33  K!=(rc = sqlite3
9500: 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 30  VdbeCheckFk(p, 0
9510: 29 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  )) ){.    assert
9520: 28 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49  ( db->flags&SQLI
9530: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a  TE_CountRows );.
9540: 20 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 75      assert( p->u
9550: 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29  sesStmtJournal )
9560: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
9570: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51  ..  /* If the SQ
9580: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66  LITE_CountRows f
9590: 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 73 71  lag is set in sq
95a0: 6c 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b  lite3.flags mask
95b0: 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c  , then .  ** DML
95c0: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f   statements invo
95d0: 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74  ke this opcode t
95e0: 6f 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  o return the num
95f0: 62 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a  ber of rows .  *
9600: 2a 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74 68  * modified to th
9610: 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20  e user. This is 
9620: 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68 61  the only way tha
9630: 74 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a  t a VM that.  **
9640: 20 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d 65   opens a stateme
9650: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  nt transaction m
9660: 61 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f  ay invoke this o
9670: 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  pcode..  **.  **
9680: 20 49 6e 20 63 61 73 65 20 74 68 69 73 20 69 73   In case this is
9690: 20 73 75 63 68 20 61 20 73 74 61 74 65 6d 65 6e   such a statemen
96a0: 74 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74 61  t, close any sta
96b0: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
96c0: 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62  on.  ** opened b
96d0: 79 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72 65  y this VM before
96e0: 20 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72   returning contr
96f0: 6f 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20  ol to the user. 
9700: 54 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20  This is to.  ** 
9710: 65 6e 73 75 72 65 20 74 68 61 74 20 73 74 61 74  ensure that stat
9720: 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f  ement-transactio
9730: 6e 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e 65  ns are always ne
9740: 73 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61  sted, not overla
9750: 70 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74  pping..  ** If t
9760: 68 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e  he open statemen
9770: 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  t-transaction is
9780: 20 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72 65   not closed here
9790: 2c 20 74 68 65 6e 20 74 68 65 20 75 73 65 72 0a  , then the user.
97a0: 20 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61 6e    ** may step an
97b0: 6f 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f 70  other VM that op
97c0: 65 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61 74  ens its own stat
97d0: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
97e0: 6e 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79  n. This.  ** may
97f0: 20 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61 70   lead to overlap
9800: 70 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 74  ping statement t
9810: 72 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a  ransactions..  *
9820: 2a 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74 65  *.  ** The state
9830: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
9840: 20 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70 2d   is never a top-
9850: 6c 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69 6f  level transactio
9860: 6e 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74  n.  Hence.  ** t
9870: 68 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c 20  he RELEASE call 
9880: 62 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72 20  below can never 
9890: 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73  fail..  */.  ass
98a0: 65 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d 65  ert( p->iStateme
98b0: 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61  nt==0 || db->fla
98c0: 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  gs&SQLITE_CountR
98d0: 6f 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ows );.  rc = sq
98e0: 6c 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53 74  lite3VdbeCloseSt
98f0: 61 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45 50  atement(p, SAVEP
9900: 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20  OINT_RELEASE);. 
9910: 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53   if( NEVER(rc!=S
9920: 51 4c 49 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20  QLITE_OK) ){.   
9930: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
9940: 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c  * Invalidate all
9950: 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f   ephemeral curso
9960: 72 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a  r row caches */.
9970: 20 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20    p->cacheCtr = 
9980: 28 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32  (p->cacheCtr + 2
9990: 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  )|1;..  /* Make 
99a0: 73 75 72 65 20 74 68 65 20 72 65 73 75 6c 74 73  sure the results
99b0: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
99c0: 72 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65 72  row are \000 ter
99d0: 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64  minated.  ** and
99e0: 20 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65   have an assigne
99f0: 64 20 74 79 70 65 2e 20 20 54 68 65 20 72 65 73  d type.  The res
9a00: 75 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68 65  ults are de-ephe
9a10: 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a  meralized as.  *
9a20: 2a 20 61 20 73 69 64 65 20 65 66 66 65 63 74 2e  * a side effect.
9a30: 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70  .  */.  pMem = p
9a40: 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26  ->pResultSet = &
9a50: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
9a60: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d   for(i=0; i<pOp-
9a70: 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61  >p2; i++){.    a
9a80: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
9a90: 64 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20  d(&pMem[i]) );. 
9aa0: 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a     Deephemeraliz
9ab0: 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20  e(&pMem[i]);.   
9ac0: 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 5b 69   assert( (pMem[i
9ad0: 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70  ].flags & MEM_Ep
9ae0: 68 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20 20  hem)==0.        
9af0: 20 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e      || (pMem[i].
9b00: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
9b10: 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29  |MEM_Blob))==0 )
9b20: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
9b30: 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65  eMemNulTerminate
9b40: 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20  (&pMem[i]);.    
9b50: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
9b60: 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b  Op->p1+i, &pMem[
9b70: 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64  i]);.  }.  if( d
9b80: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
9b90: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a  ) goto no_mem;..
9ba0: 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c 49    /* Return SQLI
9bb0: 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d  TE_ROW.  */.  p-
9bc0: 3e 70 63 20 3d 20 70 63 20 2b 20 31 3b 0a 20 20  >pc = pc + 1;.  
9bd0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b  rc = SQLITE_ROW;
9be0: 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74  .  goto vdbe_ret
9bf0: 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  urn;.}../* Opcod
9c00: 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50 32 20  e: Concat P1 P2 
9c10: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
9c20: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b  is: r[P3]=r[P2]+
9c30: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20  r[P1].**.** Add 
9c40: 74 68 65 20 74 65 78 74 20 69 6e 20 72 65 67 69  the text in regi
9c50: 73 74 65 72 20 50 31 20 6f 6e 74 6f 20 74 68 65  ster P1 onto the
9c60: 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74   end of the text
9c70: 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   in.** register 
9c80: 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  P2 and store the
9c90: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
9ca0: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
9cb0: 74 68 65 72 20 74 68 65 20 50 31 20 6f 72 20 50  ther the P1 or P
9cc0: 32 20 74 65 78 74 20 61 72 65 20 4e 55 4c 4c 20  2 text are NULL 
9cd0: 74 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20  then store NULL 
9ce0: 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50  in P3..**.**   P
9cf0: 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a  3 = P2 || P1.**.
9d00: 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
9d10: 20 66 6f 72 20 50 31 20 61 6e 64 20 50 33 20 74   for P1 and P3 t
9d20: 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20 72 65  o be the same re
9d30: 67 69 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65  gister. Sometime
9d40: 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73 20 74  s,.** if P3 is t
9d50: 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72  he same register
9d60: 20 61 73 20 50 32 2c 20 74 68 65 20 69 6d 70 6c   as P2, the impl
9d70: 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 62  ementation is ab
9d80: 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61  le.** to avoid a
9d90: 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61   memcpy()..*/.ca
9da0: 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20  se OP_Concat: { 
9db0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
9dc0: 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20  e as TK_CONCAT, 
9dd0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
9de0: 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a  /.  i64 nByte;..
9df0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
9e00: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20  Op->p1];.  pIn2 
9e10: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
9e20: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
9e30: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
9e40: 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75 74 20  ert( pIn1!=pOut 
9e50: 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
9e60: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
9e70: 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  ags) & MEM_Null 
9e80: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
9e90: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
9ea0: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
9eb0: 20 7d 0a 20 20 69 66 28 20 45 78 70 61 6e 64 42   }.  if( ExpandB
9ec0: 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20 45 78 70  lob(pIn1) || Exp
9ed0: 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20 29 20  andBlob(pIn2) ) 
9ee0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53  goto no_mem;.  S
9ef0: 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65  tringify(pIn1, e
9f00: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53 74 72 69  ncoding);.  Stri
9f10: 6e 67 69 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f  ngify(pIn2, enco
9f20: 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d  ding);.  nByte =
9f30: 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d   pIn1->n + pIn2-
9f40: 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e  >n;.  if( nByte>
9f50: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
9f60: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
9f70: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
9f80: 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  big;.  }.  if( s
9f90: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
9fa0: 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79  w(pOut, (int)nBy
9fb0: 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32  te+2, pOut==pIn2
9fc0: 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  ) ){.    goto no
9fd0: 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53  _mem;.  }.  MemS
9fe0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
9ff0: 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28   MEM_Str);.  if(
a000: 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20   pOut!=pIn2 ){. 
a010: 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e     memcpy(pOut->
a020: 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32  z, pIn2->z, pIn2
a030: 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63  ->n);.  }.  memc
a040: 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32  py(&pOut->z[pIn2
a050: 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70  ->n], pIn1->z, p
a060: 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d  In1->n);.  pOut-
a070: 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b 0a 20 20 70  >z[nByte]=0;.  p
a080: 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20  Out->z[nByte+1] 
a090: 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  = 0;.  pOut->fla
a0a0: 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a  gs |= MEM_Term;.
a0b0: 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74    pOut->n = (int
a0c0: 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e  )nByte;.  pOut->
a0d0: 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
a0e0: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
a0f0: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
a100: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
a110: 64 65 3a 20 41 64 64 20 50 31 20 50 32 20 50 33  de: Add P1 P2 P3
a120: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
a130: 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72  :  r[P3]=r[P1]+r
a140: 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74  [P2].**.** Add t
a150: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
a160: 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 76  ster P1 to the v
a170: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
a180: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
a190: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
a1a0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
a1b0: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
a1c0: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
a1d0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
a1e0: 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70  * Opcode: Multip
a1f0: 6c 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ly P1 P2 P3 * *.
a200: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
a210: 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a  P3]=r[P1]*r[P2].
a220: 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c  **.**.** Multipl
a230: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
a240: 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68  egister P1 by th
a250: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
a260: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
a270: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
a280: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
a290: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
a2a0: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
a2b0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
a2c0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62  /./* Opcode: Sub
a2d0: 74 72 61 63 74 20 50 31 20 50 32 20 50 33 20 2a  tract P1 P2 P3 *
a2e0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
a2f0: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b 50   r[P3]=r[P2]-r[P
a300: 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63  1].**.** Subtrac
a310: 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  t the value in r
a320: 65 67 69 73 74 65 72 20 50 31 20 66 72 6f 6d 20  egister P1 from 
a330: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
a340: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
a350: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
a360: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
a370: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
a380: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
a390: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
a3a0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .*/./* Opcode: D
a3b0: 69 76 69 64 65 20 50 31 20 50 32 20 50 33 20 2a  ivide P1 P2 P3 *
a3c0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
a3d0: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f 72 5b 50   r[P3]=r[P2]/r[P
a3e0: 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20  1].**.** Divide 
a3f0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
a400: 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20  ister P1 by the 
a410: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
a420: 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72  r P2.** and stor
a430: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
a440: 72 65 67 69 73 74 65 72 20 50 33 20 28 50 33 3d  register P3 (P3=
a450: 50 32 2f 50 31 29 2e 20 49 66 20 74 68 65 20 76  P2/P1). If the v
a460: 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72 65 67 69  alue in .** regi
a470: 73 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f 2c  ster P1 is zero,
a480: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
a490: 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20 65 69 74   is NULL. If eit
a4a0: 68 65 72 20 69 6e 70 75 74 20 69 73 20 0a 2a 2a  her input is .**
a4b0: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
a4c0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
a4d0: 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64   Opcode: Remaind
a4e0: 65 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  er P1 P2 P3 * *.
a4f0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
a500: 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50 31 5d 0a  P3]=r[P2]%r[P1].
a510: 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68  **.** Compute th
a520: 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66 74 65  e remainder afte
a530: 72 20 69 6e 74 65 67 65 72 20 72 65 67 69 73 74  r integer regist
a540: 65 72 20 50 32 20 69 73 20 64 69 76 69 64 65 64  er P2 is divided
a550: 20 62 79 20 0a 2a 2a 20 72 65 67 69 73 74 65 72   by .** register
a560: 20 50 31 20 61 6e 64 20 73 74 6f 72 65 20 74 68   P1 and store th
a570: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
a580: 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20 49 66 20  ster P3. .** If 
a590: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
a5a0: 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f  ister P1 is zero
a5b0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
a5c0: 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65  ULL..** If eithe
a5d0: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
a5e0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
a5f0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
a600: 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 20  P_Add:          
a610: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
a620: 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31   as TK_PLUS, in1
a630: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
a640: 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a  ase OP_Subtract:
a650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a660: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55   same as TK_MINU
a670: 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  S, in1, in2, out
a680: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c  3 */.case OP_Mul
a690: 74 69 70 6c 79 3a 20 20 20 20 20 20 20 20 20 20  tiply:          
a6a0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
a6b0: 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32  K_STAR, in1, in2
a6c0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
a6d0: 50 5f 44 69 76 69 64 65 3a 20 20 20 20 20 20 20  P_Divide:       
a6e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
a6f0: 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e   as TK_SLASH, in
a700: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
a710: 63 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65  case OP_Remainde
a720: 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  r: {           /
a730: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d  * same as TK_REM
a740: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
a750: 20 2a 2f 0a 20 20 63 68 61 72 20 62 49 6e 74 69   */.  char bInti
a760: 6e 74 3b 20 20 20 2f 2a 20 53 74 61 72 74 65 64  nt;   /* Started
a770: 20 6f 75 74 20 61 73 20 74 77 6f 20 69 6e 74 65   out as two inte
a780: 67 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a  ger operands */.
a790: 20 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20    int flags;    
a7a0: 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45    /* Combined ME
a7b0: 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20 62  M_* flags from b
a7c0: 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20  oth inputs */.  
a7d0: 69 36 34 20 69 41 3b 20 20 20 20 20 20 20 20 20  i64 iA;         
a7e0: 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
a7f0: 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64   of left operand
a800: 20 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20   */.  i64 iB;   
a810: 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72        /* Integer
a820: 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20   value of right 
a830: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75  operand */.  dou
a840: 62 6c 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20  ble rA;      /* 
a850: 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65  Real value of le
a860: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
a870: 64 6f 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20  double rB;      
a880: 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66  /* Real value of
a890: 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a   right operand *
a8a0: 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  /..  pIn1 = &aMe
a8b0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 70  m[pOp->p1];.  ap
a8c0: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
a8d0: 74 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32  ty(pIn1);.  pIn2
a8e0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
a8f0: 5d 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69  ];.  applyNumeri
a900: 63 41 66 66 69 6e 69 74 79 28 70 49 6e 32 29 3b  cAffinity(pIn2);
a910: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
a920: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67  pOp->p3];.  flag
a930: 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  s = pIn1->flags 
a940: 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20  | pIn2->flags;. 
a950: 20 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45   if( (flags & ME
a960: 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74  M_Null)!=0 ) got
a970: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
a980: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69  ult_is_null;.  i
a990: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
a9a0: 26 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  & pIn2->flags & 
a9b0: 4d 45 4d 5f 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e  MEM_Int)==MEM_In
a9c0: 74 20 29 7b 0a 20 20 20 20 69 41 20 3d 20 70 49  t ){.    iA = pI
a9d0: 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20  n1->u.i;.    iB 
a9e0: 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20  = pIn2->u.i;.   
a9f0: 20 62 49 6e 74 69 6e 74 20 3d 20 31 3b 0a 20 20   bIntint = 1;.  
aa00: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
aa10: 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63  pcode ){.      c
aa20: 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20  ase OP_Add:     
aa30: 20 20 69 66 28 20 73 71 6c 69 74 65 33 41 64 64    if( sqlite3Add
aa40: 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20  Int64(&iB,iA) ) 
aa50: 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62  goto fp_math;  b
aa60: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
aa70: 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 69   OP_Subtract:  i
aa80: 66 28 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74  f( sqlite3SubInt
aa90: 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74  64(&iB,iA) ) got
aaa0: 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61  o fp_math;  brea
aab0: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
aac0: 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66 28 20  _Multiply:  if( 
aad0: 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28  sqlite3MulInt64(
aae0: 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66  &iB,iA) ) goto f
aaf0: 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a  p_math;  break;.
ab00: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69        case OP_Di
ab10: 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20  vide: {.        
ab20: 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f  if( iA==0 ) goto
ab30: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
ab40: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
ab50: 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 26      if( iA==-1 &
ab60: 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49  & iB==SMALLEST_I
ab70: 4e 54 36 34 20 29 20 67 6f 74 6f 20 66 70 5f 6d  NT64 ) goto fp_m
ab80: 61 74 68 3b 0a 20 20 20 20 20 20 20 20 69 42 20  ath;.        iB 
ab90: 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62  /= iA;.        b
aba0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
abb0: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20      default: {. 
abc0: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30         if( iA==0
abd0: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
abe0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
abf0: 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  l;.        if( i
ac00: 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a  A==-1 ) iA = 1;.
ac10: 20 20 20 20 20 20 20 20 69 42 20 25 3d 20 69 41          iB %= iA
ac20: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
ac30: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
ac40: 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69     pOut->u.i = i
ac50: 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  B;.    MemSetTyp
ac60: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
ac70: 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Int);.  }else{. 
ac80: 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 30 3b 0a     bIntint = 0;.
ac90: 66 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72 41 20  fp_math:.    rA 
aca0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61  = sqlite3VdbeRea
acb0: 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20  lValue(pIn1);.  
acc0: 20 20 72 42 20 3d 20 73 71 6c 69 74 65 33 56 64    rB = sqlite3Vd
acd0: 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 32  beRealValue(pIn2
ace0: 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70  );.    switch( p
acf0: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20  Op->opcode ){.  
ad00: 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a      case OP_Add:
ad10: 20 20 20 20 20 20 20 20 20 72 42 20 2b 3d 20 72           rB += r
ad20: 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  A;       break;.
ad30: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75        case OP_Su
ad40: 62 74 72 61 63 74 3a 20 20 20 20 72 42 20 2d 3d  btract:    rB -=
ad50: 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b   rA;       break
ad60: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
ad70: 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 72 42 20  Multiply:    rB 
ad80: 2a 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  *= rA;       bre
ad90: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
ada0: 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20  P_Divide: {.    
adb0: 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30      /* (double)0
adc0: 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51 4c 49   In case of SQLI
add0: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
ade0: 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20  _POINT... */.   
adf0: 20 20 20 20 20 69 66 28 20 72 41 3d 3d 28 64 6f       if( rA==(do
ae00: 75 62 6c 65 29 30 20 29 20 67 6f 74 6f 20 61 72  uble)0 ) goto ar
ae10: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
ae20: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
ae30: 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20   rB /= rA;.     
ae40: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
ae50: 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a  }.      default:
ae60: 20 7b 0a 20 20 20 20 20 20 20 20 69 41 20 3d 20   {.        iA = 
ae70: 28 69 36 34 29 72 41 3b 0a 20 20 20 20 20 20 20  (i64)rA;.       
ae80: 20 69 42 20 3d 20 28 69 36 34 29 72 42 3b 0a 20   iB = (i64)rB;. 
ae90: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30         if( iA==0
aea0: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
aeb0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
aec0: 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  l;.        if( i
aed0: 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a  A==-1 ) iA = 1;.
aee0: 20 20 20 20 20 20 20 20 72 42 20 3d 20 28 64 6f          rB = (do
aef0: 75 62 6c 65 29 28 69 42 20 25 20 69 41 29 3b 0a  uble)(iB % iA);.
af00: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
af10: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 69 66       }.    }.#if
af20: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
af30: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
af40: 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72     pOut->u.i = r
af50: 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  B;.    MemSetTyp
af60: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
af70: 49 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20  Int);.#else.    
af80: 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  if( sqlite3IsNaN
af90: 28 72 42 29 20 29 7b 0a 20 20 20 20 20 20 67 6f  (rB) ){.      go
afa0: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
afb0: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
afc0: 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 72 20    }.    pOut->r 
afd0: 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74  = rB;.    MemSet
afe0: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
aff0: 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69 66  EM_Real);.    if
b000: 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  ( (flags & MEM_R
b010: 65 61 6c 29 3d 3d 30 20 26 26 20 21 62 49 6e 74  eal)==0 && !bInt
b020: 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  int ){.      sql
b030: 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41  ite3VdbeIntegerA
b040: 66 66 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a 20  ffinity(pOut);. 
b050: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a     }.#endif.  }.
b060: 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d    break;..arithm
b070: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
b080: 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64  ull:.  sqlite3Vd
b090: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
b0a0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
b0b0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53  /* Opcode: CollS
b0c0: 65 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a  eq P1 * * P4.**.
b0d0: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
b0e0: 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20  er to a CollSeq 
b0f0: 73 74 72 75 63 74 2e 20 49 66 20 74 68 65 20 6e  struct. If the n
b100: 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75 73  ext call to a us
b110: 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f  er function.** o
b120: 72 20 61 67 67 72 65 67 61 74 65 20 63 61 6c 6c  r aggregate call
b130: 73 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63  s sqlite3GetFunc
b140: 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73 20  CollSeq(), this 
b150: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
b160: 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65  ce will.** be re
b170: 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73 20  turned. This is 
b180: 75 73 65 64 20 62 79 20 74 68 65 20 62 75 69 6c  used by the buil
b190: 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28  t-in min(), max(
b1a0: 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a  ) and nullif().*
b1b0: 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  * functions..**.
b1c0: 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 74 20  ** If P1 is not 
b1d0: 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 73  zero, then it is
b1e0: 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
b1f0: 20 61 20 73 75 62 73 65 71 75 65 6e 74 20 6d 69   a subsequent mi
b200: 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28 29 20  n() or.** max() 
b210: 61 67 67 72 65 67 61 74 65 20 77 69 6c 6c 20 73  aggregate will s
b220: 65 74 20 74 6f 20 31 20 69 66 20 74 68 65 20 63  et to 1 if the c
b230: 75 72 72 65 6e 74 20 72 6f 77 20 69 73 20 6e 6f  urrent row is no
b240: 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f 72  t the minimum or
b250: 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20 54 68  .** maximum.  Th
b260: 65 20 50 31 20 72 65 67 69 73 74 65 72 20 69 73  e P1 register is
b270: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
b280: 30 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75  0 by this instru
b290: 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ction..**.** The
b2a0: 20 69 6e 74 65 72 66 61 63 65 20 75 73 65 64 20   interface used 
b2b0: 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  by the implement
b2c0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f  ation of the afo
b2d0: 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63  rementioned func
b2e0: 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72  tions.** to retr
b2f0: 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74 69  ieve the collati
b300: 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74 20  on sequence set 
b310: 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  by this opcode i
b320: 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a  s not available.
b330: 2a 2a 20 70 75 62 6c 69 63 6c 79 2c 20 6f 6e 6c  ** publicly, onl
b340: 79 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69  y to user functi
b350: 6f 6e 73 20 64 65 66 69 6e 65 64 20 69 6e 20 66  ons defined in f
b360: 75 6e 63 2e 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f  unc.c..*/.case O
b370: 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61  P_CollSeq: {.  a
b380: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
b390: 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29  pe==P4_COLLSEQ )
b3a0: 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20  ;.  if( pOp->p1 
b3b0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
b3c0: 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
b3d0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30 29  Mem[pOp->p1], 0)
b3e0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
b3f0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e  ../* Opcode: Fun
b400: 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50  ction P1 P2 P3 P
b410: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
b420: 3a 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72 5b 50  : r[P3]=func(r[P
b430: 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76  2@P5]).**.** Inv
b440: 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63 74  oke a user funct
b450: 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69  ion (P4 is a poi
b460: 6e 74 65 72 20 74 6f 20 61 20 46 75 6e 63 74 69  nter to a Functi
b470: 6f 6e 20 73 74 72 75 63 74 75 72 65 20 74 68 61  on structure tha
b480: 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20 74 68 65  t.** defines the
b490: 20 66 75 6e 63 74 69 6f 6e 29 20 77 69 74 68 20   function) with 
b4a0: 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74 61 6b  P5 arguments tak
b4b0: 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  en from register
b4c0: 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75 63 63 65   P2 and.** succe
b4d0: 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65 73 75  ssors.  The resu
b4e0: 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  lt of the functi
b4f0: 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  on is stored in 
b500: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
b510: 52 65 67 69 73 74 65 72 20 50 33 20 6d 75 73 74  Register P3 must
b520: 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20 74   not be one of t
b530: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75  he function inpu
b540: 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ts..**.** P1 is 
b550: 61 20 33 32 2d 62 69 74 20 62 69 74 6d 61 73 6b  a 32-bit bitmask
b560: 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74   indicating whet
b570: 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20  her or not each 
b580: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
b590: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61 73  .** function was
b5a0: 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62   determined to b
b5b0: 65 20 63 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f  e constant at co
b5c0: 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49 66 20 74  mpile time. If t
b5d0: 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75  he first.** argu
b5e0: 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73 74 61 6e  ment was constan
b5f0: 74 20 74 68 65 6e 20 62 69 74 20 30 20 6f 66 20  t then bit 0 of 
b600: 50 31 20 69 73 20 73 65 74 2e 20 54 68 69 73 20  P1 is set. This 
b610: 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  is used to deter
b620: 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20  mine.** whether 
b630: 6d 65 74 61 20 64 61 74 61 20 61 73 73 6f 63 69  meta data associ
b640: 61 74 65 64 20 77 69 74 68 20 61 20 75 73 65 72  ated with a user
b650: 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65   function argume
b660: 6e 74 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  nt using the.** 
b670: 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64  sqlite3_set_auxd
b680: 61 74 61 28 29 20 41 50 49 20 6d 61 79 20 62 65  ata() API may be
b690: 20 73 61 66 65 6c 79 20 72 65 74 61 69 6e 65 64   safely retained
b6a0: 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a   until the next.
b6b0: 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ** invocation of
b6c0: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a   this opcode..**
b6d0: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 41 67  .** See also: Ag
b6e0: 67 53 74 65 70 20 61 6e 64 20 41 67 67 46 69 6e  gStep and AggFin
b6f0: 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 75  al.*/.case OP_Fu
b700: 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20  nction: {.  int 
b710: 69 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 3b 0a  i;.  Mem *pArg;.
b720: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
b730: 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33  t ctx;.  sqlite3
b740: 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a  _value **apVal;.
b750: 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20    int n;..  n = 
b760: 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 70 56 61 6c  pOp->p5;.  apVal
b770: 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61   = p->apArg;.  a
b780: 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20  ssert( apVal || 
b790: 6e 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  n==0 );.  assert
b7a0: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
b7b0: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
b7c0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
b7d0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
b7e0: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p3];.  memAb
b7f0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
b800: 4f 75 74 29 3b 0a 0a 20 20 61 73 73 65 72 74 28  Out);..  assert(
b810: 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70   n==0 || (pOp->p
b820: 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
b830: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
b840: 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61  ursor)+1) );.  a
b850: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70  ssert( pOp->p3<p
b860: 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70  Op->p2 || pOp->p
b870: 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a  3>=pOp->p2+n );.
b880: 20 20 70 41 72 67 20 3d 20 26 61 4d 65 6d 5b 70    pArg = &aMem[p
b890: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72 28 69  Op->p2];.  for(i
b8a0: 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41  =0; i<n; i++, pA
b8b0: 72 67 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  rg++){.    asser
b8c0: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 41  t( memIsValid(pA
b8d0: 72 67 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c  rg) );.    apVal
b8e0: 5b 69 5d 20 3d 20 70 41 72 67 3b 0a 20 20 20 20  [i] = pArg;.    
b8f0: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70  Deephemeralize(p
b900: 41 72 67 29 3b 0a 20 20 20 20 52 45 47 49 53 54  Arg);.    REGIST
b910: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
b920: 2b 69 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a 0a  +i, pArg);.  }..
b930: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
b940: 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45  4type==P4_FUNCDE
b950: 46 20 29 3b 0a 20 20 63 74 78 2e 70 46 75 6e 63  F );.  ctx.pFunc
b960: 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63   = pOp->p4.pFunc
b970: 3b 0a 20 20 63 74 78 2e 69 4f 70 20 3d 20 70 63  ;.  ctx.iOp = pc
b980: 3b 0a 20 20 63 74 78 2e 70 56 64 62 65 20 3d 20  ;.  ctx.pVdbe = 
b990: 70 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74  p;..  /* The out
b9a0: 70 75 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72  put cell may alr
b9b0: 65 61 64 79 20 68 61 76 65 20 61 20 62 75 66 66  eady have a buff
b9c0: 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f  er allocated. Mo
b9d0: 76 65 0a 20 20 2a 2a 20 74 68 65 20 70 6f 69 6e  ve.  ** the poin
b9e0: 74 65 72 20 74 6f 20 63 74 78 2e 73 20 73 6f 20  ter to ctx.s so 
b9f0: 69 6e 20 63 61 73 65 20 74 68 65 20 75 73 65 72  in case the user
ba00: 2d 66 75 6e 63 74 69 6f 6e 20 63 61 6e 20 75 73  -function can us
ba10: 65 0a 20 20 2a 2a 20 74 68 65 20 61 6c 72 65 61  e.  ** the alrea
ba20: 64 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66  dy allocated buf
ba30: 66 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61  fer instead of a
ba40: 6c 6c 6f 63 61 74 69 6e 67 20 61 20 6e 65 77 20  llocating a new 
ba50: 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 6d 65 6d 63  one..  */.  memc
ba60: 70 79 28 26 63 74 78 2e 73 2c 20 70 4f 75 74 2c  py(&ctx.s, pOut,
ba70: 20 73 69 7a 65 6f 66 28 4d 65 6d 29 29 3b 0a 20   sizeof(Mem));. 
ba80: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
ba90: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 70 4f 75 74 2d  EM_Null;.  pOut-
baa0: 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 70 4f 75  >xDel = 0;.  pOu
bab0: 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  t->zMalloc = 0;.
bac0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
bad0: 28 26 63 74 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c  (&ctx.s, MEM_Nul
bae0: 6c 29 3b 0a 0a 20 20 63 74 78 2e 66 45 72 72 6f  l);..  ctx.fErro
baf0: 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20 20 69 66  rOrAux = 0;.  if
bb00: 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e 66 75 6e  ( ctx.pFunc->fun
bb10: 63 46 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  cFlags & SQLITE_
bb20: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b  FUNC_NEEDCOLL ){
bb30: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
bb40: 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65  >aOp );.    asse
bb50: 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79  rt( pOp[-1].p4ty
bb60: 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29  pe==P4_COLLSEQ )
bb70: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
bb80: 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  p[-1].opcode==OP
bb90: 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20  _CollSeq );.    
bba0: 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b  ctx.pColl = pOp[
bbb0: 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20  -1].p4.pColl;.  
bbc0: 7d 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  }.  db->lastRowi
bbd0: 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20  d = lastRowid;. 
bbe0: 20 28 2a 63 74 78 2e 70 46 75 6e 63 2d 3e 78 46   (*ctx.pFunc->xF
bbf0: 75 6e 63 29 28 26 63 74 78 2c 20 6e 2c 20 61 70  unc)(&ctx, n, ap
bc00: 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d  Val); /* IMP: R-
bc10: 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20  24505-23230 */. 
bc20: 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d   lastRowid = db-
bc30: 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 0a 20 20 69  >lastRowid;..  i
bc40: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
bc50: 6c 65 64 20 29 7b 0a 20 20 20 20 2f 2a 20 45 76  led ){.    /* Ev
bc60: 65 6e 20 74 68 6f 75 67 68 20 61 20 6d 61 6c 6c  en though a mall
bc70: 6f 63 28 29 20 68 61 73 20 66 61 69 6c 65 64 2c  oc() has failed,
bc80: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
bc90: 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20 20 20 2a  ion of the.    *
bca0: 2a 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  * user function 
bcb0: 6d 61 79 20 68 61 76 65 20 63 61 6c 6c 65 64 20  may have called 
bcc0: 61 6e 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  an sqlite3_resul
bcd0: 74 5f 58 58 58 28 29 20 66 75 6e 63 74 69 6f 6e  t_XXX() function
bce0: 0a 20 20 20 20 2a 2a 20 74 6f 20 72 65 74 75 72  .    ** to retur
bcf0: 6e 20 61 20 76 61 6c 75 65 2e 20 54 68 65 20 66  n a value. The f
bd00: 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 72 65  ollowing call re
bd10: 6c 65 61 73 65 73 20 61 6e 79 20 72 65 73 6f 75  leases any resou
bd20: 72 63 65 73 0a 20 20 20 20 2a 2a 20 61 73 73 6f  rces.    ** asso
bd30: 63 69 61 74 65 64 20 77 69 74 68 20 73 75 63 68  ciated with such
bd40: 20 61 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f   a value..    */
bd50: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
bd60: 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e  MemRelease(&ctx.
bd70: 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  s);.    goto no_
bd80: 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  mem;.  }..  /* I
bd90: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72  f the function r
bda0: 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72  eturned an error
bdb0: 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70  , throw an excep
bdc0: 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74  tion */.  if( ct
bdd0: 78 2e 66 45 72 72 6f 72 4f 72 41 75 78 20 29 7b  x.fErrorOrAux ){
bde0: 0a 20 20 20 20 69 66 28 20 63 74 78 2e 69 73 45  .    if( ctx.isE
bdf0: 72 72 6f 72 20 29 7b 0a 20 20 20 20 20 20 73 71  rror ){.      sq
be00: 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
be10: 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
be20: 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61  "%s", sqlite3_va
be30: 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29  lue_text(&ctx.s)
be40: 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 63 74  );.      rc = ct
be50: 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d  x.isError;.    }
be60: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
be70: 44 65 6c 65 74 65 41 75 78 44 61 74 61 28 70 2c  DeleteAuxData(p,
be80: 20 70 63 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20   pc, pOp->p1);. 
be90: 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68   }..  /* Copy th
bea0: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
beb0: 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65  function into re
bec0: 67 69 73 74 65 72 20 50 33 20 2a 2f 0a 20 20 73  gister P3 */.  s
bed0: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
bee0: 45 6e 63 6f 64 69 6e 67 28 26 63 74 78 2e 73 2c  Encoding(&ctx.s,
bef0: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 61 73   encoding);.  as
bf00: 73 65 72 74 28 20 70 4f 75 74 2d 3e 66 6c 61 67  sert( pOut->flag
bf10: 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20  s==MEM_Null );. 
bf20: 20 6d 65 6d 63 70 79 28 70 4f 75 74 2c 20 26 63   memcpy(pOut, &c
bf30: 74 78 2e 73 2c 20 73 69 7a 65 6f 66 28 4d 65 6d  tx.s, sizeof(Mem
bf40: 29 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  ));.  if( sqlite
bf50: 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
bf60: 4f 75 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  Out) ){.    goto
bf70: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 23   too_big;.  }..#
bf80: 69 66 20 30 0a 20 20 2f 2a 20 54 68 65 20 61 70  if 0.  /* The ap
bf90: 70 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69  p-defined functi
bfa0: 6f 6e 20 68 61 73 20 64 6f 6e 65 20 73 6f 6d 65  on has done some
bfb0: 74 68 69 6e 67 20 74 68 61 74 20 61 73 20 63 61  thing that as ca
bfc0: 75 73 65 64 20 74 68 69 73 0a 20 20 2a 2a 20 73  used this.  ** s
bfd0: 74 61 74 65 6d 65 6e 74 20 74 6f 20 65 78 70 69  tatement to expi
bfe0: 72 65 2e 20 20 28 50 65 72 68 61 70 73 20 74 68  re.  (Perhaps th
bff0: 65 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 65  e function calle
c000: 64 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29  d sqlite3_exec()
c010: 0a 20 20 2a 2a 20 77 69 74 68 20 61 20 43 52 45  .  ** with a CRE
c020: 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
c030: 65 6e 74 2e 29 0a 20 20 2a 2f 0a 20 20 69 66 28  ent.).  */.  if(
c040: 20 70 2d 3e 65 78 70 69 72 65 64 20 29 20 72 63   p->expired ) rc
c050: 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b   = SQLITE_ABORT;
c060: 0a 23 65 6e 64 69 66 0a 0a 20 20 52 45 47 49 53  .#endif..  REGIS
c070: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
c080: 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  3, pOut);.  UPDA
c090: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
c0a0: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
c0b0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
c0c0: 74 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20  tAnd P1 P2 P3 * 
c0d0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
c0e0: 72 5b 50 33 5d 3d 72 5b 50 31 5d 26 72 5b 50 32  r[P3]=r[P1]&r[P2
c0f0: 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ].**.** Take the
c100: 20 62 69 74 2d 77 69 73 65 20 41 4e 44 20 6f 66   bit-wise AND of
c110: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
c120: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
c130: 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
c140: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
c150: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
c160: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
c170: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
c180: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
c190: 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72 20 50 31  Opcode: BitOr P1
c1a0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
c1b0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
c1c0: 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]|r[P2].**.**
c1d0: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
c1e0: 73 65 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c  se OR of the val
c1f0: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
c200: 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
c210: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
c220: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
c230: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
c240: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
c250: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
c260: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
c270: 53 68 69 66 74 4c 65 66 74 20 50 31 20 50 32 20  ShiftLeft P1 P2 
c280: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
c290: 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  is:  r[P3]=r[P2]
c2a0: 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68  <<r[P1].**.** Sh
c2b0: 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20  ift the integer 
c2c0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
c2d0: 72 20 50 32 20 74 6f 20 74 68 65 20 6c 65 66 74  r P2 to the left
c2e0: 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65   by the.** numbe
c2f0: 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66  r of bits specif
c300: 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67  ied by the integ
c310: 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
c320: 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  1..** Store the 
c330: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
c340: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
c350: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
c360: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
c370: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
c380: 6f 64 65 3a 20 53 68 69 66 74 52 69 67 68 74 20  ode: ShiftRight 
c390: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
c3a0: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
c3b0: 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a  =r[P2]>>r[P1].**
c3c0: 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e  .** Shift the in
c3d0: 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72  teger value in r
c3e0: 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68  egister P2 to th
c3f0: 65 20 72 69 67 68 74 20 62 79 20 74 68 65 0a 2a  e right by the.*
c400: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  * number of bits
c410: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
c420: 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67  e integer in reg
c430: 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f  ister P1..** Sto
c440: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
c450: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
c460: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
c470: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
c480: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
c490: 0a 63 61 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a  .case OP_BitAnd:
c4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4b0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42   /* same as TK_B
c4c0: 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c  ITAND, in1, in2,
c4d0: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
c4e0: 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20 20 20  _BitOr:         
c4f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
c500: 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69 6e   as TK_BITOR, in
c510: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
c520: 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65 66  case OP_ShiftLef
c530: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
c540: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 53  /* same as TK_LS
c550: 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  HIFT, in1, in2, 
c560: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
c570: 53 68 69 66 74 52 69 67 68 74 3a 20 7b 20 20 20  ShiftRight: {   
c580: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
c590: 61 73 20 54 4b 5f 52 53 48 49 46 54 2c 20 69 6e  as TK_RSHIFT, in
c5a0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
c5b0: 20 20 69 36 34 20 69 41 3b 0a 20 20 75 36 34 20    i64 iA;.  u64 
c5c0: 75 41 3b 0a 20 20 69 36 34 20 69 42 3b 0a 20 20  uA;.  i64 iB;.  
c5d0: 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e 31 20 3d  u8 op;..  pIn1 =
c5e0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
c5f0: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
c600: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74  pOp->p2];.  pOut
c610: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
c620: 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
c630: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
c640: 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  ags) & MEM_Null 
c650: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
c660: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
c670: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
c680: 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c 69 74 65   }.  iA = sqlite
c690: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
c6a0: 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73 71 6c 69  n2);.  iB = sqli
c6b0: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
c6c0: 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d 20 70 4f  pIn1);.  op = pO
c6d0: 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 69 66 28  p->opcode;.  if(
c6e0: 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e 64 20 29   op==OP_BitAnd )
c6f0: 7b 0a 20 20 20 20 69 41 20 26 3d 20 69 42 3b 0a  {.    iA &= iB;.
c700: 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70 3d 3d    }else if( op==
c710: 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20 20 20 20  OP_BitOr ){.    
c720: 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c 73  iA |= iB;.  }els
c730: 65 20 69 66 28 20 69 42 21 3d 30 20 29 7b 0a 20  e if( iB!=0 ){. 
c740: 20 20 20 61 73 73 65 72 74 28 20 6f 70 3d 3d 4f     assert( op==O
c750: 50 5f 53 68 69 66 74 52 69 67 68 74 20 7c 7c 20  P_ShiftRight || 
c760: 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  op==OP_ShiftLeft
c770: 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 73   );..    /* If s
c780: 68 69 66 74 69 6e 67 20 62 79 20 61 20 6e 65 67  hifting by a neg
c790: 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c 20 73 68  ative amount, sh
c7a0: 69 66 74 20 69 6e 20 74 68 65 20 6f 74 68 65 72  ift in the other
c7b0: 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f 0a 20 20   direction */.  
c7c0: 20 20 69 66 28 20 69 42 3c 30 20 29 7b 0a 20 20    if( iB<0 ){.  
c7d0: 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
c7e0: 68 69 66 74 52 69 67 68 74 3d 3d 4f 50 5f 53 68  hiftRight==OP_Sh
c7f0: 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a 20 20 20  iftLeft+1 );.   
c800: 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f 53 68 69     op = 2*OP_Shi
c810: 66 74 4c 65 66 74 20 2b 20 31 20 2d 20 6f 70 3b  ftLeft + 1 - op;
c820: 0a 20 20 20 20 20 20 69 42 20 3d 20 69 42 3e 28  .      iB = iB>(
c830: 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20 36 34 3b  -64) ? -iB : 64;
c840: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
c850: 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20 20 20 20  iB>=64 ){.      
c860: 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c 7c 20 6f  iA = (iA>=0 || o
c870: 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 29  p==OP_ShiftLeft)
c880: 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20 20 20 7d   ? 0 : -1;.    }
c890: 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d 63  else{.      memc
c8a0: 70 79 28 26 75 41 2c 20 26 69 41 2c 20 73 69 7a  py(&uA, &iA, siz
c8b0: 65 6f 66 28 75 41 29 29 3b 0a 20 20 20 20 20 20  eof(uA));.      
c8c0: 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74  if( op==OP_Shift
c8d0: 4c 65 66 74 20 29 7b 0a 20 20 20 20 20 20 20 20  Left ){.        
c8e0: 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20 20 20 20  uA <<= iB;.     
c8f0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
c900: 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20 20 20 20  uA >>= iB;.     
c910: 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78 74 65 6e     /* Sign-exten
c920: 64 20 6f 6e 20 61 20 72 69 67 68 74 20 73 68 69  d on a right shi
c930: 66 74 20 6f 66 20 61 20 6e 65 67 61 74 69 76 65  ft of a negative
c940: 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20   number */.     
c950: 20 20 20 69 66 28 20 69 41 3c 30 20 29 20 75 41     if( iA<0 ) uA
c960: 20 7c 3d 20 28 28 28 28 75 36 34 29 30 78 66 66   |= ((((u64)0xff
c970: 66 66 66 66 66 66 29 3c 3c 33 32 29 7c 30 78 66  ffffff)<<32)|0xf
c980: 66 66 66 66 66 66 66 29 20 3c 3c 20 28 36 34 2d  fffffff) << (64-
c990: 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  iB);.      }.   
c9a0: 20 20 20 6d 65 6d 63 70 79 28 26 69 41 2c 20 26     memcpy(&iA, &
c9b0: 75 41 2c 20 73 69 7a 65 6f 66 28 69 41 29 29 3b  uA, sizeof(iA));
c9c0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75  .    }.  }.  pOu
c9d0: 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a 20 20 4d  t->u.i = iA;.  M
c9e0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
c9f0: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
ca00: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
ca10: 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50 31 20  ode: AddImm  P1 
ca20: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
ca30: 70 73 69 73 3a 20 20 72 5b 50 31 5d 3d 72 5b 50  psis:  r[P1]=r[P
ca40: 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41 64 64  1]+P2.** .** Add
ca50: 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32   the constant P2
ca60: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
ca70: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
ca80: 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   The result is a
ca90: 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72  lways an integer
caa0: 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65  ..**.** To force
cab0: 20 61 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f   any register to
cac0: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20   be an integer, 
cad0: 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63  just add 0..*/.c
cae0: 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b  ase OP_AddImm: {
caf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
cb00: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
cb10: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
cb20: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
cb30: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71  e(p, pIn1);.  sq
cb40: 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
cb50: 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  gerify(pIn1);.  
cb60: 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70  pIn1->u.i += pOp
cb70: 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ->p2;.  break;.}
cb80: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73  ../* Opcode: Mus
cb90: 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a  tBeInt P1 P2 * *
cba0: 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20   *.** .** Force 
cbb0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
cbc0: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
cbd0: 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74  n integer.  If t
cbe0: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
cbf0: 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65  1 is not an inte
cc00: 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62  ger and cannot b
cc10: 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
cc20: 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77   an integer.** w
cc30: 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73  ithout data loss
cc40: 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
cc50: 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f  diately to P2, o
cc60: 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61  r if P2==0.** ra
cc70: 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49  ise an SQLITE_MI
cc80: 53 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e  SMATCH exception
cc90: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73  ..*/.case OP_Mus
cca0: 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20  tBeInt: {       
ccb0: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
ccc0: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
ccd0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
cce0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
ccf0: 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
cd00: 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  {.    applyAffin
cd10: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
cd20: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e  _AFF_NUMERIC, en
cd30: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 56 64 62  coding);.    Vdb
cd40: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 28 70 49  eBranchTaken((pI
cd50: 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
cd60: 74 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69  t)==0, 2);.    i
cd70: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
cd80: 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
cd90: 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
cda0: 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  p2==0 ){.       
cdb0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53   rc = SQLITE_MIS
cdc0: 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 20 20 67  MATCH;.        g
cdd0: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
cde0: 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 65  _error;.      }e
cdf0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 63 20  lse{.        pc 
ce00: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
ce10: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
ce20: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
ce30: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
ce40: 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pIn1, MEM_Int);
ce50: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
ce60: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
ce70: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
ce80: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41  /* Opcode: RealA
ce90: 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a  ffinity P1 * * *
cea0: 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69   *.**.** If regi
ceb0: 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e  ster P1 holds an
cec0: 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74   integer convert
ced0: 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61   it to a real va
cee0: 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  lue..**.** This 
cef0: 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 77  opcode is used w
cf00: 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69  hen extracting i
cf10: 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
cf20: 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a  a column that.**
cf30: 20 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69   has REAL affini
cf40: 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e  ty.  Such column
cf50: 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c   values may stil
cf60: 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a  l be stored as.*
cf70: 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20  * integers, for 
cf80: 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 63 79  space efficiency
cf90: 2c 20 62 75 74 20 61 66 74 65 72 20 65 78 74 72  , but after extr
cfa0: 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74  action we want t
cfb0: 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f  hem.** to have o
cfc0: 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65  nly a real value
cfd0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
cfe0: 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20  lAffinity: {    
cff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d000: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
d010: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
d020: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
d030: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
d040: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
d050: 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b  emRealify(pIn1);
d060: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
d070: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
d080: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
d090: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 54 65  ./* Opcode: ToTe
d0a0: 78 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  xt P1 * * * *.**
d0b0: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
d0c0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
d0d0: 50 31 20 74 6f 20 62 65 20 74 65 78 74 2e 0a 2a  P1 to be text..*
d0e0: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
d0f0: 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65  s numeric, conve
d100: 72 74 20 69 74 20 74 6f 20 61 20 73 74 72 69 6e  rt it to a strin
d110: 67 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65  g using the.** e
d120: 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 73 70 72  quivalent of spr
d130: 69 6e 74 66 28 29 2e 20 20 42 6c 6f 62 20 76 61  intf().  Blob va
d140: 6c 75 65 73 20 61 72 65 20 75 6e 63 68 61 6e 67  lues are unchang
d150: 65 64 20 61 6e 64 0a 2a 2a 20 61 72 65 20 61 66  ed and.** are af
d160: 74 65 72 77 61 72 64 73 20 73 69 6d 70 6c 79 20  terwards simply 
d170: 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 74  interpreted as t
d180: 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  ext..**.** A NUL
d190: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
d1a0: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
d1b0: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
d1c0: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
d1d0: 65 20 4f 50 5f 54 6f 54 65 78 74 3a 20 7b 20 20  e OP_ToText: {  
d1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1f0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f  /* same as TK_TO
d200: 5f 54 45 58 54 2c 20 69 6e 31 20 2a 2f 0a 20 20  _TEXT, in1 */.  
d210: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
d220: 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p1];.  memAbou
d230: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
d240: 31 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1);.  if( pIn1->
d250: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
d260: 20 29 20 62 72 65 61 6b 3b 0a 20 20 61 73 73 65   ) break;.  asse
d270: 72 74 28 20 4d 45 4d 5f 53 74 72 3d 3d 28 4d 45  rt( MEM_Str==(ME
d280: 4d 5f 42 6c 6f 62 3e 3e 33 29 20 29 3b 0a 20 20  M_Blob>>3) );.  
d290: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 3d 20 28  pIn1->flags |= (
d2a0: 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
d2b0: 42 6c 6f 62 29 3e 3e 33 3b 0a 20 20 61 70 70 6c  Blob)>>3;.  appl
d2c0: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
d2d0: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c  SQLITE_AFF_TEXT,
d2e0: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 72 63   encoding);.  rc
d2f0: 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49   = ExpandBlob(pI
d300: 6e 31 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  n1);.  assert( p
d310: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
d320: 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c  _Str || db->mall
d330: 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 70 49  ocFailed );.  pI
d340: 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d  n1->flags &= ~(M
d350: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c  EM_Int|MEM_Real|
d360: 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 5a 65 72  MEM_Blob|MEM_Zer
d370: 6f 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  o);.  UPDATE_MAX
d380: 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b  _BLOBSIZE(pIn1);
d390: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
d3a0: 4f 70 63 6f 64 65 3a 20 54 6f 42 6c 6f 62 20 50  Opcode: ToBlob P
d3b0: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
d3c0: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
d3d0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
d3e0: 6f 20 62 65 20 61 20 42 4c 4f 42 2e 0a 2a 2a 20  o be a BLOB..** 
d3f0: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
d400: 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72 74  numeric, convert
d410: 20 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20   it to a string 
d420: 66 69 72 73 74 2e 0a 2a 2a 20 53 74 72 69 6e 67  first..** String
d430: 73 20 61 72 65 20 73 69 6d 70 6c 79 20 72 65 69  s are simply rei
d440: 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 62 6c  nterpreted as bl
d450: 6f 62 73 20 77 69 74 68 20 6e 6f 20 63 68 61 6e  obs with no chan
d460: 67 65 0a 2a 2a 20 74 6f 20 74 68 65 20 75 6e 64  ge.** to the und
d470: 65 72 6c 79 69 6e 67 20 64 61 74 61 2e 0a 2a 2a  erlying data..**
d480: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
d490: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
d4a0: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
d4b0: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
d4c0: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f  L..*/.case OP_To
d4d0: 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20  Blob: {         
d4e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
d4f0: 20 61 73 20 54 4b 5f 54 4f 5f 42 4c 4f 42 2c 20   as TK_TO_BLOB, 
d500: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
d510: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
d520: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
d530: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62  s & MEM_Null ) b
d540: 72 65 61 6b 3b 0a 20 20 69 66 28 20 28 70 49 6e  reak;.  if( (pIn
d550: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  1->flags & MEM_B
d560: 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61  lob)==0 ){.    a
d570: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
d580: 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  1, SQLITE_AFF_TE
d590: 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  XT, encoding);. 
d5a0: 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d     assert( pIn1-
d5b0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72  >flags & MEM_Str
d5c0: 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61   || db->mallocFa
d5d0: 69 6c 65 64 20 29 3b 0a 20 20 20 20 4d 65 6d 53  iled );.    MemS
d5e0: 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c  etTypeFlag(pIn1,
d5f0: 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 65   MEM_Blob);.  }e
d600: 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 66  lse{.    pIn1->f
d610: 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 54 79  lags &= ~(MEM_Ty
d620: 70 65 4d 61 73 6b 26 7e 4d 45 4d 5f 42 6c 6f 62  peMask&~MEM_Blob
d630: 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f  );.  }.  UPDATE_
d640: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e  MAX_BLOBSIZE(pIn
d650: 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  1);.  break;.}..
d660: 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 4e 75 6d  /* Opcode: ToNum
d670: 65 72 69 63 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  eric P1 * * * *.
d680: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
d690: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
d6a0: 72 20 50 31 20 74 6f 20 62 65 20 6e 75 6d 65 72  r P1 to be numer
d6b0: 69 63 20 28 65 69 74 68 65 72 20 61 6e 0a 2a 2a  ic (either an.**
d6c0: 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20 66 6c   integer or a fl
d6d0: 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 6e 75 6d  oating-point num
d6e0: 62 65 72 2e 29 0a 2a 2a 20 49 66 20 74 68 65 20  ber.).** If the 
d6f0: 76 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72  value is text or
d700: 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f   blob, try to co
d710: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20 75  nvert it to an u
d720: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69  sing the.** equi
d730: 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29  valent of atoi()
d740: 20 6f 72 20 61 74 6f 66 28 29 20 61 6e 64 20 73   or atof() and s
d750: 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73 75 63  tore 0 if no suc
d760: 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 0a 2a 2a  h conversion .**
d770: 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a   is possible..**
d780: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
d790: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
d7a0: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
d7b0: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
d7c0: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f  L..*/.case OP_To
d7d0: 4e 75 6d 65 72 69 63 3a 20 7b 20 20 20 20 20 20  Numeric: {      
d7e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
d7f0: 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 4e 55 4d  ame as TK_TO_NUM
d800: 45 52 49 43 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  ERIC, in1 */.  p
d810: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
d820: 3e 70 31 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p1];.  sqlite3V
d830: 64 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79 28 70  dbeMemNumerify(p
d840: 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  In1);.  break;.}
d850: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
d860: 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a  E_OMIT_CAST */..
d870: 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 49 6e 74  /* Opcode: ToInt
d880: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
d890: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
d8a0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
d8b0: 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
d8c0: 72 2e 20 20 49 66 0a 2a 2a 20 54 68 65 20 76 61  r.  If.** The va
d8d0: 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79  lue is currently
d8e0: 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20   a real number, 
d8f0: 64 72 6f 70 20 69 74 73 20 66 72 61 63 74 69 6f  drop its fractio
d900: 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a 20 49 66 20  nal part..** If 
d910: 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78  the value is tex
d920: 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74  t or blob, try t
d930: 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  o convert it to 
d940: 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67  an integer using
d950: 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65   the.** equivale
d960: 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64  nt of atoi() and
d970: 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73   store 0 if no s
d980: 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  uch conversion i
d990: 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a  s possible..**.*
d9a0: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
d9b0: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
d9c0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
d9d0: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
d9e0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 49 6e  .*/.case OP_ToIn
d9f0: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
da00: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
da10: 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20 69 6e 31 20   TK_TO_INT, in1 
da20: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
da30: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
da40: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
da50: 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
da60: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
da70: 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
da80: 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
da90: 3b 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  ;.}..#if !define
daa0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  d(SQLITE_OMIT_CA
dab0: 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  ST) && !defined(
dac0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
dad0: 54 49 4e 47 5f 50 4f 49 4e 54 29 0a 2f 2a 20 4f  TING_POINT)./* O
dae0: 70 63 6f 64 65 3a 20 54 6f 52 65 61 6c 20 50 31  pcode: ToReal P1
daf0: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46   * * * *.**.** F
db00: 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  orce the value i
db10: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
db20: 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67 20 70   be a floating p
db30: 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20  oint number..** 
db40: 49 66 20 54 68 65 20 76 61 6c 75 65 20 69 73 20  If The value is 
db50: 63 75 72 72 65 6e 74 6c 79 20 61 6e 20 69 6e 74  currently an int
db60: 65 67 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74  eger, convert it
db70: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
db80: 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f  e is text or blo
db90: 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72  b, try to conver
dba0: 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67  t it to an integ
dbb0: 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  er using the.** 
dbc0: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74  equivalent of at
dbd0: 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30  oi() and store 0
dbe0: 2e 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f  .0 if no such co
dbf0: 6e 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73  nversion is poss
dc00: 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  ible..**.** A NU
dc10: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
dc20: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
dc30: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
dc40: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
dc50: 73 65 20 4f 50 5f 54 6f 52 65 61 6c 3a 20 7b 20  se OP_ToReal: { 
dc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc70: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
dc80: 4f 5f 52 45 41 4c 2c 20 69 6e 31 20 2a 2f 0a 20  O_REAL, in1 */. 
dc90: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
dca0: 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p1];.  memAbo
dcb0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
dcc0: 6e 31 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  n1);.  if( (pIn1
dcd0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
dce0: 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  ll)==0 ){.    sq
dcf0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c  lite3VdbeMemReal
dd00: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  ify(pIn1);.  }. 
dd10: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
dd20: 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c   /* !defined(SQL
dd30: 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 29 20 26  ITE_OMIT_CAST) &
dd40: 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
dd50: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
dd60: 50 4f 49 4e 54 29 20 2a 2f 0a 0a 2f 2a 20 4f 70  POINT) */../* Op
dd70: 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50  code: Lt P1 P2 P
dd80: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
dd90: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c 72 5b  sis: if r[P1]<r[
dda0: 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3] goto P2.**.*
ddb0: 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61  * Compare the va
ddc0: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
ddd0: 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20   P1 and P3.  If 
dde0: 72 65 67 28 50 33 29 3c 72 65 67 28 50 31 29 20  reg(P3)<reg(P1) 
ddf0: 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20  then.** jump to 
de00: 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a 2a 2a  address P2.  .**
de10: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
de20: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74  E_JUMPIFNULL bit
de30: 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e   of P5 is set an
de40: 64 20 65 69 74 68 65 72 20 72 65 67 28 50 31 29  d either reg(P1)
de50: 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69   or.** reg(P3) i
de60: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
de70: 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20 74   the jump.  If t
de80: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
de90: 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20  NULL .** bit is 
dea0: 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c 20  clear then fall 
deb0: 74 68 72 6f 75 67 68 20 69 66 20 65 69 74 68 65  through if eithe
dec0: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
ded0: 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  L..**.** The SQL
dee0: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72  ITE_AFF_MASK por
def0: 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20  tion of P5 must 
df00: 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63  be an affinity c
df10: 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51  haracter -.** SQ
df20: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53  LITE_AFF_TEXT, S
df30: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
df40: 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  R, and so forth.
df50: 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   An attempt is m
df60: 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63  ade .** to coerc
df70: 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63  e both inputs ac
df80: 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20  cording to this 
df90: 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20  affinity before 
dfa0: 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  the.** compariso
dfb0: 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68  n is made. If th
dfc0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
dfd0: 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20  K is 0x00, then 
dfe0: 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e  numeric.** affin
dff0: 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74  ity is used. Not
e000: 65 20 74 68 61 74 20 74 68 65 20 61 66 66 69 6e  e that the affin
e010: 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  ity conversions 
e020: 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61  are stored.** ba
e030: 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75  ck into the inpu
e040: 74 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  t registers P1 a
e050: 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20  nd P3.  So this 
e060: 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65  opcode can cause
e070: 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63  .** persistent c
e080: 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74  hanges to regist
e090: 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a  ers P1 and P3..*
e0a0: 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f  *.** Once any co
e0b0: 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74  nversions have t
e0c0: 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20  aken place, and 
e0d0: 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73  neither value is
e0e0: 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76   NULL, .** the v
e0f0: 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72  alues are compar
e100: 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75  ed. If both valu
e110: 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65  es are blobs the
e120: 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a  n memcmp() is.**
e130: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
e140: 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  ne the results o
e150: 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  f the comparison
e160: 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  .  If both value
e170: 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74  s.** are text, t
e180: 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69  hen the appropri
e190: 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ate collating fu
e1a0: 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64  nction specified
e1b0: 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73   in.** P4 is  us
e1c0: 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d  ed to do the com
e1d0: 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20  parison.  If P4 
e1e0: 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64  is not specified
e1f0: 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28   then.** memcmp(
e200: 29 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d  ) is used to com
e210: 70 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67  pare text string
e220: 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  .  If both value
e230: 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63  s are.** numeric
e240: 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63  , then a numeric
e250: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75   comparison is u
e260: 73 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20  sed. If the two 
e270: 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66  values.** are of
e280: 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73   different types
e290: 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61  , then numbers a
e2a0: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65  re considered le
e2b0: 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e  ss than.** strin
e2c0: 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61  gs and strings a
e2d0: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65  re considered le
e2e0: 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a  ss than blobs..*
e2f0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
e300: 54 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20 6f  TE_STOREP2 bit o
e310: 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65  f P5 is set, the
e320: 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20  n do not jump.  
e330: 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72  Instead,.** stor
e340: 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75  e a boolean resu
e350: 6c 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f 72  lt (either 0, or
e360: 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20   1, or NULL) in 
e370: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
e380: 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  ** If the SQLITE
e390: 5f 4e 55 4c 4c 45 51 20 62 69 74 20 69 73 20 73  _NULLEQ bit is s
e3a0: 65 74 20 69 6e 20 50 35 2c 20 74 68 65 6e 20 4e  et in P5, then N
e3b0: 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63  ULL values are c
e3c0: 6f 6e 73 69 64 65 72 65 64 0a 2a 2a 20 65 71 75  onsidered.** equ
e3d0: 61 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68 65  al to one anothe
e3e0: 72 2c 20 70 72 6f 76 69 64 65 64 20 74 68 61 74  r, provided that
e3f0: 20 74 68 65 79 20 64 6f 20 6e 6f 74 20 68 61 76   they do not hav
e400: 65 20 74 68 65 69 72 20 4d 45 4d 5f 43 6c 65 61  e their MEM_Clea
e410: 72 65 64 0a 2a 2a 20 62 69 74 20 73 65 74 2e 0a  red.** bit set..
e420: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  */./* Opcode: Ne
e430: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
e440: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
e450: 72 5b 50 31 5d 21 3d 72 5b 50 33 5d 20 67 6f 74  r[P1]!=r[P3] got
e460: 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  o P2.**.** This 
e470: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
e480: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
e490: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
e4a0: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
e4b0: 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69  * the operands i
e4c0: 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  n registers P1 a
e4d0: 6e 64 20 50 33 20 61 72 65 20 6e 6f 74 20 65 71  nd P3 are not eq
e4e0: 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20 4c 74  ual.  See the Lt
e4f0: 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61   opcode for.** a
e500: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
e510: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ation..**.** If 
e520: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
e530: 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20   set in P5 then 
e540: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f  the result of co
e550: 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61  mparison is alwa
e560: 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75  ys either.** tru
e570: 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69  e or false and i
e580: 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49  s never NULL.  I
e590: 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  f both operands 
e5a0: 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68  are NULL then th
e5b0: 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63  e result.** of c
e5c0: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 66 61 6c  omparison is fal
e5d0: 73 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f  se.  If either o
e5e0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
e5f0: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
e600: 73 20 74 72 75 65 2e 0a 2a 2a 20 49 66 20 6e 65  s true..** If ne
e610: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
e620: 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74   NULL the result
e630: 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
e640: 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a  it would be if.*
e650: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c  * the SQLITE_NUL
e660: 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d  LEQ flag were om
e670: 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a  itted from P5..*
e680: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20  /./* Opcode: Eq 
e690: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
e6a0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
e6b0: 5b 50 31 5d 3d 3d 72 5b 50 33 5d 20 67 6f 74 6f  [P1]==r[P3] goto
e6c0: 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P2.**.** This w
e6d0: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
e6e0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
e6f0: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
e700: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
e710: 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e   the operands in
e720: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
e730: 64 20 50 33 20 61 72 65 20 65 71 75 61 6c 2e 0a  d P3 are equal..
e740: 2a 2a 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  ** See the Lt op
e750: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
e760: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
e770: 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  .**.** If SQLITE
e780: 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69  _NULLEQ is set i
e790: 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65  n P5 then the re
e7a0: 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73  sult of comparis
e7b0: 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74  on is always eit
e7c0: 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66  her.** true or f
e7d0: 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65  alse and is neve
e7e0: 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68  r NULL.  If both
e7f0: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55   operands are NU
e800: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
e810: 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69  lt.** of compari
e820: 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 20 49 66  son is true.  If
e830: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
e840: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  is NULL then the
e850: 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65   result is false
e860: 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20  ..** If neither 
e870: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
e880: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68  the result is th
e890: 65 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75  e same as it wou
e8a0: 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20  ld be if.** the 
e8b0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c  SQLITE_NULLEQ fl
e8c0: 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20  ag were omitted 
e8d0: 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f  from P5..*/./* O
e8e0: 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50 32 20  pcode: Le P1 P2 
e8f0: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
e900: 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c 3d  psis: if r[P1]<=
e910: 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a  r[P3] goto P2.**
e920: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
e930: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
e940: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
e950: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
e960: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63  aken if.** the c
e970: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
e980: 65 72 20 50 33 20 69 73 20 6c 65 73 73 20 74 68  er P3 is less th
e990: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
e9a0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
e9b0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
e9c0: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
e9d0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
e9e0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
e9f0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31  /* Opcode: Gt P1
ea00: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
ea10: 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
ea20: 31 5d 3e 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32  1]>r[P3] goto P2
ea30: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
ea40: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
ea50: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
ea60: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
ea70: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
ea80: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
ea90: 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61  ister P3 is grea
eaa0: 74 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e  ter than the con
eab0: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
eac0: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
ead0: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
eae0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
eaf0: 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ation..*/./* Opc
eb00: 6f 64 65 3a 20 47 65 20 50 31 20 50 32 20 50 33  ode: Ge P1 P2 P3
eb10: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
eb20: 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 3d 72 5b  is: if r[P1]>=r[
eb30: 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3] goto P2.**.*
eb40: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
eb50: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
eb60: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
eb70: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
eb80: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  en if.** the con
eb90: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
eba0: 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
ebb0: 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
ebc0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
ebd0: 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  * register P1.  
ebe0: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
ebf0: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
ec00: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
ec10: 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20  .case OP_Eq:    
ec20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
ec30: 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d  me as TK_EQ, jum
ec40: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
ec50: 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20  ase OP_Ne:      
ec60: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ec70: 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c   as TK_NE, jump,
ec80: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
ec90: 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20  e OP_Lt:        
eca0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ecb0: 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69  s TK_LT, jump, i
ecc0: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
ecd0: 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20  OP_Le:          
ece0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ecf0: 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_LE, jump, in1
ed00: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
ed10: 5f 47 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Gt:            
ed20: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
ed30: 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _GT, jump, in1, 
ed40: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  in3 */.case OP_G
ed50: 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
ed60: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47   /* same as TK_G
ed70: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
ed80: 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20  3 */.  int res; 
ed90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
eda0: 73 75 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d 70  sult of the comp
edb0: 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20 61  arison of pIn1 a
edc0: 67 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a 20  gainst pIn3 */. 
edd0: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
ede0: 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79       /* Affinity
edf0: 20 74 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d 70   to use for comp
ee00: 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36 20  arison */.  u16 
ee10: 66 6c 61 67 73 31 3b 20 20 20 20 20 20 20 20 20  flags1;         
ee20: 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69  /* Copy of initi
ee30: 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 31  al value of pIn1
ee40: 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31 36  ->flags */.  u16
ee50: 20 66 6c 61 67 73 33 3b 20 20 20 20 20 20 20 20   flags3;        
ee60: 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74   /* Copy of init
ee70: 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e  ial value of pIn
ee80: 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 70  3->flags */..  p
ee90: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
eea0: 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26  >p1];.  pIn3 = &
eeb0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
eec0: 20 66 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e   flags1 = pIn1->
eed0: 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73 33 20  flags;.  flags3 
eee0: 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20  = pIn3->flags;. 
eef0: 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20 66   if( (flags1 | f
ef00: 6c 61 67 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20  lags3)&MEM_Null 
ef10: 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72  ){.    /* One or
ef20: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
ef30: 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 69  re NULL */.    i
ef40: 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
ef50: 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20 20  ITE_NULLEQ ){.  
ef60: 20 20 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45      /* If SQLITE
ef70: 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 28  _NULLEQ is set (
ef80: 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79 20  which will only 
ef90: 68 61 70 70 65 6e 20 69 66 20 74 68 65 20 6f 70  happen if the op
efa0: 65 72 61 74 6f 72 20 69 73 0a 20 20 20 20 20 20  erator is.      
efb0: 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f 4e  ** OP_Eq or OP_N
efc0: 65 29 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  e) then take the
efd0: 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65 70   jump or not dep
efe0: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
eff0: 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e 6f  r.      ** or no
f000: 74 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  t both operands 
f010: 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20 20  are null..      
f020: 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
f030: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
f040: 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  _Eq || pOp->opco
f050: 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20  de==OP_Ne );.   
f060: 20 20 20 61 73 73 65 72 74 28 20 28 66 6c 61 67     assert( (flag
f070: 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65 64  s1 & MEM_Cleared
f080: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73  )==0 );.      as
f090: 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26  sert( (pOp->p5 &
f0a0: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
f0b0: 4c 4c 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  LL)==0 );.      
f0c0: 69 66 28 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f  if( (flags1&MEM_
f0d0: 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20  Null)!=0.       
f0e0: 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 4e  && (flags3&MEM_N
f0f0: 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26  ull)!=0.       &
f100: 26 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 43 6c  & (flags3&MEM_Cl
f110: 65 61 72 65 64 29 3d 3d 30 0a 20 20 20 20 20 20  eared)==0.      
f120: 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d  ){.        res =
f130: 20 30 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20   0;  /* Results 
f140: 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20  are equal */.   
f150: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
f160: 20 20 72 65 73 20 3d 20 31 3b 20 20 2f 2a 20 52    res = 1;  /* R
f170: 65 73 75 6c 74 73 20 61 72 65 20 6e 6f 74 20 65  esults are not e
f180: 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 0a  qual */.      }.
f190: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
f1a0: 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   /* SQLITE_NULLE
f1b0: 51 20 69 73 20 63 6c 65 61 72 20 61 6e 64 20 61  Q is clear and a
f1c0: 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65 72  t least one oper
f1d0: 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20  and is NULL,.   
f1e0: 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 72     ** then the r
f1f0: 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20  esult is always 
f200: 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54  NULL..      ** T
f210: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
f220: 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a   if the SQLITE_J
f230: 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 69 73  UMPIFNULL bit is
f240: 20 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20   set..      */. 
f250: 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35       if( pOp->p5
f260: 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50   & SQLITE_STOREP
f270: 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4f 75  2 ){.        pOu
f280: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
f290: 32 5d 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53  2];.        MemS
f2a0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
f2b0: 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20   MEM_Null);.    
f2c0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
f2d0: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
f2e0: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
f2f0: 20 20 20 20 20 20 20 20 56 64 62 65 42 72 61 6e          VdbeBran
f300: 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 0a 20 20  chTaken(2,3);.  
f310: 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70        if( pOp->p
f320: 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  5 & SQLITE_JUMPI
f330: 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20  FNULL ){.       
f340: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d     pc = pOp->p2-
f350: 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  1;.        }.   
f360: 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b     }.      break
f370: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
f380: 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72 20  .    /* Neither 
f390: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e  operand is NULL.
f3a0: 20 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f    Do a compariso
f3b0: 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69  n. */.    affini
f3c0: 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53  ty = pOp->p5 & S
f3d0: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a  QLITE_AFF_MASK;.
f3e0: 20 20 20 20 69 66 28 20 61 66 66 69 6e 69 74 79      if( affinity
f3f0: 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41   ){.      applyA
f400: 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 61 66  ffinity(pIn1, af
f410: 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67  finity, encoding
f420: 29 3b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66  );.      applyAf
f430: 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 61 66 66  finity(pIn3, aff
f440: 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29  inity, encoding)
f450: 3b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e  ;.      if( db->
f460: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
f470: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
f480: 7d 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  }..    assert( p
f490: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
f4a0: 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70  OLLSEQ || pOp->p
f4b0: 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20  4.pColl==0 );.  
f4c0: 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e    ExpandBlob(pIn
f4d0: 31 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c  1);.    ExpandBl
f4e0: 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 72 65  ob(pIn3);.    re
f4f0: 73 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f  s = sqlite3MemCo
f500: 6d 70 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31  mpare(pIn3, pIn1
f510: 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29  , pOp->p4.pColl)
f520: 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20  ;.  }.  switch( 
f530: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20  pOp->opcode ){. 
f540: 20 20 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20     case OP_Eq:  
f550: 20 20 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20    res = res==0; 
f560: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
f570: 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65  ase OP_Ne:    re
f580: 73 20 3d 20 72 65 73 21 3d 30 3b 20 20 20 20 20  s = res!=0;     
f590: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
f5a0: 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d 20  OP_Lt:    res = 
f5b0: 72 65 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61  res<0;      brea
f5c0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c  k;.    case OP_L
f5d0: 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c  e:    res = res<
f5e0: 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  =0;     break;. 
f5f0: 20 20 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20     case OP_Gt:  
f600: 20 20 72 65 73 20 3d 20 72 65 73 3e 30 3b 20 20    res = res>0;  
f610: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64      break;.    d
f620: 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65  efault:       re
f630: 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20  s = res>=0;     
f640: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66  break;.  }..  if
f650: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
f660: 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20  TE_STOREP2 ){.  
f670: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
f680: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d 65 6d  Op->p2];.    mem
f690: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
f6a0: 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53   pOut);.    MemS
f6b0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
f6c0: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70   MEM_Int);.    p
f6d0: 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a  Out->u.i = res;.
f6e0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
f6f0: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
f700: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
f710: 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
f720: 72 65 73 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35  res!=0, (pOp->p5
f730: 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51   & SQLITE_NULLEQ
f740: 29 3f 32 3a 33 29 3b 0a 20 20 20 20 69 66 28 20  )?2:3);.    if( 
f750: 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20  res ){.      pc 
f760: 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20  = pOp->p2-1;.   
f770: 20 7d 0a 20 20 7d 0a 20 20 2f 2a 20 55 6e 64 6f   }.  }.  /* Undo
f780: 20 61 6e 79 20 63 68 61 6e 67 65 73 20 6d 61 64   any changes mad
f790: 65 20 62 79 20 61 70 70 6c 79 41 66 66 69 6e 69  e by applyAffini
f7a0: 74 79 28 29 20 74 6f 20 74 68 65 20 69 6e 70 75  ty() to the inpu
f7b0: 74 20 72 65 67 69 73 74 65 72 73 2e 20 2a 2f 0a  t registers. */.
f7c0: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
f7d0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 7e 4d 45  (pIn1->flags&~ME
f7e0: 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66  M_TypeMask) | (f
f7f0: 6c 61 67 73 31 26 4d 45 4d 5f 54 79 70 65 4d 61  lags1&MEM_TypeMa
f800: 73 6b 29 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61  sk);.  pIn3->fla
f810: 67 73 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67  gs = (pIn3->flag
f820: 73 26 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29  s&~MEM_TypeMask)
f830: 20 7c 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 54   | (flags3&MEM_T
f840: 79 70 65 4d 61 73 6b 29 3b 0a 20 20 62 72 65 61  ypeMask);.  brea
f850: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
f860: 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a   Permutation * *
f870: 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65   * P4 *.**.** Se
f880: 74 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f  t the permutatio
f890: 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 4f 50  n used by the OP
f8a0: 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f  _Compare operato
f8b0: 72 20 74 6f 20 62 65 20 74 68 65 20 61 72 72 61  r to be the arra
f8c0: 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73  y.** of integers
f8d0: 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68   in P4..**.** Th
f8e0: 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73  e permutation is
f8f0: 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74 69   only valid unti
f900: 6c 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f  l the next OP_Co
f910: 6d 70 61 72 65 20 74 68 61 74 20 68 61 73 0a 2a  mpare that has.*
f920: 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52  * the OPFLAG_PER
f930: 4d 55 54 45 20 62 69 74 20 73 65 74 20 69 6e 20  MUTE bit set in 
f940: 50 35 2e 20 54 79 70 69 63 61 6c 6c 79 20 74 68  P5. Typically th
f950: 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  e OP_Permutation
f960: 20 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75   should .** occu
f970: 72 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 70 72  r immediately pr
f980: 69 6f 72 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f  ior to the OP_Co
f990: 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  mpare..*/.case O
f9a0: 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b  P_Permutation: {
f9b0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
f9c0: 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52  p4type==P4_INTAR
f9d0: 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28  RAY );.  assert(
f9e0: 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20   pOp->p4.ai );. 
f9f0: 20 61 50 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d   aPermute = pOp-
fa00: 3e 70 34 2e 61 69 3b 0a 20 20 62 72 65 61 6b 3b  >p4.ai;.  break;
fa10: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
fa20: 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33 20  ompare P1 P2 P3 
fa30: 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  P4 P5.**.** Comp
fa40: 61 72 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20  are two vectors 
fa50: 6f 66 20 72 65 67 69 73 74 65 72 73 20 69 6e 20  of registers in 
fa60: 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b  reg(P1)..reg(P1+
fa70: 50 33 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73  P3-1) (call this
fa80: 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20  .** vector "A") 
fa90: 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e  and in reg(P2)..
faa0: 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42  reg(P2+P3-1) ("B
fab0: 22 29 2e 20 20 53 61 76 65 20 74 68 65 20 72 65  ").  Save the re
fac0: 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63  sult of.** the c
fad0: 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73  omparison for us
fae0: 65 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50  e by the next OP
faf0: 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a  _Jump instruct..
fb00: 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20  **.** If P5 has 
fb10: 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  the OPFLAG_PERMU
fb20: 54 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e  TE bit set, then
fb30: 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f   the order of co
fb40: 6d 70 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64  mparison is.** d
fb50: 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
fb60: 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f   most recent OP_
fb70: 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72  Permutation oper
fb80: 61 74 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a  ator.  If the.**
fb90: 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
fba0: 62 69 74 20 69 73 20 63 6c 65 61 72 2c 20 74 68  bit is clear, th
fbb0: 65 6e 20 72 65 67 69 73 74 65 72 20 61 72 65 20  en register are 
fbc0: 63 6f 6d 70 61 72 65 64 20 69 6e 20 73 65 71 75  compared in sequ
fbd0: 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e  ential.** order.
fbe0: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b  .**.** P4 is a K
fbf0: 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
fc00: 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f   that defines co
fc10: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
fc20: 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72  s and sort.** or
fc30: 64 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d  ders for the com
fc40: 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65  parison.  The pe
fc50: 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65  rmutation applie
fc60: 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a  s to registers.*
fc70: 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79  * only.  The Key
fc80: 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72  Info elements ar
fc90: 65 20 75 73 65 64 20 73 65 71 75 65 6e 74 69 61  e used sequentia
fca0: 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  lly..**.** The c
fcb0: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73  omparison is a s
fcc0: 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20  ort comparison, 
fcd0: 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65  so NULLs compare
fce0: 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73   equal,.** NULLs
fcf0: 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e   are less than n
fd00: 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20  umbers, numbers 
fd10: 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74  are less than st
fd20: 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74  rings,.** and st
fd30: 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74  rings are less t
fd40: 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61  han blobs..*/.ca
fd50: 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b  se OP_Compare: {
fd60: 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20  .  int n;.  int 
fd70: 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69  i;.  int p1;.  i
fd80: 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b  nt p2;.  const K
fd90: 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
fda0: 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43  ;.  int idx;.  C
fdb0: 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20  ollSeq *pColl;  
fdc0: 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
fdd0: 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f  equence to use o
fde0: 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20  n this term */. 
fdf0: 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20   int bRev;      
fe00: 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20      /* True for 
fe10: 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20  DESCENDING sort 
fe20: 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 69 66 28 20  order */..  if( 
fe30: 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
fe40: 47 5f 50 45 52 4d 55 54 45 29 3d 3d 30 20 29 20  G_PERMUTE)==0 ) 
fe50: 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20  aPermute = 0;.  
fe60: 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70  n = pOp->p3;.  p
fe70: 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
fe80: 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73  4.pKeyInfo;.  as
fe90: 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61  sert( n>0 );.  a
fea0: 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21  ssert( pKeyInfo!
feb0: 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70  =0 );.  p1 = pOp
fec0: 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70  ->p1;.  p2 = pOp
fed0: 2d 3e 70 32 3b 0a 23 69 66 20 53 51 4c 49 54 45  ->p2;.#if SQLITE
fee0: 5f 44 45 42 55 47 0a 20 20 69 66 28 20 61 50 65  _DEBUG.  if( aPe
fef0: 72 6d 75 74 65 20 29 7b 0a 20 20 20 20 69 6e 74  rmute ){.    int
ff00: 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20   k, mx = 0;.    
ff10: 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b  for(k=0; k<n; k+
ff20: 2b 29 20 69 66 28 20 61 50 65 72 6d 75 74 65 5b  +) if( aPermute[
ff30: 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50 65  k]>mx ) mx = aPe
ff40: 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73  rmute[k];.    as
ff50: 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31  sert( p1>0 && p1
ff60: 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  +mx<=(p->nMem-p-
ff70: 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
ff80: 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
ff90: 26 26 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d  && p2+mx<=(p->nM
ffa0: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
ffb0: 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   );.  }else{.   
ffc0: 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26   assert( p1>0 &&
ffd0: 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d   p1+n<=(p->nMem-
ffe0: 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
fff0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
10000 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e 6e  0 && p2+n<=(p->n
10010 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  Mem-p->nCursor)+
10020 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  1 );.  }.#endif 
10030 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
10040 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  */.  for(i=0; i<
10050 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78  n; i++){.    idx
10060 20 3d 20 61 50 65 72 6d 75 74 65 20 3f 20 61 50   = aPermute ? aP
10070 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20  ermute[i] : i;. 
10080 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
10090 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69  Valid(&aMem[p1+i
100a0 64 78 5d 29 20 29 3b 0a 20 20 20 20 61 73 73 65  dx]) );.    asse
100b0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
100c0 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b  aMem[p2+idx]) );
100d0 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
100e0 41 43 45 28 70 31 2b 69 64 78 2c 20 26 61 4d 65  ACE(p1+idx, &aMe
100f0 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20  m[p1+idx]);.    
10100 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
10110 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b  2+idx, &aMem[p2+
10120 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72  idx]);.    asser
10130 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e  t( i<pKeyInfo->n
10140 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f  Field );.    pCo
10150 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61  ll = pKeyInfo->a
10160 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65  Coll[i];.    bRe
10170 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53  v = pKeyInfo->aS
10180 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20  ortOrder[i];.   
10190 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69   iCompare = sqli
101a0 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61  te3MemCompare(&a
101b0 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d  Mem[p1+idx], &aM
101c0 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c  em[p2+idx], pCol
101d0 6c 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d  l);.    if( iCom
101e0 70 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66  pare ){.      if
101f0 28 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72  ( bRev ) iCompar
10200 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20  e = -iCompare;. 
10210 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
10220 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75 74 65  }.  }.  aPermute
10230 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
10240 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d  ../* Opcode: Jum
10250 70 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  p P1 P2 P3 * *.*
10260 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65  *.** Jump to the
10270 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20   instruction at 
10280 61 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20  address P1, P2, 
10290 6f 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20  or P3 depending 
102a0 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e  on whether.** in
102b0 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
102c0 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74   OP_Compare inst
102d0 72 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76  ruction the P1 v
102e0 65 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74  ector was less t
102f0 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c  han.** equal to,
10300 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e   or greater than
10310 20 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20   the P2 vector, 
10320 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f  respectively..*/
10330 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b  .case OP_Jump: {
10340 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10350 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43  jump */.  if( iC
10360 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20  ompare<0 ){.    
10370 70 63 20 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31  pc = pOp->p1 - 1
10380 3b 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  ;  VdbeBranchTak
10390 65 6e 28 30 2c 33 29 3b 0a 20 20 7d 65 6c 73 65  en(0,3);.  }else
103a0 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30   if( iCompare==0
103b0 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
103c0 2d 3e 70 32 20 2d 20 31 3b 20 20 56 64 62 65 42  ->p2 - 1;  VdbeB
103d0 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 33 29 3b  ranchTaken(1,3);
103e0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 63  .  }else{.    pc
103f0 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 20   = pOp->p3 - 1; 
10400 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
10410 28 32 2c 33 29 3b 0a 20 20 7d 0a 20 20 62 72 65  (2,3);.  }.  bre
10420 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
10430 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a  : And P1 P2 P3 *
10440 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
10450 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26 26 20  r[P3]=(r[P1] && 
10460 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b  r[P2]).**.** Tak
10470 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e  e the logical AN
10480 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  D of the values 
10490 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20  in registers P1 
104a0 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72  and P2 and.** wr
104b0 69 74 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ite the result i
104c0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e  nto register P3.
104d0 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
104e0 20 50 31 20 6f 72 20 50 32 20 69 73 20 30 20 28   P1 or P2 is 0 (
104f0 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20  false) then the 
10500 72 65 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e  result is 0 even
10510 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72   if.** the other
10520 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20   input is NULL. 
10530 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65   A NULL and true
10540 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69   or two NULLs gi
10550 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74  ve.** a NULL out
10560 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  put..*/./* Opcod
10570 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a  e: Or P1 P2 P3 *
10580 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
10590 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20  r[P3]=(r[P1] || 
105a0 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b  r[P2]).**.** Tak
105b0 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52  e the logical OR
105c0 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
105d0 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
105e0 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
105f0 65 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20  e the answer in 
10600 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
10610 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20  ** If either P1 
10620 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f  or P2 is nonzero
10630 20 28 74 72 75 65 29 20 74 68 65 6e 20 74 68 65   (true) then the
10640 20 72 65 73 75 6c 74 20 69 73 20 31 20 28 74 72   result is 1 (tr
10650 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74  ue).** even if t
10660 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69  he other input i
10670 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20  s NULL.  A NULL 
10680 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f  and false or two
10690 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61   NULLs.** give a
106a0 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
106b0 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20  .case OP_And:   
106c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
106d0 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e  me as TK_AND, in
106e0 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
106f0 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20  case OP_Or: {   
10700 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
10710 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c  e as TK_OR, in1,
10720 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
10730 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65  int v1;    /* Le
10740 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d  ft operand:  0==
10750 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20  FALSE, 1==TRUE, 
10760 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55  2==UNKNOWN or NU
10770 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20  LL */.  int v2; 
10780 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65 72     /* Right oper
10790 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31  and: 0==FALSE, 1
107a0 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f  ==TRUE, 2==UNKNO
107b0 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20  WN or NULL */.. 
107c0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
107d0 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
107e0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
107f0 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d  Null ){.    v1 =
10800 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   2;.  }else{.   
10810 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62   v1 = sqlite3Vdb
10820 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21  eIntValue(pIn1)!
10830 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32 20 3d  =0;.  }.  pIn2 =
10840 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
10850 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61  .  if( pIn2->fla
10860 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
10870 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d  .    v2 = 2;.  }
10880 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d 20 73  else{.    v2 = s
10890 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
108a0 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d  ue(pIn2)!=0;.  }
108b0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
108c0 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20  de==OP_And ){.  
108d0 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75    static const u
108e0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64  nsigned char and
108f0 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20  _logic[] = { 0, 
10900 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30  0, 0, 0, 1, 2, 0
10910 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31  , 2, 2 };.    v1
10920 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a   = and_logic[v1*
10930 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  3+v2];.  }else{.
10940 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
10950 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f   unsigned char o
10960 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c  r_logic[] = { 0,
10970 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 2, 1, 1, 1, 
10980 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76  2, 1, 2 };.    v
10990 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a  1 = or_logic[v1*
109a0 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75  3+v2];.  }.  pOu
109b0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
109c0 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32 20  3];.  if( v1==2 
109d0 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  ){.    MemSetTyp
109e0 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
109f0 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  Null);.  }else{.
10a00 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
10a10 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  v1;.    MemSetTy
10a20 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
10a30 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65  _Int);.  }.  bre
10a40 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
10a50 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20  : Not P1 P2 * * 
10a60 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
10a70 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a 2a 0a  [P2]= !r[P1].**.
10a80 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
10a90 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
10aa0 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65  er P1 as a boole
10ab0 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65  an value.  Store
10ac0 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20   the.** boolean 
10ad0 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65  complement in re
10ae0 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 74  gister P2.  If t
10af0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
10b00 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e  ster P1 is .** N
10b10 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c  ULL, then a NULL
10b20 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50 32   is stored in P2
10b30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  ..*/.case OP_Not
10b40 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
10b50 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
10b60 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20  _NOT, in1, out2 
10b70 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
10b80 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
10b90 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
10ba0 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p2];.  if( pIn1-
10bb0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
10bc0 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
10bd0 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
10be0 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Out);.  }else{. 
10bf0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
10c00 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20  mSetInt64(pOut, 
10c10 21 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56  !sqlite3VdbeIntV
10c20 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d  alue(pIn1));.  }
10c30 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
10c40 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50  Opcode: BitNot P
10c50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
10c60 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 20 7e  nopsis: r[P1]= ~
10c70 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  r[P1].**.** Inte
10c80 72 70 72 65 74 20 74 68 65 20 63 6f 6e 74 65 6e  rpret the conten
10c90 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  t of register P1
10ca0 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20   as an integer. 
10cb0 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e   Store the.** on
10cc0 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66  es-complement of
10cd0 20 74 68 65 20 50 31 20 76 61 6c 75 65 20 69 6e   the P1 value in
10ce0 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  to register P2. 
10cf0 20 49 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20   If P1 holds.** 
10d00 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72  a NULL then stor
10d10 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a  e a NULL in P2..
10d20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f  */.case OP_BitNo
10d30 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
10d40 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42   /* same as TK_B
10d50 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32  ITNOT, in1, out2
10d60 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
10d70 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
10d80 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
10d90 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p2];.  if( pIn1
10da0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
10db0 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
10dc0 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
10dd0 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  pOut);.  }else{.
10de0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
10df0 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c  emSetInt64(pOut,
10e00 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74   ~sqlite3VdbeInt
10e10 56 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20 20  Value(pIn1));.  
10e20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
10e30 20 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31   Opcode: Once P1
10e40 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
10e50 43 68 65 63 6b 20 69 66 20 4f 50 5f 4f 6e 63 65  Check if OP_Once
10e60 20 66 6c 61 67 20 50 31 20 69 73 20 73 65 74 2e   flag P1 is set.
10e70 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20   If so, jump to 
10e80 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20  instruction P2. 
10e90 4f 74 68 65 72 77 69 73 65 2c 0a 2a 2a 20 73 65  Otherwise,.** se
10ea0 74 20 74 68 65 20 66 6c 61 67 20 61 6e 64 20 66  t the flag and f
10eb0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
10ec0 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
10ed0 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ion.  In other w
10ee0 6f 72 64 73 2c 0a 2a 2a 20 74 68 69 73 20 6f 70  ords,.** this op
10ef0 63 6f 64 65 20 63 61 75 73 65 73 20 61 6c 6c 20  code causes all 
10f00 66 6f 6c 6c 6f 77 69 6e 67 20 75 70 20 63 6f 64  following up cod
10f10 65 73 20 75 70 20 74 68 72 6f 75 67 68 20 50 32  es up through P2
10f20 20 28 62 75 74 20 6e 6f 74 20 69 6e 63 6c 75 64   (but not includ
10f30 69 6e 67 0a 2a 2a 20 50 32 29 20 74 6f 20 72 75  ing.** P2) to ru
10f40 6e 20 6a 75 73 74 20 6f 6e 63 65 20 61 6e 64 20  n just once and 
10f50 73 6b 69 70 70 65 64 20 6f 6e 20 73 75 62 73 65  skipped on subse
10f60 71 75 65 6e 74 20 74 69 6d 65 73 20 74 68 72 6f  quent times thro
10f70 75 67 68 20 74 68 65 20 6c 6f 6f 70 2e 0a 2a 2f  ugh the loop..*/
10f80 0a 63 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b  .case OP_Once: {
10f90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10fa0 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
10fb0 28 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e  ( pOp->p1<p->nOn
10fc0 63 65 46 6c 61 67 20 29 3b 0a 20 20 56 64 62 65  ceFlag );.  Vdbe
10fd0 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 61  BranchTaken(p->a
10fe0 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31  OnceFlag[pOp->p1
10ff0 5d 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  ]!=0, 2);.  if( 
11000 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70  p->aOnceFlag[pOp
11010 2d 3e 70 31 5d 20 29 7b 0a 20 20 20 20 70 63 20  ->p1] ){.    pc 
11020 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d  = pOp->p2-1;.  }
11030 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e  else{.    p->aOn
11040 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20  ceFlag[pOp->p1] 
11050 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 1;.  }.  break
11060 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
11070 49 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  If P1 P2 P3 * *.
11080 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
11090 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
110a0 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
110b0 74 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65  true.  The value
110c0 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65  .** is considere
110d0 64 20 74 72 75 65 20 69 66 20 69 74 20 69 73 20  d true if it is 
110e0 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d  numeric and non-
110f0 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61  zero.  If the va
11100 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
11110 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
11120 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73  he jump if P3 is
11130 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a   non-zero..*/./*
11140 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50   Opcode: IfNot P
11150 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
11160 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
11170 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
11180 69 73 74 65 72 20 50 31 20 69 73 20 46 61 6c 73  ister P1 is Fals
11190 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  e.  The value.**
111a0 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 66   is considered f
111b0 61 6c 73 65 20 69 66 20 69 74 20 68 61 73 20 61  alse if it has a
111c0 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f   numeric value o
111d0 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20  f zero.  If the 
111e0 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
111f0 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
11200 20 74 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20   the jump if P3 
11210 69 73 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65  is zero..*/.case
11220 20 4f 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20   OP_If:         
11230 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
11240 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in1 */.case OP_
11250 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  IfNot: {        
11260 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
11270 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70   */.  int c;.  p
11280 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
11290 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p1];.  if( pIn1
112a0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
112b0 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f  ll ){.    c = pO
112c0 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a  p->p3;.  }else{.
112d0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
112e0 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
112f0 54 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65  T.    c = sqlite
11300 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
11310 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20  n1)!=0;.#else.  
11320 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62    c = sqlite3Vdb
11330 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
11340 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20  !=0.0;.#endif.  
11350 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
11360 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20  e==OP_IfNot ) c 
11370 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 56 64 62 65  = !c;.  }.  Vdbe
11380 42 72 61 6e 63 68 54 61 6b 65 6e 28 63 21 3d 30  BranchTaken(c!=0
11390 2c 20 32 29 3b 0a 20 20 69 66 28 20 63 20 29 7b  , 2);.  if( c ){
113a0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
113b0 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  2-1;.  }.  break
113c0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
113d0 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a  IsNull P1 P2 * *
113e0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
113f0 20 69 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20   if r[P1]==NULL 
11400 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75  goto P2.**.** Ju
11410 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
11420 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
11430 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  r P1 is NULL..*/
11440 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a  .case OP_IsNull:
11450 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
11460 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55   same as TK_ISNU
11470 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f  LL, jump, in1 */
11480 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
11490 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65  pOp->p1];.  Vdbe
114a0 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49  BranchTaken( (pI
114b0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
114c0 4e 75 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a 20 20  Null)!=0, 2);.  
114d0 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
114e0 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20   & MEM_Null)!=0 
114f0 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
11500 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
11510 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
11520 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50  de: NotNull P1 P
11530 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
11540 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 4e  sis: if r[P1]!=N
11550 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  ULL goto P2.**.*
11560 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
11570 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
11580 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20  ister P1 is not 
11590 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20  NULL.  .*/.case 
115a0 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20  OP_NotNull: {   
115b0 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
115c0 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20   as TK_NOTNULL, 
115d0 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
115e0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
115f0 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e  >p1];.  VdbeBran
11600 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e  chTaken( (pIn1->
11610 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
11620 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  )==0, 2);.  if( 
11630 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
11640 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Null)==0 ){. 
11650 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
11660 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
11670 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
11680 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20  Column P1 P2 P3 
11690 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
116a0 73 3a 20 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a 0a  s:  r[P3]=PX.**.
116b0 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
116c0 20 64 61 74 61 20 74 68 61 74 20 63 75 72 73 6f   data that curso
116d0 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20 61  r P1 points to a
116e0 73 20 61 20 73 74 72 75 63 74 75 72 65 20 62 75  s a structure bu
116f0 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65  ilt using.** the
11700 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74   MakeRecord inst
11710 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20 74  ruction.  (See t
11720 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70  he MakeRecord op
11730 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
11740 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  nal.** informati
11750 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72  on about the for
11760 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74 61 2e  mat of the data.
11770 29 20 20 45 78 74 72 61 63 74 20 74 68 65 20 50  )  Extract the P
11780 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66  2-th column.** f
11790 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64 2e  rom this record.
117a0 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6c    If there are l
117b0 65 73 73 20 74 68 61 74 20 28 50 32 2b 31 29 20  ess that (P2+1) 
117c0 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74 68  .** values in th
117d0 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61 63  e record, extrac
117e0 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20  t a NULL..**.** 
117f0 54 68 65 20 76 61 6c 75 65 20 65 78 74 72 61 63  The value extrac
11800 74 65 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ted is stored in
11810 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
11820 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d  .** If the colum
11830 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65 72  n contains fewer
11840 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73 2c   than P2 fields,
11850 20 74 68 65 6e 20 65 78 74 72 61 63 74 20 61 20   then extract a 
11860 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66  NULL.  Or,.** if
11870 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74   the P4 argument
11880 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73 65   is a P4_MEM use
11890 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
118a0 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61 73  e P4 argument as
118b0 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e 0a  .** the result..
118c0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
118d0 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20 62  LAG_CLEARCACHE b
118e0 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35 20  it is set on P5 
118f0 61 6e 64 20 50 31 20 69 73 20 61 20 70 73 65 75  and P1 is a pseu
11900 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 2c  do-table cursor,
11910 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 61 63  .** then the cac
11920 68 65 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72  he of the cursor
11930 20 69 73 20 72 65 73 65 74 20 70 72 69 6f 72 20   is reset prior 
11940 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20 74 68  to extracting th
11950 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65  e column..** The
11960 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e   first OP_Column
11970 20 61 67 61 69 6e 73 74 20 61 20 70 73 65 75 64   against a pseud
11980 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20 74 68  o-table after th
11990 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  e value of the c
119a0 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73 74  ontent.** regist
119b0 65 72 20 68 61 73 20 63 68 61 6e 67 65 64 20 73  er has changed s
119c0 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69 73 20  hould have this 
119d0 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 49  bit set..**.** I
119e0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45 4e  f the OPFLAG_LEN
119f0 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41  GTHARG and OPFLA
11a00 47 5f 54 59 50 45 4f 46 41 52 47 20 62 69 74 73  G_TYPEOFARG bits
11a10 20 61 72 65 20 73 65 74 20 6f 6e 20 50 35 20 77   are set on P5 w
11a20 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c  hen.** the resul
11a30 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20  t is guaranteed 
11a40 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20  to only be used 
11a50 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  as the argument 
11a60 6f 66 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a 2a  of a length().**
11a70 20 6f 72 20 74 79 70 65 6f 66 28 29 20 66 75 6e   or typeof() fun
11a80 63 74 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76  ction, respectiv
11a90 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64 69 6e  ely.  The loadin
11aa0 67 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62 73  g of large blobs
11ab0 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70 70   can be.** skipp
11ac0 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20  ed for length() 
11ad0 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20  and all content 
11ae0 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62 65 20 73  loading can be s
11af0 6b 69 70 70 65 64 20 66 6f 72 20 74 79 70 65 6f  kipped for typeo
11b00 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  f()..*/.case OP_
11b10 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 36 34 20  Column: {.  i64 
11b20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 20 2f  payloadSize64; /
11b30 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
11b40 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  s in the record 
11b50 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20  */.  int p2;    
11b60 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d          /* colum
11b70 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72  n number to retr
11b80 69 65 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75  ieve */.  VdbeCu
11b90 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20  rsor *pC;    /* 
11ba0 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
11bb0 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  */.  BtCursor *p
11bc0 43 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42  Crsr;   /* The B
11bd0 54 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20  Tree cursor */. 
11be0 20 75 33 32 20 2a 61 54 79 70 65 3b 20 20 20 20   u32 *aType;    
11bf0 20 20 20 20 2f 2a 20 61 54 79 70 65 5b 69 5d 20      /* aType[i] 
11c00 68 6f 6c 64 73 20 74 68 65 20 6e 75 6d 65 72 69  holds the numeri
11c10 63 20 74 79 70 65 20 6f 66 20 74 68 65 20 69 2d  c type of the i-
11c20 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75  th column */.  u
11c30 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20  32 *aOffset;    
11c40 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20    /* aOffset[i] 
11c50 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61  is offset to sta
11c60 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69  rt of data for i
11c70 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  -th column */.  
11c80 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20  int len;        
11c90 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68     /* The length
11ca0 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a   of the serializ
11cb0 65 64 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  ed data for the 
11cc0 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20  column */.  int 
11cd0 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  i;             /
11ce0 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
11cf0 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20  /.  Mem *pDest; 
11d00 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20         /* Where 
11d10 74 6f 20 77 72 69 74 65 20 74 68 65 20 65 78 74  to write the ext
11d20 72 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a  racted value */.
11d30 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20    Mem sMem;     
11d40 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72       /* For stor
11d50 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62  ing the record b
11d60 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a  eing decoded */.
11d70 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 44 61 74    const u8 *zDat
11d80 61 3b 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  a;   /* Part of 
11d90 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67  the record being
11da0 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f   decoded */.  co
11db0 6e 73 74 20 75 38 20 2a 7a 48 64 72 3b 20 20 20  nst u8 *zHdr;   
11dc0 20 2f 2a 20 4e 65 78 74 20 75 6e 70 61 72 73 65   /* Next unparse
11dd0 64 20 62 79 74 65 20 6f 66 20 74 68 65 20 68 65  d byte of the he
11de0 61 64 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ader */.  const 
11df0 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a 20  u8 *zEndHdr; /* 
11e00 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74  Pointer to first
11e10 20 62 79 74 65 20 61 66 74 65 72 20 74 68 65 20   byte after the 
11e20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 33 32 20  header */.  u32 
11e30 6f 66 66 73 65 74 3b 20 20 20 20 20 20 20 20 2f  offset;        /
11e40 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74 68  * Offset into th
11e50 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20  e data */.  u32 
11e60 73 7a 46 69 65 6c 64 3b 20 20 20 20 20 20 20 2f  szField;       /
11e70 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
11e80 73 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74  s in the content
11e90 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 20   of a field */. 
11ea0 20 75 33 32 20 61 76 61 69 6c 3b 20 20 20 20 20   u32 avail;     
11eb0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11ec0 20 62 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61   bytes of availa
11ed0 62 6c 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33  ble data */.  u3
11ee0 32 20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  2 t;            
11ef0 20 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20   /* A type code 
11f00 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20  from the record 
11f10 68 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20  header */.  Mem 
11f20 2a 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f  *pReg;         /
11f30 2a 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e  * PseudoTable in
11f40 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a  put register */.
11f50 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
11f60 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
11f70 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
11f80 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
11f90 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74  rsor) );.  pDest
11fa0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
11fb0 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
11fc0 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b  hange(p, pDest);
11fd0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
11fe0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
11ff0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
12000 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
12010 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
12020 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
12030 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 46 69  sert( p2<pC->nFi
12040 65 6c 64 20 29 3b 0a 20 20 61 54 79 70 65 20 3d  eld );.  aType =
12050 20 70 43 2d 3e 61 54 79 70 65 3b 0a 20 20 61 4f   pC->aType;.  aO
12060 66 66 73 65 74 20 3d 20 61 54 79 70 65 20 2b 20  ffset = aType + 
12070 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 23 69 66 6e  pC->nField;.#ifn
12080 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
12090 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 61  VIRTUALTABLE.  a
120a0 73 73 65 72 74 28 20 70 43 2d 3e 70 56 74 61 62  ssert( pC->pVtab
120b0 43 75 72 73 6f 72 3d 3d 30 20 29 3b 20 2f 2a 20  Cursor==0 ); /* 
120c0 4f 50 5f 43 6f 6c 75 6d 6e 20 6e 65 76 65 72 20  OP_Column never 
120d0 63 61 6c 6c 65 64 20 6f 6e 20 76 69 72 74 75 61  called on virtua
120e0 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69  l table */.#endi
120f0 66 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  f.  pCrsr = pC->
12100 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
12110 74 28 20 70 43 72 73 72 21 3d 30 20 7c 7c 20 70  t( pCrsr!=0 || p
12120 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
12130 67 3e 30 20 29 3b 20 2f 2a 20 70 43 72 73 72 20  g>0 ); /* pCrsr 
12140 4e 55 4c 4c 20 6f 6e 20 50 73 65 75 64 6f 54 61  NULL on PseudoTa
12150 62 6c 65 73 20 2a 2f 0a 20 20 61 73 73 65 72 74  bles */.  assert
12160 28 20 70 43 72 73 72 21 3d 30 20 7c 7c 20 70 43  ( pCrsr!=0 || pC
12170 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 20 20 20 20  ->nullRow );    
12180 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 6e 75 6c        /* pC->nul
12190 6c 52 6f 77 20 6f 6e 20 50 73 65 75 64 6f 54 61  lRow on PseudoTa
121a0 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66  bles */..  /* If
121b0 20 74 68 65 20 63 75 72 73 6f 72 20 63 61 63 68   the cursor cach
121c0 65 20 69 73 20 73 74 61 6c 65 2c 20 62 72 69 6e  e is stale, brin
121d0 67 20 69 74 20 75 70 2d 74 6f 2d 64 61 74 65 20  g it up-to-date 
121e0 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
121f0 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
12200 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63 20  o(pC);.  if( rc 
12210 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
12220 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
12230 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
12240 21 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 7c 7c  !=p->cacheCtr ||
12250 20 28 70 4f 70 2d 3e 70 35 26 4f 50 46 4c 41 47   (pOp->p5&OPFLAG
12260 5f 43 4c 45 41 52 43 41 43 48 45 29 21 3d 30 20  _CLEARCACHE)!=0 
12270 29 7b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e  ){.    if( pC->n
12280 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20  ullRow ){.      
12290 69 66 28 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a  if( pCrsr==0 ){.
122a0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
122b0 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
122c0 65 67 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20  eg>0 );.        
122d0 70 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d  pReg = &aMem[pC-
122e0 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d  >pseudoTableReg]
122f0 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
12300 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20  ( pReg->flags & 
12310 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20  MEM_Blob );.    
12320 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
12330 73 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b 0a  sValid(pReg) );.
12340 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c          pC->payl
12350 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73 7a  oadSize = pC->sz
12360 52 6f 77 20 3d 20 61 76 61 69 6c 20 3d 20 70 52  Row = avail = pR
12370 65 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70  eg->n;.        p
12380 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 70  C->aRow = (u8*)p
12390 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65  Reg->z;.      }e
123a0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 4d 65 6d  lse{.        Mem
123b0 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65 73  SetTypeFlag(pDes
123c0 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
123d0 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
123e0 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20  lumn_out;.      
123f0 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
12400 20 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72     assert( pCrsr
12410 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 43   );.      if( pC
12420 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a  ->isTable==0 ){.
12430 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
12440 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
12450 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29  orIsValid(pCrsr)
12460 20 29 3b 0a 20 20 20 20 20 20 20 20 56 56 41 5f   );.        VVA_
12470 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74  ONLY(rc =) sqlit
12480 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
12490 43 72 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69  Crsr, &payloadSi
124a0 7a 65 36 34 29 3b 0a 20 20 20 20 20 20 20 20 61  ze64);.        a
124b0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
124c0 45 5f 4f 4b 20 29 3b 20 2f 2a 20 54 72 75 65 20  E_OK ); /* True 
124d0 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f  because of Curso
124e0 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61  rMoveto() call a
124f0 62 6f 76 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  bove */.        
12500 2f 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 50  /* sqlite3BtreeP
12510 61 72 73 65 43 65 6c 6c 50 74 72 28 29 20 75 73  arseCellPtr() us
12520 65 73 20 67 65 74 56 61 72 69 6e 74 33 32 28 29  es getVarint32()
12530 20 74 6f 20 65 78 74 72 61 63 74 20 74 68 65 0a   to extract the.
12540 20 20 20 20 20 20 20 20 2a 2a 20 70 61 79 6c 6f          ** paylo
12550 61 64 20 73 69 7a 65 2c 20 73 6f 20 69 74 20 69  ad size, so it i
12560 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72  s impossible for
12570 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 74   payloadSize64 t
12580 6f 20 62 65 0a 20 20 20 20 20 20 20 20 2a 2a 20  o be.        ** 
12590 6c 61 72 67 65 72 20 74 68 61 6e 20 33 32 20 62  larger than 32 b
125a0 69 74 73 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  its. */.        
125b0 61 73 73 65 72 74 28 20 28 70 61 79 6c 6f 61 64  assert( (payload
125c0 53 69 7a 65 36 34 20 26 20 53 51 4c 49 54 45 5f  Size64 & SQLITE_
125d0 4d 41 58 5f 55 33 32 29 3d 3d 28 75 36 34 29 70  MAX_U32)==(u64)p
125e0 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 29 3b 0a  ayloadSize64 );.
125f0 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77          pC->aRow
12600 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b   = sqlite3BtreeK
12610 65 79 46 65 74 63 68 28 70 43 72 73 72 2c 20 26  eyFetch(pCrsr, &
12620 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 20 20  avail);.        
12630 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
12640 3d 20 28 75 33 32 29 70 61 79 6c 6f 61 64 53 69  = (u32)payloadSi
12650 7a 65 36 34 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ze64;.      }els
12660 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  e{.        asser
12670 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
12680 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72  ursorIsValid(pCr
12690 73 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 56  sr) );.        V
126a0 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71  VA_ONLY(rc =) sq
126b0 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 53 69  lite3BtreeDataSi
126c0 7a 65 28 70 43 72 73 72 2c 20 26 70 43 2d 3e 70  ze(pCrsr, &pC->p
126d0 61 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20  ayloadSize);.   
126e0 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d       assert( rc=
126f0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20  =SQLITE_OK );   
12700 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63 61  /* DataSize() ca
12710 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20  nnot fail */.   
12720 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20       pC->aRow = 
12730 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
12740 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76  Fetch(pCrsr, &av
12750 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ail);.      }.  
12760 20 20 20 20 61 73 73 65 72 74 28 20 61 76 61 69      assert( avai
12770 6c 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a 20  l<=65536 );  /* 
12780 4d 61 78 69 6d 75 6d 20 70 61 67 65 20 73 69 7a  Maximum page siz
12790 65 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20 20  e is 64KiB */.  
127a0 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c      if( pC->payl
127b0 6f 61 64 53 69 7a 65 20 3c 3d 20 28 75 33 32 29  oadSize <= (u32)
127c0 61 76 61 69 6c 20 29 7b 0a 20 20 20 20 20 20 20  avail ){.       
127d0 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 70 43 2d   pC->szRow = pC-
127e0 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20  >payloadSize;.  
127f0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
12800 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61     pC->szRow = a
12810 76 61 69 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20  vail;.      }.  
12820 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c      if( pC->payl
12830 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64  oadSize > (u32)d
12840 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
12850 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
12860 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 74  {.        goto t
12870 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20 7d 0a  oo_big;.      }.
12880 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61      }.    pC->ca
12890 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63  cheStatus = p->c
128a0 61 63 68 65 43 74 72 3b 0a 20 20 20 20 70 43 2d  acheCtr;.    pC-
128b0 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20 67 65  >iHdrOffset = ge
128c0 74 56 61 72 69 6e 74 33 32 28 70 43 2d 3e 61 52  tVarint32(pC->aR
128d0 6f 77 2c 20 6f 66 66 73 65 74 29 3b 0a 20 20 20  ow, offset);.   
128e0 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20   pC->nHdrParsed 
128f0 3d 20 30 3b 0a 20 20 20 20 61 4f 66 66 73 65 74  = 0;.    aOffset
12900 5b 30 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 20 20  [0] = offset;.  
12910 20 20 69 66 28 20 61 76 61 69 6c 3c 6f 66 66 73    if( avail<offs
12920 65 74 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 70  et ){.      /* p
12930 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74  C->aRow does not
12940 20 68 61 76 65 20 74 6f 20 68 6f 6c 64 20 74 68   have to hold th
12950 65 20 65 6e 74 69 72 65 20 72 6f 77 2c 20 62 75  e entire row, bu
12960 74 20 69 74 20 64 6f 65 73 20 61 74 20 6c 65 61  t it does at lea
12970 73 74 0a 20 20 20 20 20 20 2a 2a 20 6e 65 65 64  st.      ** need
12980 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68 65   to cover the he
12990 61 64 65 72 20 6f 66 20 74 68 65 20 72 65 63 6f  ader of the reco
129a0 72 64 2e 20 20 49 66 20 70 43 2d 3e 61 52 6f 77  rd.  If pC->aRow
129b0 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69   does not contai
129c0 6e 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63  n.      ** the c
129d0 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72 2c 20  omplete header, 
129e0 74 68 65 6e 20 73 65 74 20 69 74 20 74 6f 20 7a  then set it to z
129f0 65 72 6f 2c 20 66 6f 72 63 69 6e 67 20 74 68 65  ero, forcing the
12a00 20 68 65 61 64 65 72 20 74 6f 20 62 65 0a 20 20   header to be.  
12a10 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c      ** dynamical
12a20 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 2a 2f  ly allocated. */
12a30 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20  .      pC->aRow 
12a40 3d 20 30 3b 0a 20 20 20 20 20 20 70 43 2d 3e 73  = 0;.      pC->s
12a50 7a 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  zRow = 0;.    }.
12a60 0a 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  .    /* Make sur
12a70 65 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61  e a corrupt data
12a80 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69 76  base has not giv
12a90 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69 7a  en us an oversiz
12aa0 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20 2a 2a  e header..    **
12ab0 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f 20   Do this now to 
12ac0 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73 69 7a  avoid an oversiz
12ad0 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
12ae0 69 6f 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ion..    **.    
12af0 2a 2a 20 54 79 70 65 20 65 6e 74 72 69 65 73 20  ** Type entries 
12b00 63 61 6e 20 62 65 20 62 65 74 77 65 65 6e 20 31  can be between 1
12b10 20 61 6e 64 20 35 20 62 79 74 65 73 20 65 61 63   and 5 bytes eac
12b20 68 2e 20 20 42 75 74 20 34 20 61 6e 64 20 35 20  h.  But 4 and 5 
12b30 62 79 74 65 0a 20 20 20 20 2a 2a 20 74 79 70 65  byte.    ** type
12b40 73 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64 61  s use so much da
12b50 74 61 20 73 70 61 63 65 20 74 68 61 74 20 74 68  ta space that th
12b60 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20  ere can only be 
12b70 34 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a 20  4096 and 32 of. 
12b80 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70     ** them, resp
12b90 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74 68  ectively.  So th
12ba0 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65 72  e maximum header
12bb0 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73 20   length results 
12bc0 66 72 6f 6d 20 61 0a 20 20 20 20 2a 2a 20 33 2d  from a.    ** 3-
12bd0 62 79 74 65 20 74 79 70 65 20 66 6f 72 20 65 61  byte type for ea
12be0 63 68 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75  ch of the maximu
12bf0 6d 20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75 6d  m of 32768 colum
12c00 6e 73 20 70 6c 75 73 20 74 68 72 65 65 0a 20 20  ns plus three.  
12c10 20 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73    ** extra bytes
12c20 20 66 6f 72 20 74 68 65 20 68 65 61 64 65 72 20   for the header 
12c30 6c 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20  length itself.  
12c40 33 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38  32768*3 + 3 = 98
12c50 33 30 37 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  307..    */.    
12c60 69 66 28 20 6f 66 66 73 65 74 20 3e 20 39 38 33  if( offset > 983
12c70 30 37 20 7c 7c 20 6f 66 66 73 65 74 20 3e 20 70  07 || offset > p
12c80 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 29  C->payloadSize )
12c90 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
12ca0 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
12cb0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f  ;.      goto op_
12cc0 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20  column_error;.  
12cd0 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61    }.  }..  /* Ma
12ce0 6b 65 20 73 75 72 65 20 61 74 20 6c 65 61 73 74  ke sure at least
12cf0 20 74 68 65 20 66 69 72 73 74 20 70 32 2b 31 20   the first p2+1 
12d00 65 6e 74 72 69 65 73 20 6f 66 20 74 68 65 20 68  entries of the h
12d10 65 61 64 65 72 20 68 61 76 65 20 62 65 65 6e 0a  eader have been.
12d20 20 20 2a 2a 20 70 61 72 73 65 64 20 61 6e 64 20    ** parsed and 
12d30 76 61 6c 69 64 20 69 6e 66 6f 72 6d 61 74 69 6f  valid informatio
12d40 6e 20 69 73 20 69 6e 20 61 4f 66 66 73 65 74 5b  n is in aOffset[
12d50 5d 20 61 6e 64 20 61 54 79 70 65 5b 5d 2e 0a 20  ] and aType[].. 
12d60 20 2a 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48   */.  if( pC->nH
12d70 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a  drParsed<=p2 ){.
12d80 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
12d90 69 73 20 6d 6f 72 65 20 68 65 61 64 65 72 20 61  is more header a
12da0 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 61 72  vailable for par
12db0 73 69 6e 67 20 69 6e 20 74 68 65 20 72 65 63 6f  sing in the reco
12dc0 72 64 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20 74  rd, try.    ** t
12dd0 6f 20 65 78 74 72 61 63 74 20 61 64 64 69 74 69  o extract additi
12de0 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75 70 20 74  onal fields up t
12df0 68 72 6f 75 67 68 20 74 68 65 20 70 32 2b 31 2d  hrough the p2+1-
12e00 74 68 20 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f  th field .    */
12e10 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 48 64  .    if( pC->iHd
12e20 72 4f 66 66 73 65 74 3c 61 4f 66 66 73 65 74 5b  rOffset<aOffset[
12e30 30 5d 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d  0] ){.      /* M
12e40 61 6b 65 20 73 75 72 65 20 7a 44 61 74 61 20 70  ake sure zData p
12e50 6f 69 6e 74 73 20 74 6f 20 65 6e 6f 75 67 68 20  oints to enough 
12e60 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  of the record to
12e70 20 63 6f 76 65 72 20 74 68 65 20 68 65 61 64 65   cover the heade
12e80 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  r. */.      if( 
12e90 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20  pC->aRow==0 ){. 
12ea0 20 20 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73         memset(&s
12eb0 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73  Mem, 0, sizeof(s
12ec0 4d 65 6d 29 29 3b 0a 20 20 20 20 20 20 20 20 72  Mem));.        r
12ed0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
12ee0 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73  emFromBtree(pCrs
12ef0 72 2c 20 30 2c 20 61 4f 66 66 73 65 74 5b 30 5d  r, 0, aOffset[0]
12f00 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
12f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f20 20 20 20 20 20 20 20 20 21 70 43 2d 3e 69 73 54          !pC->isT
12f30 61 62 6c 65 2c 20 26 73 4d 65 6d 29 3b 0a 20 20  able, &sMem);.  
12f40 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
12f50 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
12f60 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
12f70 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  umn_error;.     
12f80 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7a 44 61     }.        zDa
12f90 74 61 20 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a  ta = (u8*)sMem.z
12fa0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
12fb0 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 70         zData = p
12fc0 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d  C->aRow;.      }
12fd0 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c  .  .      /* Fil
12fe0 6c 20 69 6e 20 61 54 79 70 65 5b 69 5d 20 61 6e  l in aType[i] an
12ff0 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c  d aOffset[i] val
13000 75 65 73 20 74 68 72 6f 75 67 68 20 74 68 65 20  ues through the 
13010 70 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a  p2-th field. */.
13020 20 20 20 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48        i = pC->nH
13030 64 72 50 61 72 73 65 64 3b 0a 20 20 20 20 20 20  drParsed;.      
13040 6f 66 66 73 65 74 20 3d 20 61 4f 66 66 73 65 74  offset = aOffset
13050 5b 69 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20  [i];.      zHdr 
13060 3d 20 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48  = zData + pC->iH
13070 64 72 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20  drOffset;.      
13080 7a 45 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20  zEndHdr = zData 
13090 2b 20 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20  + aOffset[0];.  
130a0 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 3d 70      assert( i<=p
130b0 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64  2 && zHdr<zEndHd
130c0 72 20 29 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20  r );.      do{. 
130d0 20 20 20 20 20 20 20 69 66 28 20 7a 48 64 72 5b         if( zHdr[
130e0 30 5d 3c 30 78 38 30 20 29 7b 0a 20 20 20 20 20  0]<0x80 ){.     
130f0 20 20 20 20 20 74 20 3d 20 7a 48 64 72 5b 30 5d       t = zHdr[0]
13100 3b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72  ;.          zHdr
13110 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  ++;.        }els
13120 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64  e{.          zHd
13130 72 20 2b 3d 20 73 71 6c 69 74 65 33 47 65 74 56  r += sqlite3GetV
13140 61 72 69 6e 74 33 32 28 7a 48 64 72 2c 20 26 74  arint32(zHdr, &t
13150 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
13160 20 20 20 20 20 61 54 79 70 65 5b 69 5d 20 3d 20       aType[i] = 
13170 74 3b 0a 20 20 20 20 20 20 20 20 73 7a 46 69 65  t;.        szFie
13180 6c 64 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ld = sqlite3Vdbe
13190 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29  SerialTypeLen(t)
131a0 3b 0a 20 20 20 20 20 20 20 20 6f 66 66 73 65 74  ;.        offset
131b0 20 2b 3d 20 73 7a 46 69 65 6c 64 3b 0a 20 20 20   += szField;.   
131c0 20 20 20 20 20 69 66 28 20 6f 66 66 73 65 74 3c       if( offset<
131d0 73 7a 46 69 65 6c 64 20 29 7b 20 20 2f 2a 20 54  szField ){  /* T
131e0 72 75 65 20 69 66 20 6f 66 66 73 65 74 20 6f 76  rue if offset ov
131f0 65 72 66 6c 6f 77 73 20 2a 2f 0a 20 20 20 20 20  erflows */.     
13200 20 20 20 20 20 7a 48 64 72 20 3d 20 26 7a 45 6e       zHdr = &zEn
13210 64 48 64 72 5b 31 5d 3b 20 20 2f 2a 20 46 6f 72  dHdr[1];  /* For
13220 63 65 73 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ces SQLITE_CORRU
13230 50 54 20 72 65 74 75 72 6e 20 62 65 6c 6f 77 20  PT return below 
13240 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  */.          bre
13250 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ak;.        }.  
13260 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20        i++;.     
13270 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20     aOffset[i] = 
13280 6f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7d 77  offset;.      }w
13290 68 69 6c 65 28 20 69 3c 3d 70 32 20 26 26 20 7a  hile( i<=p2 && z
132a0 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 20  Hdr<zEndHdr );. 
132b0 20 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72       pC->nHdrPar
132c0 73 65 64 20 3d 20 69 3b 0a 20 20 20 20 20 20 70  sed = i;.      p
132d0 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20  C->iHdrOffset = 
132e0 28 75 33 32 29 28 7a 48 64 72 20 2d 20 7a 44 61  (u32)(zHdr - zDa
132f0 74 61 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  ta);.      if( p
13300 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20  C->aRow==0 ){.  
13310 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
13320 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65  eMemRelease(&sMe
13330 6d 29 3b 0a 20 20 20 20 20 20 20 20 73 4d 65 6d  m);.        sMem
13340 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  .flags = MEM_Nul
13350 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20  l;.      }.  .  
13360 20 20 20 20 2f 2a 20 49 66 20 77 65 20 68 61 76      /* If we hav
13370 65 20 72 65 61 64 20 6d 6f 72 65 20 68 65 61 64  e read more head
13380 65 72 20 64 61 74 61 20 74 68 61 6e 20 77 61 73  er data than was
13390 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
133a0 65 20 68 65 61 64 65 72 2c 0a 20 20 20 20 20 20  e header,.      
133b0 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64  ** or if the end
133c0 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69 65   of the last fie
133d0 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20 62 65  ld appears to be
133e0 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66   past the end of
133f0 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 72 65   the.      ** re
13400 63 6f 72 64 2c 20 6f 72 20 69 66 20 74 68 65 20  cord, or if the 
13410 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20  end of the last 
13420 66 69 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f  field appears to
13430 20 62 65 20 62 65 66 6f 72 65 20 74 68 65 20 65   be before the e
13440 6e 64 0a 20 20 20 20 20 20 2a 2a 20 6f 66 20 74  nd.      ** of t
13450 68 65 20 72 65 63 6f 72 64 20 28 77 68 65 6e 20  he record (when 
13460 61 6c 6c 20 66 69 65 6c 64 73 20 70 72 65 73 65  all fields prese
13470 6e 74 29 2c 20 74 68 65 6e 20 77 65 20 6d 75 73  nt), then we mus
13480 74 20 62 65 20 64 65 61 6c 69 6e 67 20 0a 20 20  t be dealing .  
13490 20 20 20 20 2a 2a 20 77 69 74 68 20 61 20 63 6f      ** with a co
134a0 72 72 75 70 74 20 64 61 74 61 62 61 73 65 2e 0a  rrupt database..
134b0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
134c0 66 28 20 28 7a 48 64 72 20 3e 20 7a 45 6e 64 48  f( (zHdr > zEndH
134d0 64 72 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 6f  dr).       || (o
134e0 66 66 73 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c  ffset > pC->payl
134f0 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20 20  oadSize).       
13500 7c 7c 20 28 7a 48 64 72 3d 3d 7a 45 6e 64 48 64  || (zHdr==zEndHd
13510 72 20 26 26 20 6f 66 66 73 65 74 21 3d 70 43 2d  r && offset!=pC-
13520 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20  >payloadSize).  
13530 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72      ){.        r
13540 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
13550 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20  PT_BKPT;.       
13560 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
13570 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
13580 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20     }..    /* If 
13590 61 66 74 65 72 20 74 72 79 69 6e 67 20 74 6f 20  after trying to 
135a0 65 78 74 72 61 20 6e 65 77 20 65 6e 74 72 69 65  extra new entrie
135b0 73 20 66 72 6f 6d 20 74 68 65 20 68 65 61 64 65  s from the heade
135c0 72 2c 20 6e 48 64 72 50 61 72 73 65 64 20 69 73  r, nHdrParsed is
135d0 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f  .    ** still no
135e0 74 20 75 70 20 74 6f 20 70 32 2c 20 74 68 61 74  t up to p2, that
135f0 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
13600 72 65 63 6f 72 64 20 68 61 73 20 66 65 77 65 72  record has fewer
13610 20 74 68 61 6e 20 70 32 0a 20 20 20 20 2a 2a 20   than p2.    ** 
13620 63 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20 74 68 65  columns.  So the
13630 20 72 65 73 75 6c 74 20 77 69 6c 6c 20 62 65 20   result will be 
13640 65 69 74 68 65 72 20 74 68 65 20 64 65 66 61 75  either the defau
13650 6c 74 20 76 61 6c 75 65 20 6f 72 20 61 20 4e 55  lt value or a NU
13660 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  LL..    */.    i
13670 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65  f( pC->nHdrParse
13680 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 20 20 69  d<=p2 ){.      i
13690 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
136a0 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20  P4_MEM ){.      
136b0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
136c0 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73  ShallowCopy(pDes
136d0 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c  t, pOp->p4.pMem,
136e0 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20   MEM_Static);.  
136f0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
13700 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
13710 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c  g(pDest, MEM_Nul
13720 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  l);.      }.    
13730 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
13740 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  _out;.    }.  }.
13750 0a 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68  .  /* Extract th
13760 65 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68  e content for th
13770 65 20 70 32 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e  e p2+1-th column
13780 2e 20 20 43 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f  .  Control can o
13790 6e 6c 79 0a 20 20 2a 2a 20 72 65 61 63 68 20 74  nly.  ** reach t
137a0 68 69 73 20 70 6f 69 6e 74 20 69 66 20 61 4f 66  his point if aOf
137b0 66 73 65 74 5b 70 32 5d 2c 20 61 4f 66 66 73 65  fset[p2], aOffse
137c0 74 5b 70 32 2b 31 5d 2c 20 61 6e 64 20 61 54 79  t[p2+1], and aTy
137d0 70 65 5b 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20  pe[p2] are.  ** 
137e0 61 6c 6c 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a  all valid..  */.
137f0 20 20 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d    assert( p2<pC-
13800 3e 6e 48 64 72 50 61 72 73 65 64 20 29 3b 0a 20  >nHdrParsed );. 
13810 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
13820 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 61 73 73 65  ITE_OK );.  asse
13830 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43  rt( sqlite3VdbeC
13840 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74  heckMemInvariant
13850 73 28 70 44 65 73 74 29 20 29 3b 0a 20 20 69 66  s(pDest) );.  if
13860 28 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66  ( pC->szRow>=aOf
13870 66 73 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20 20  fset[p2+1] ){.  
13880 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65    /* This is the
13890 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65   common case whe
138a0 72 65 20 74 68 65 20 64 65 73 69 72 65 64 20 63  re the desired c
138b0 6f 6e 74 65 6e 74 20 66 69 74 73 20 6f 6e 20 74  ontent fits on t
138c0 68 65 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20 20  he original.    
138d0 2a 2a 20 70 61 67 65 20 2d 20 77 68 65 72 65 20  ** page - where 
138e0 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e  the content is n
138f0 6f 74 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c 6f  ot on an overflo
13900 77 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 56 64  w page */.    Vd
13910 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 44 65  beMemRelease(pDe
13920 73 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  st);.    sqlite3
13930 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 70 43  VdbeSerialGet(pC
13940 2d 3e 61 52 6f 77 2b 61 4f 66 66 73 65 74 5b 70  ->aRow+aOffset[p
13950 32 5d 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20 70  2], aType[p2], p
13960 44 65 73 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  Dest);.  }else{.
13970 20 20 20 20 2f 2a 20 54 68 69 73 20 62 72 61 6e      /* This bran
13980 63 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20  ch happens only 
13990 77 68 65 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20  when content is 
139a0 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  on overflow page
139b0 73 20 2a 2f 0a 20 20 20 20 74 20 3d 20 61 54 79  s */.    t = aTy
139c0 70 65 5b 70 32 5d 3b 0a 20 20 20 20 69 66 28 20  pe[p2];.    if( 
139d0 28 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46  ((pOp->p5 & (OPF
139e0 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50  LAG_LENGTHARG|OP
139f0 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 29  FLAG_TYPEOFARG))
13a00 21 3d 30 0a 20 20 20 20 20 20 20 20 20 20 26 26  !=0.          &&
13a10 20 28 28 74 3e 3d 31 32 20 26 26 20 28 74 26 31   ((t>=12 && (t&1
13a20 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70  )==0) || (pOp->p
13a30 35 20 26 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  5 & OPFLAG_TYPEO
13a40 46 41 52 47 29 21 3d 30 29 29 0a 20 20 20 20 20  FARG)!=0)).     
13a50 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69 74 65  || (len = sqlite
13a60 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
13a70 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20 29 7b  en(t))==0.    ){
13a80 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e  .      /* Conten
13a90 74 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74 20  t is irrelevant 
13aa0 66 6f 72 20 74 68 65 20 74 79 70 65 6f 66 28 29  for the typeof()
13ab0 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 66 6f   function and fo
13ac0 72 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 6c  r.      ** the l
13ad0 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f  ength(X) functio
13ae0 6e 20 69 66 20 58 20 69 73 20 61 20 62 6c 6f 62  n if X is a blob
13af0 2e 20 20 53 6f 20 77 65 20 6d 69 67 68 74 20 61  .  So we might a
13b00 73 20 77 65 6c 6c 20 75 73 65 0a 20 20 20 20 20  s well use.     
13b10 20 2a 2a 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e   ** bogus conten
13b20 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 72 65  t rather than re
13b30 61 64 69 6e 67 20 63 6f 6e 74 65 6e 74 20 66 72  ading content fr
13b40 6f 6d 20 64 69 73 6b 2e 20 20 4e 55 4c 4c 20 77  om disk.  NULL w
13b50 6f 72 6b 73 0a 20 20 20 20 20 20 2a 2a 20 66 6f  orks.      ** fo
13b60 72 20 74 65 78 74 20 61 6e 64 20 62 6c 6f 62 20  r text and blob 
13b70 61 6e 64 20 77 68 61 74 65 76 65 72 20 69 73 20  and whatever is 
13b80 69 6e 20 74 68 65 20 70 61 79 6c 6f 61 64 53 69  in the payloadSi
13b90 7a 65 36 34 20 76 61 72 69 61 62 6c 65 0a 20 20  ze64 variable.  
13ba0 20 20 20 20 2a 2a 20 77 69 6c 6c 20 77 6f 72 6b      ** will work
13bb0 20 66 6f 72 20 65 76 65 72 79 74 68 69 6e 67 20   for everything 
13bc0 65 6c 73 65 2e 20 20 43 6f 6e 74 65 6e 74 20 69  else.  Content i
13bd0 73 20 61 6c 73 6f 20 69 72 72 65 6c 65 76 61 6e  s also irrelevan
13be0 74 20 69 66 0a 20 20 20 20 20 20 2a 2a 20 74 68  t if.      ** th
13bf0 65 20 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 74 68  e content length
13c00 20 69 73 20 30 2e 20 2a 2f 0a 20 20 20 20 20 20   is 0. */.      
13c10 7a 44 61 74 61 20 3d 20 74 3c 3d 31 33 20 3f 20  zData = t<=13 ? 
13c20 28 75 38 2a 29 26 70 61 79 6c 6f 61 64 53 69 7a  (u8*)&payloadSiz
13c30 65 36 34 20 3a 20 30 3b 0a 20 20 20 20 20 20 73  e64 : 0;.      s
13c40 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b  Mem.zMalloc = 0;
13c50 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
13c60 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20    memset(&sMem, 
13c70 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29  0, sizeof(sMem))
13c80 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
13c90 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 4d 65 6d  dbeMemMove(&sMem
13ca0 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  , pDest);.      
13cb0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
13cc0 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72  MemFromBtree(pCr
13cd0 73 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c  sr, aOffset[p2],
13ce0 20 6c 65 6e 2c 20 21 70 43 2d 3e 69 73 54 61 62   len, !pC->isTab
13cf0 6c 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  le,.            
13d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d10 20 20 20 20 20 20 20 26 73 4d 65 6d 29 3b 0a 20         &sMem);. 
13d20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
13d30 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
13d40 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
13d50 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
13d60 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 75        zData = (u
13d70 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d  8*)sMem.z;.    }
13d80 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
13d90 53 65 72 69 61 6c 47 65 74 28 7a 44 61 74 61 2c  SerialGet(zData,
13da0 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20   t, pDest);.    
13db0 2f 2a 20 49 66 20 77 65 20 64 79 6e 61 6d 69 63  /* If we dynamic
13dc0 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
13dd0 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65  pace to hold the
13de0 20 64 61 74 61 20 28 69 6e 20 74 68 65 0a 20 20   data (in the.  
13df0 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
13e00 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 29 20 63  MemFromBtree() c
13e10 61 6c 6c 20 61 62 6f 76 65 29 20 74 68 65 6e 20  all above) then 
13e20 74 72 61 6e 73 66 65 72 20 63 6f 6e 74 72 6f 6c  transfer control
13e30 20 6f 66 20 74 68 61 74 0a 20 20 20 20 2a 2a 20   of that.    ** 
13e40 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
13e50 63 61 74 65 64 20 73 70 61 63 65 20 6f 76 65 72  cated space over
13e60 20 74 6f 20 74 68 65 20 70 44 65 73 74 20 73 74   to the pDest st
13e70 72 75 63 74 75 72 65 2e 0a 20 20 20 20 2a 2a 20  ructure..    ** 
13e80 54 68 69 73 20 70 72 65 76 65 6e 74 73 20 61 20  This prevents a 
13e90 6d 65 6d 6f 72 79 20 63 6f 70 79 2e 20 2a 2f 0a  memory copy. */.
13ea0 20 20 20 20 69 66 28 20 73 4d 65 6d 2e 7a 4d 61      if( sMem.zMa
13eb0 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 20 20 61 73  lloc ){.      as
13ec0 73 65 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73 4d  sert( sMem.z==sM
13ed0 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20  em.zMalloc );.  
13ee0 20 20 20 20 61 73 73 65 72 74 28 20 56 64 62 65      assert( Vdbe
13ef0 4d 65 6d 44 79 6e 61 6d 69 63 28 70 44 65 73 74  MemDynamic(pDest
13f00 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73  )==0 );.      as
13f10 73 65 72 74 28 20 28 70 44 65 73 74 2d 3e 66 6c  sert( (pDest->fl
13f20 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c  ags & (MEM_Blob|
13f30 4d 45 4d 5f 53 74 72 29 29 3d 3d 30 20 7c 7c 20  MEM_Str))==0 || 
13f40 70 44 65 73 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a  pDest->z==sMem.z
13f50 20 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d   );.      pDest-
13f60 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f  >flags &= ~(MEM_
13f70 45 70 68 65 6d 7c 4d 45 4d 5f 53 74 61 74 69 63  Ephem|MEM_Static
13f80 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  );.      pDest->
13f90 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72  flags |= MEM_Ter
13fa0 6d 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  m;.      pDest->
13fb0 7a 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20  z = sMem.z;.    
13fc0 20 20 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63    pDest->zMalloc
13fd0 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 3b   = sMem.zMalloc;
13fe0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 44 65  .    }.  }.  pDe
13ff0 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  st->enc = encodi
14000 6e 67 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  ng;..op_column_o
14010 75 74 3a 0a 20 20 44 65 65 70 68 65 6d 65 72 61  ut:.  Deephemera
14020 6c 69 7a 65 28 70 44 65 73 74 29 3b 0a 6f 70 5f  lize(pDest);.op_
14030 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3a 0a 20 20  column_error:.  
14040 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
14050 49 5a 45 28 70 44 65 73 74 29 3b 0a 20 20 52 45  IZE(pDest);.  RE
14060 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
14070 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20  ->p3, pDest);.  
14080 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
14090 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50 31  ode: Affinity P1
140a0 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
140b0 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74 79  nopsis: affinity
140c0 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a  (r[P1@P2]).**.**
140d0 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69 65   Apply affinitie
140e0 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66 20  s to a range of 
140f0 50 32 20 72 65 67 69 73 74 65 72 73 20 73 74 61  P2 registers sta
14100 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a  rting with P1..*
14110 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74 72  *.** P4 is a str
14120 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63  ing that is P2 c
14130 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20  haracters long. 
14140 54 68 65 20 6e 74 68 20 63 68 61 72 61 63 74 65  The nth characte
14150 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69  r of the.** stri
14160 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65  ng indicates the
14170 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   column affinity
14180 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20   that should be 
14190 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68  used for the nth
141a0 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  .** memory cell 
141b0 69 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f  in the range..*/
141c0 0a 63 61 73 65 20 4f 50 5f 41 66 66 69 6e 69 74  .case OP_Affinit
141d0 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  y: {.  const cha
141e0 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20  r *zAffinity;   
141f0 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
14200 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f  to be applied */
14210 0a 20 20 63 68 61 72 20 63 41 66 66 3b 20 20 20  .  char cAff;   
14220 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
14230 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65   single characte
14240 72 20 6f 66 20 61 66 66 69 6e 69 74 79 20 2a 2f  r of affinity */
14250 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20  ..  zAffinity = 
14260 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73  pOp->p4.z;.  ass
14270 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 21 3d  ert( zAffinity!=
14280 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a  0 );.  assert( z
14290 41 66 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32  Affinity[pOp->p2
142a0 5d 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d  ]==0 );.  pIn1 =
142b0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
142c0 0a 20 20 77 68 69 6c 65 28 20 28 63 41 66 66 20  .  while( (cAff 
142d0 3d 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29  = *(zAffinity++)
142e0 29 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  )!=0 ){.    asse
142f0 72 74 28 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e  rt( pIn1 <= &p->
14300 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  aMem[(p->nMem-p-
14310 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20  >nCursor)] );.  
14320 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
14330 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20  alid(pIn1) );.  
14340 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
14350 70 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e 63 6f  pIn1, cAff, enco
14360 64 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b  ding);.    pIn1+
14370 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  +;.  }.  break;.
14380 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61  }../* Opcode: Ma
14390 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32 20 50  keRecord P1 P2 P
143a0 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
143b0 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65 63 28  is: r[P3]=mkrec(
143c0 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  r[P1@P2]).**.** 
143d0 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69 73  Convert P2 regis
143e0 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  ters beginning w
143f0 69 74 68 20 50 31 20 69 6e 74 6f 20 74 68 65 20  ith P1 into the 
14400 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a  [record format].
14410 2a 2a 20 75 73 65 20 61 73 20 61 20 64 61 74 61  ** use as a data
14420 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61 74   record in a dat
14430 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 61  abase table or a
14440 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e  s a key.** in an
14450 20 69 6e 64 65 78 2e 20 20 54 68 65 20 4f 50 5f   index.  The OP_
14460 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61  Column opcode ca
14470 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72 65 63  n decode the rec
14480 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a  ord later..**.**
14490 20 50 34 20 6d 61 79 20 62 65 20 61 20 73 74 72   P4 may be a str
144a0 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63  ing that is P2 c
144b0 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20  haracters long. 
144c0 20 54 68 65 20 6e 74 68 20 63 68 61 72 61 63 74   The nth charact
144d0 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72  er of the.** str
144e0 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68  ing indicates th
144f0 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  e column affinit
14500 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65  y that should be
14510 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74   used for the nt
14520 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68  h.** field of th
14530 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a  e index key..**.
14540 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66  ** The mapping f
14550 72 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f  rom character to
14560 20 61 66 66 69 6e 69 74 79 20 69 73 20 67 69 76   affinity is giv
14570 65 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54 45  en by the SQLITE
14580 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20  _AFF_.** macros 
14590 64 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74  defined in sqlit
145a0 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66  eInt.h..**.** If
145b0 20 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e   P4 is NULL then
145c0 20 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64   all index field
145d0 73 20 68 61 76 65 20 74 68 65 20 61 66 66 69 6e  s have the affin
145e0 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73  ity NONE..*/.cas
145f0 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a  e OP_MakeRecord:
14600 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65 63   {.  u8 *zNewRec
14610 6f 72 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ord;        /* A
14620 20 62 75 66 66 65 72 20 74 6f 20 68 6f 6c 64 20   buffer to hold 
14630 74 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 65  the data for the
14640 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20   new record */. 
14650 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20   Mem *pRec;     
14660 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
14670 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75  ew record */.  u
14680 36 34 20 6e 44 61 74 61 3b 20 20 20 20 20 20 20  64 nData;       
14690 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
146a0 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  of bytes of data
146b0 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20   space */.  int 
146c0 6e 48 64 72 3b 20 20 20 20 20 20 20 20 20 20 20  nHdr;           
146d0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
146e0 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20  bytes of header 
146f0 73 70 61 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e  space */.  i64 n
14700 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  Byte;           
14710 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20    /* Data space 
14720 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
14730 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  s record */.  in
14740 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20  t nZero;        
14750 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14760 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20  f zero bytes at 
14770 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72  the end of the r
14780 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecord */.  int n
14790 56 61 72 69 6e 74 3b 20 20 20 20 20 20 20 20 20  Varint;         
147a0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
147b0 79 74 65 73 20 69 6e 20 61 20 76 61 72 69 6e 74  ytes in a varint
147c0 20 2a 2f 0a 20 20 75 33 32 20 73 65 72 69 61 6c   */.  u32 serial
147d0 5f 74 79 70 65 3b 20 20 20 20 20 20 20 2f 2a 20  _type;       /* 
147e0 54 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20  Type field */.  
147f0 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20 20  Mem *pData0;    
14800 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
14810 66 69 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62  field to be comb
14820 69 6e 65 64 20 69 6e 74 6f 20 74 68 65 20 72 65  ined into the re
14830 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  cord */.  Mem *p
14840 4c 61 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Last;           
14850 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64 20 6f   /* Last field o
14860 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  f the record */.
14870 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20    int nField;   
14880 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
14890 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20  er of fields in 
148a0 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
148b0 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b  char *zAffinity;
148c0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66         /* The af
148d0 66 69 6e 69 74 79 20 73 74 72 69 6e 67 20 66 6f  finity string fo
148e0 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  r the record */.
148f0 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61    int file_forma
14900 74 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65  t;       /* File
14910 20 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66   format to use f
14920 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  or encoding */. 
14930 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20   int i;         
14940 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
14950 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63   used in zNewRec
14960 6f 72 64 5b 5d 20 68 65 61 64 65 72 20 2a 2f 0a  ord[] header */.
14970 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20    int j;        
14980 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
14990 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65  e used in zNewRe
149a0 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a  cord[] content *
149b0 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20  /.  int len;    
149c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65             /* Le
149d0 6e 67 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20  ngth of a field 
149e0 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e  */..  /* Assumin
149f0 67 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e  g the record con
14a00 74 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20  tains N fields, 
14a10 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61  the record forma
14a20 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b  t looks.  ** lik
14a30 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a  e this:.  **.  *
14a40 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
14a50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14a60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14a70 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14a80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20  ----------.  ** 
14a90 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79 70  | hdr-size | typ
14aa0 65 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e  e 0 | type 1 | .
14ab0 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20  .. | type N-1 | 
14ac0 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61  data0 | ... | da
14ad0 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d  ta N-1 | .  ** -
14ae0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14af0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14b00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14b10 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14b20 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a  -------.  **.  *
14b30 2a 20 44 61 74 61 28 30 29 20 69 73 20 74 61 6b  * Data(0) is tak
14b40 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  en from register
14b50 20 50 31 2e 20 20 44 61 74 61 28 31 29 20 63 6f   P1.  Data(1) co
14b60 6d 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74 65  mes from registe
14b70 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20  r P1+1.  ** and 
14b80 73 6f 20 66 72 6f 74 68 2e 0a 20 20 2a 2a 0a 20  so froth..  **. 
14b90 20 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66 69   ** Each type fi
14ba0 65 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74 20  eld is a varint 
14bb0 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65  representing the
14bc0 20 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20   serial type of 
14bd0 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73  the .  ** corres
14be0 70 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65  ponding data ele
14bf0 6d 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65  ment (see sqlite
14c00 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28  3VdbeSerialType(
14c10 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72  )). The.  ** hdr
14c20 2d 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61  -size field is a
14c30 6c 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69  lso a varint whi
14c40 63 68 20 69 73 20 74 68 65 20 6f 66 66 73 65 74  ch is the offset
14c50 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
14c60 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20  ing.  ** of the 
14c70 72 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e  record to data0.
14c80 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20  .  */.  nData = 
14c90 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  0;         /* Nu
14ca0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
14cb0 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20   data space */. 
14cc0 20 6e 48 64 72 20 3d 20 30 3b 20 20 20 20 20 20   nHdr = 0;      
14cd0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
14ce0 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72   bytes of header
14cf0 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 5a 65 72   space */.  nZer
14d00 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  o = 0;         /
14d10 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f  * Number of zero
14d20 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e   bytes at the en
14d30 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
14d40 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  */.  nField = pO
14d50 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69  p->p1;.  zAffini
14d60 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  ty = pOp->p4.z;.
14d70 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64    assert( nField
14d80 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20  >0 && pOp->p2>0 
14d90 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c  && pOp->p2+nFiel
14da0 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  d<=(p->nMem-p->n
14db0 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 70  Cursor)+1 );.  p
14dc0 44 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b 6e 46  Data0 = &aMem[nF
14dd0 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20  ield];.  nField 
14de0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61  = pOp->p2;.  pLa
14df0 73 74 20 3d 20 26 70 44 61 74 61 30 5b 6e 46 69  st = &pData0[nFi
14e00 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66  eld-1];.  file_f
14e10 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72  ormat = p->minWr
14e20 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a  iteFileFormat;..
14e30 20 20 2f 2a 20 49 64 65 6e 74 69 66 79 20 74 68    /* Identify th
14e40 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
14e50 72 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  r */.  assert( p
14e60 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c  Op->p3<pOp->p1 |
14e70 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e  | pOp->p3>=pOp->
14e80 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20  p1+pOp->p2 );.  
14e90 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
14ea0 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p3];.  memAbou
14eb0 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
14ec0 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70 6c 79 20  t);..  /* Apply 
14ed0 74 68 65 20 72 65 71 75 65 73 74 65 64 20 61 66  the requested af
14ee0 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c 20 69 6e  finity to all in
14ef0 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61 73 73 65  puts.  */.  asse
14f00 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73  rt( pData0<=pLas
14f10 74 20 29 3b 0a 20 20 69 66 28 20 7a 41 66 66 69  t );.  if( zAffi
14f20 6e 69 74 79 20 29 7b 0a 20 20 20 20 70 52 65 63  nity ){.    pRec
14f30 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 20 20 64   = pData0;.    d
14f40 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66  o{.      applyAf
14f50 66 69 6e 69 74 79 28 70 52 65 63 2b 2b 2c 20 2a  finity(pRec++, *
14f60 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 2c 20 65  (zAffinity++), e
14f70 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20  ncoding);.      
14f80 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74  assert( zAffinit
14f90 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52 65 63 3c  y[0]==0 || pRec<
14fa0 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20 20 7d 77  =pLast );.    }w
14fb0 68 69 6c 65 28 20 7a 41 66 66 69 6e 69 74 79 5b  hile( zAffinity[
14fc0 30 5d 20 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  0] );.  }..  /* 
14fd0 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65  Loop through the
14fe0 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77   elements that w
14ff0 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20  ill make up the 
15000 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65  record to figure
15010 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75  .  ** out how mu
15020 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71 75  ch space is requ
15030 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77  ired for the new
15040 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20   record..  */.  
15050 70 52 65 63 20 3d 20 70 4c 61 73 74 3b 0a 20 20  pRec = pLast;.  
15060 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  do{.    assert( 
15070 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29  memIsValid(pRec)
15080 20 29 3b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74   );.    serial_t
15090 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ype = sqlite3Vdb
150a0 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63  eSerialType(pRec
150b0 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a  , file_format);.
150c0 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65      len = sqlite
150d0 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
150e0 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  en(serial_type);
150f0 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66  .    if( pRec->f
15100 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20  lags & MEM_Zero 
15110 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 44 61  ){.      if( nDa
15120 74 61 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  ta ){.        sq
15130 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61  lite3VdbeMemExpa
15140 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20  ndBlob(pRec);.  
15150 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
15160 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63     nZero += pRec
15170 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20  ->u.nZero;.     
15180 20 20 20 6c 65 6e 20 2d 3d 20 70 52 65 63 2d 3e     len -= pRec->
15190 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 7d  u.nZero;.      }
151a0 0a 20 20 20 20 7d 0a 20 20 20 20 6e 44 61 74 61  .    }.    nData
151b0 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 74 65 73   += len;.    tes
151c0 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74 79  tcase( serial_ty
151d0 70 65 3d 3d 31 32 37 20 29 3b 0a 20 20 20 20 74  pe==127 );.    t
151e0 65 73 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f  estcase( serial_
151f0 74 79 70 65 3d 3d 31 32 38 20 29 3b 0a 20 20 20  type==128 );.   
15200 20 6e 48 64 72 20 2b 3d 20 73 65 72 69 61 6c 5f   nHdr += serial_
15210 74 79 70 65 3c 3d 31 32 37 20 3f 20 31 20 3a 20  type<=127 ? 1 : 
15220 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
15230 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20  (serial_type);. 
15240 20 7d 77 68 69 6c 65 28 20 28 2d 2d 70 52 65 63   }while( (--pRec
15250 29 3e 3d 70 44 61 74 61 30 20 29 3b 0a 0a 20 20  )>=pData0 );..  
15260 2f 2a 20 41 64 64 20 74 68 65 20 69 6e 69 74 69  /* Add the initi
15270 61 6c 20 68 65 61 64 65 72 20 76 61 72 69 6e 74  al header varint
15280 20 61 6e 64 20 74 6f 74 61 6c 20 74 68 65 20 73   and total the s
15290 69 7a 65 20 2a 2f 0a 20 20 74 65 73 74 63 61 73  ize */.  testcas
152a0 65 28 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b 0a  e( nHdr==126 );.
152b0 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64 72    testcase( nHdr
152c0 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66 28 20 6e  ==127 );.  if( n
152d0 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20 20  Hdr<=126 ){.    
152e0 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  /* The common ca
152f0 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20 2b  se */.    nHdr +
15300 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 1;.  }else{.  
15310 20 20 2f 2a 20 52 61 72 65 20 63 61 73 65 20 6f    /* Rare case o
15320 66 20 61 20 72 65 61 6c 6c 79 20 6c 61 72 67 65  f a really large
15330 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 6e   header */.    n
15340 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65 33  Varint = sqlite3
15350 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b  VarintLen(nHdr);
15360 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61  .    nHdr += nVa
15370 72 69 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e 56  rint;.    if( nV
15380 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72  arint<sqlite3Var
15390 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 20 6e  intLen(nHdr) ) n
153a0 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79  Hdr++;.  }.  nBy
153b0 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 3b  te = nHdr+nData;
153c0 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d  .  if( nByte>db-
153d0 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
153e0 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
153f0 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
15400 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65  ;.  }..  /* Make
15410 20 73 75 72 65 20 74 68 65 20 6f 75 74 70 75 74   sure the output
15420 20 72 65 67 69 73 74 65 72 20 68 61 73 20 61 20   register has a 
15430 62 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f  buffer large eno
15440 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20  ugh to store .  
15450 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72  ** the new recor
15460 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72 65  d. The output re
15470 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29  gister (pOp->p3)
15480 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20   is not allowed 
15490 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f  to.  ** be one o
154a0 66 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  f the input regi
154b0 73 74 65 72 73 20 28 62 65 63 61 75 73 65 20 74  sters (because t
154c0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
154d0 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65  l to.  ** sqlite
154e0 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 29 20 63  3VdbeMemGrow() c
154f0 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68 65  ould clobber the
15500 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69 74   value before it
15510 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a   is used)..  */.
15520 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
15530 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28  eMemGrow(pOut, (
15540 69 6e 74 29 6e 42 79 74 65 2c 20 30 29 20 29 7b  int)nByte, 0) ){
15550 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
15560 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63 6f  ;.  }.  zNewReco
15570 72 64 20 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d  rd = (u8 *)pOut-
15580 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20  >z;..  /* Write 
15590 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
155a0 69 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28  i = putVarint32(
155b0 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48 64 72  zNewRecord, nHdr
155c0 29 3b 0a 20 20 6a 20 3d 20 6e 48 64 72 3b 0a 20  );.  j = nHdr;. 
155d0 20 61 73 73 65 72 74 28 20 70 44 61 74 61 30 3c   assert( pData0<
155e0 3d 70 4c 61 73 74 20 29 3b 0a 20 20 70 52 65 63  =pLast );.  pRec
155f0 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 64 6f 7b   = pData0;.  do{
15600 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65  .    serial_type
15610 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
15620 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66  rialType(pRec, f
15630 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20  ile_format);.   
15640 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33   i += putVarint3
15650 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d  2(&zNewRecord[i]
15660 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20  , serial_type); 
15670 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 65             /* se
15680 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 20  rial type */.   
15690 20 6a 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62   j += sqlite3Vdb
156a0 65 53 65 72 69 61 6c 50 75 74 28 26 7a 4e 65 77  eSerialPut(&zNew
156b0 52 65 63 6f 72 64 5b 6a 5d 2c 20 70 52 65 63 2c  Record[j], pRec,
156c0 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 2f   serial_type); /
156d0 2a 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 7d  * content */.  }
156e0 77 68 69 6c 65 28 20 28 2b 2b 70 52 65 63 29 3c  while( (++pRec)<
156f0 3d 70 4c 61 73 74 20 29 3b 0a 20 20 61 73 73 65  =pLast );.  asse
15700 72 74 28 20 69 3d 3d 6e 48 64 72 20 29 3b 0a 20  rt( i==nHdr );. 
15710 20 61 73 73 65 72 74 28 20 6a 3d 3d 6e 42 79 74   assert( j==nByt
15720 65 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  e );..  assert( 
15730 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
15740 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
15750 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
15760 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e  pOut->n = (int)n
15770 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  Byte;.  pOut->fl
15780 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a  ags = MEM_Blob;.
15790 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d 20 30    pOut->xDel = 0
157a0 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b  ;.  if( nZero ){
157b0 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65  .    pOut->u.nZe
157c0 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20  ro = nZero;.    
157d0 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
157e0 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70  EM_Zero;.  }.  p
157f0 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54  Out->enc = SQLIT
15800 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63  E_UTF8;  /* In c
15810 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20  ase the blob is 
15820 65 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20 74  ever converted t
15830 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47 49  o text */.  REGI
15840 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
15850 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44  p3, pOut);.  UPD
15860 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
15870 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
15880 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
15890 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  ount P1 P2 * * *
158a0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
158b0 50 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a  P2]=count().**.*
158c0 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62  * Store the numb
158d0 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61  er of entries (a
158e0 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29  n integer value)
158f0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
15900 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65   index .** opene
15910 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69  d by cursor P1 i
15920 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f  n register P2.*/
15930 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
15940 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a  OMIT_BTREECOUNT.
15950 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b  case OP_Count: {
15960 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
15970 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
15980 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42   i64 nEntry;.  B
15990 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
159a0 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70  .  pCrsr = p->ap
159b0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43  Csr[pOp->p1]->pC
159c0 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
159d0 20 70 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74   pCrsr );.  nEnt
159e0 72 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  ry = 0;  /* Not 
159f0 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73  needed.  Only us
15a00 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ed to silence a 
15a10 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63  warning. */.  rc
15a20 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
15a30 6f 75 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e  ount(pCrsr, &nEn
15a40 74 72 79 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  try);.  pOut->u.
15a50 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72  i = nEntry;.  br
15a60 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
15a70 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70 6f  * Opcode: Savepo
15a80 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  int P1 * * P4 *.
15a90 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65  **.** Open, rele
15aa0 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20  ase or rollback 
15ab0 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e 61  the savepoint na
15ac0 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74 65 72  med by parameter
15ad0 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a   P4, depending.*
15ae0 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f  * on the value o
15af0 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20  f P1. To open a 
15b00 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20 50  new savepoint, P
15b10 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73 65  1==0. To release
15b20 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20   (commit) an.** 
15b30 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69  existing savepoi
15b40 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f  nt, P1==1, or to
15b50 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69   rollback an exi
15b60 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 20  sting savepoint 
15b70 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  P1==2..*/.case O
15b80 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20  P_Savepoint: {. 
15b90 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20   int p1;        
15ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bb0 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31 20   /* Value of P1 
15bc0 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61  operand */.  cha
15bd0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
15be0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15bf0 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69 6e  Name of savepoin
15c00 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65  t */.  int nName
15c10 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
15c20 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  New;.  Savepoint
15c30 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20   *pSavepoint;.  
15c40 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b  Savepoint *pTmp;
15c50 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e  .  int iSavepoin
15c60 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20  t;.  int ii;..  
15c70 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
15c80 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e  zName = pOp->p4.
15c90 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20  z;..  /* Assert 
15ca0 74 68 61 74 20 74 68 65 20 70 31 20 70 61 72 61  that the p1 para
15cb0 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e 20  meter is valid. 
15cc0 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68 65  Also that if the
15cd0 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20  re is no open.  
15ce0 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ** transaction, 
15cf0 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f  then there canno
15d00 74 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f 69  t be any savepoi
15d10 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73  nts. .  */.  ass
15d20 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f  ert( db->pSavepo
15d30 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75  int==0 || db->au
15d40 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20  toCommit==0 );. 
15d50 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56   assert( p1==SAV
15d60 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31  EPOINT_BEGIN||p1
15d70 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
15d80 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49  ASE||p1==SAVEPOI
15d90 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20  NT_ROLLBACK );. 
15da0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61   assert( db->pSa
15db0 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69  vepoint || db->i
15dc0 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
15dd0 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73  point==0 );.  as
15de0 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70  sert( checkSavep
15df0 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b  ointCount(db) );
15e00 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
15e10 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66  sReader );..  if
15e20 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
15e30 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28  BEGIN ){.    if(
15e40 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e   db->nVdbeWrite>
15e50 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20  0 ){.      /* A 
15e60 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61  new savepoint ca
15e70 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 20  nnot be created 
15e80 69 66 20 74 68 65 72 65 20 61 72 65 20 61 63 74  if there are act
15e90 69 76 65 20 77 72 69 74 65 20 0a 20 20 20 20 20  ive write .     
15ea0 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28   ** statements (
15eb0 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77  i.e. open read/w
15ec0 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c  rite incremental
15ed0 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a   blob handles)..
15ee0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73        */.      s
15ef0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
15f00 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
15f10 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61   "cannot open sa
15f20 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20  vepoint - ".    
15f30 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
15f40 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
15f50 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
15f60 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d  LITE_BUSY;.    }
15f70 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d  else{.      nNam
15f80 65 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  e = sqlite3Strle
15f90 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66  n30(zName);..#if
15fa0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
15fb0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
15fc0 20 20 20 20 2f 2a 20 54 68 69 73 20 63 61 6c 6c      /* This call
15fd0 20 69 73 20 4f 6b 20 65 76 65 6e 20 69 66 20 74   is Ok even if t
15fe0 68 69 73 20 73 61 76 65 70 6f 69 6e 74 20 69 73  his savepoint is
15ff0 20 61 63 74 75 61 6c 6c 79 20 61 20 74 72 61 6e   actually a tran
16000 73 61 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a  saction.      **
16010 20 73 61 76 65 70 6f 69 6e 74 20 28 61 6e 64 20   savepoint (and 
16020 74 68 65 72 65 66 6f 72 65 20 73 68 6f 75 6c 64  therefore should
16030 20 6e 6f 74 20 70 72 6f 6d 70 74 20 78 53 61 76   not prompt xSav
16040 65 70 6f 69 6e 74 28 29 29 20 63 61 6c 6c 62 61  epoint()) callba
16050 63 6b 73 2e 0a 20 20 20 20 20 20 2a 2a 20 49 66  cks..      ** If
16060 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73   this is a trans
16070 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
16080 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2c 20 69   being opened, i
16090 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 0a  t is guaranteed.
160a0 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68        ** that th
160b0 65 20 64 62 2d 3e 61 56 54 72 61 6e 73 5b 5d 20  e db->aVTrans[] 
160c0 61 72 72 61 79 20 69 73 20 65 6d 70 74 79 2e 20  array is empty. 
160d0 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
160e0 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  ( db->autoCommit
160f0 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 54 72 61  ==0 || db->nVTra
16100 6e 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 72  ns==0 );.      r
16110 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53  c = sqlite3VtabS
16120 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56  avepoint(db, SAV
16130 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a 20 20  EPOINT_BEGIN,.  
16140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 62                db
16160 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 64 62 2d  ->nStatement+db-
16170 3e 6e 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20  >nSavepoint);.  
16180 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
16190 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
161a0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
161b0 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 2f  .#endif..      /
161c0 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77 20 73  * Create a new s
161d0 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75  avepoint structu
161e0 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65  re. */.      pNe
161f0 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  w = sqlite3DbMal
16200 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f  locRaw(db, sizeo
16210 66 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61  f(Savepoint)+nNa
16220 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28  me+1);.      if(
16230 20 70 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20   pNew ){.       
16240 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28   pNew->zName = (
16250 63 68 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b  char *)&pNew[1];
16260 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28  .        memcpy(
16270 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61  pNew->zName, zNa
16280 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20  me, nName+1);.  
16290 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66    .        /* If
162a0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65   there is no ope
162b0 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  n transaction, t
162c0 68 65 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73  hen mark this as
162d0 20 61 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20   a special.     
162e0 20 20 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69     ** "transacti
162f0 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a  on savepoint". *
16300 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 64 62  /.        if( db
16310 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
16320 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75            db->au
16330 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20  toCommit = 0;.  
16340 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72          db->isTr
16350 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
16360 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  nt = 1;.        
16370 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
16380 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b   db->nSavepoint+
16390 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  +;.        }.   
163a0 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e   .        /* Lin
163b0 6b 20 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f  k the new savepo
163c0 69 6e 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74  int into the dat
163d0 61 62 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c  abase handle's l
163e0 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ist. */.        
163f0 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62  pNew->pNext = db
16400 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ->pSavepoint;.  
16410 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70        db->pSavep
16420 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20  oint = pNew;.   
16430 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65       pNew->nDefe
16440 72 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  rredCons = db->n
16450 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
16460 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66        pNew->nDef
16470 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 64  erredImmCons = d
16480 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
16490 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ons;.      }.   
164a0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
164b0 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a  iSavepoint = 0;.
164c0 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  .    /* Find the
164d0 20 6e 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74   named savepoint
164e0 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  . If there is no
164f0 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c   such savepoint,
16500 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20   then an.    ** 
16510 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74 75  an error is retu
16520 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72  rned to the user
16530 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20  .  */.    for(. 
16540 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20       pSavepoint 
16550 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
16560 3b 20 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  ; .      pSavepo
16570 69 6e 74 20 26 26 20 73 71 6c 69 74 65 33 53 74  int && sqlite3St
16580 72 49 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74  rICmp(pSavepoint
16590 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b  ->zName, zName);
165a0 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
165b0 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  t = pSavepoint->
165c0 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20  pNext.    ){.   
165d0 20 20 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b     iSavepoint++;
165e0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21  .    }.    if( !
165f0 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20  pSavepoint ){.  
16600 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
16610 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
16620 2c 20 64 62 2c 20 22 6e 6f 20 73 75 63 68 20 73  , db, "no such s
16630 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a  avepoint: %s", z
16640 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72 63 20  Name);.      rc 
16650 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
16660 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62      }else if( db
16670 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 26  ->nVdbeWrite>0 &
16680 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  & p1==SAVEPOINT_
16690 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
166a0 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f   /* It is not po
166b0 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73  ssible to releas
166c0 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76  e (commit) a sav
166d0 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20  epoint if there 
166e0 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63  are .      ** ac
166f0 74 69 76 65 20 77 72 69 74 65 20 73 74 61 74 65  tive write state
16700 6d 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f 0a  ments..      */.
16710 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
16720 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
16730 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20  sg, db, .       
16740 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73 65   "cannot release
16750 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c   savepoint - SQL
16760 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
16770 72 6f 67 72 65 73 73 22 0a 20 20 20 20 20 20 29  rogress".      )
16780 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
16790 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65  ITE_BUSY;.    }e
167a0 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44  lse{..      /* D
167b0 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
167c0 20 6f 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20   or not this is 
167d0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  a transaction sa
167e0 76 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a  vepoint. If so,.
167f0 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69        ** and thi
16800 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 63  s is a RELEASE c
16810 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65  ommand, then the
16820 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
16830 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69  tion .      ** i
16840 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20  s committed. .  
16850 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74      */.      int
16860 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d   isTransaction =
16870 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
16880 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54  xt==0 && db->isT
16890 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
168a0 69 6e 74 3b 0a 20 20 20 20 20 20 69 66 28 20 69  int;.      if( i
168b0 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20  sTransaction && 
168c0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
168d0 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20  LEASE ){.       
168e0 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74   if( (rc = sqlit
168f0 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c  e3VdbeCheckFk(p,
16900 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20   1))!=SQLITE_OK 
16910 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  ){.          got
16920 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
16930 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
16940 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
16950 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  = 1;.        if(
16960 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
16970 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  (p)==SQLITE_BUSY
16980 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d   ){.          p-
16990 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20  >pc = pc;.      
169a0 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
169b0 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  it = 0;.        
169c0 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
169d0 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
169e0 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
169f0 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20  return;.        
16a00 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73  }.        db->is
16a10 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
16a20 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  oint = 0;.      
16a30 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20    rc = p->rc;.  
16a40 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
16a50 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20     iSavepoint = 
16a60 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d  db->nSavepoint -
16a70 20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b   iSavepoint - 1;
16a80 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d  .        if( p1=
16a90 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
16aa0 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ACK ){.         
16ab0 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62   for(ii=0; ii<db
16ac0 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
16ad0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
16ae0 33 42 74 72 65 65 54 72 69 70 41 6c 6c 43 75 72  3BtreeTripAllCur
16af0 73 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d  sors(db->aDb[ii]
16b00 2e 70 42 74 2c 20 53 51 4c 49 54 45 5f 41 42 4f  .pBt, SQLITE_ABO
16b10 52 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  RT);.          }
16b20 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
16b30 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
16b40 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a  db->nDb; ii++){.
16b50 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73            rc = s
16b60 71 6c 69 74 65 33 42 74 72 65 65 53 61 76 65 70  qlite3BtreeSavep
16b70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d  oint(db->aDb[ii]
16b80 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70  .pBt, p1, iSavep
16b90 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20  oint);.         
16ba0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
16bb0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
16bc0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
16bd0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
16be0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
16bf0 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d  .        if( p1=
16c00 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
16c10 41 43 4b 20 26 26 20 28 64 62 2d 3e 66 6c 61 67  ACK && (db->flag
16c20 73 26 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  s&SQLITE_InternC
16c30 68 61 6e 67 65 73 29 21 3d 30 20 29 7b 0a 20 20  hanges)!=0 ){.  
16c40 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
16c50 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
16c60 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20  tements(db);.   
16c70 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65         sqlite3Re
16c80 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43  setAllSchemasOfC
16c90 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20  onnection(db);. 
16ca0 20 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61           db->fla
16cb0 67 73 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20  gs = (db->flags 
16cc0 7c 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  | SQLITE_InternC
16cd0 68 61 6e 67 65 73 29 3b 0a 20 20 20 20 20 20 20  hanges);.       
16ce0 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20   }.      }.  .  
16cf0 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73      /* Regardles
16d00 73 20 6f 66 20 77 68 65 74 68 65 72 20 74 68 69  s of whether thi
16d10 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f  s is a RELEASE o
16d20 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74  r ROLLBACK, dest
16d30 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a  roy all .      *
16d40 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73  * savepoints nes
16d50 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68  ted inside of th
16d60 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  e savepoint bein
16d70 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a  g operated on. *
16d80 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 64  /.      while( d
16d90 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70  b->pSavepoint!=p
16da0 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20  Savepoint ){.   
16db0 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e       pTmp = db->
16dc0 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  pSavepoint;.    
16dd0 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69      db->pSavepoi
16de0 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74  nt = pTmp->pNext
16df0 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
16e00 33 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70  3DbFree(db, pTmp
16e10 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  );.        db->n
16e20 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20  Savepoint--;.   
16e30 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49     }..      /* I
16e40 66 20 69 74 20 69 73 20 61 20 52 45 4c 45 41 53  f it is a RELEAS
16e50 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20  E, then destroy 
16e60 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65  the savepoint be
16e70 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20  ing operated on 
16e80 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49  .      ** too. I
16e90 66 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41  f it is a ROLLBA
16ea0 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20  CK TO, then set 
16eb0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65  the number of de
16ec0 66 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a  ferred .      **
16ed0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
16ee0 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69  ations present i
16ef0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
16f00 6f 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72  o the value stor
16f10 65 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e  ed.      ** when
16f20 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77   the savepoint w
16f30 61 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a  as created.  */.
16f40 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41        if( p1==SA
16f50 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
16f60 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
16f70 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64  t( pSavepoint==d
16f80 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b  b->pSavepoint );
16f90 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61  .        db->pSa
16fa0 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70  vepoint = pSavep
16fb0 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20  oint->pNext;.   
16fc0 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
16fd0 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e  ee(db, pSavepoin
16fe0 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  t);.        if( 
16ff0 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29  !isTransaction )
17000 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
17010 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20  nSavepoint--;.  
17020 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65        }.      }e
17030 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d  lse{.        db-
17040 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d  >nDeferredCons =
17050 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65   pSavepoint->nDe
17060 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20  ferredCons;.    
17070 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
17080 64 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61 76 65  dImmCons = pSave
17090 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64  point->nDeferred
170a0 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d  ImmCons;.      }
170b0 0a 0a 20 20 20 20 20 20 69 66 28 20 21 69 73 54  ..      if( !isT
170c0 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20  ransaction ){.  
170d0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
170e0 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
170f0 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69  db, p1, iSavepoi
17100 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  nt);.        if(
17110 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
17120 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
17130 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
17140 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62  }.    }.  }..  b
17150 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
17160 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50  de: AutoCommit P
17170 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
17180 20 53 65 74 20 74 68 65 20 64 61 74 61 62 61 73   Set the databas
17190 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c  e auto-commit fl
171a0 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30  ag to P1 (1 or 0
171b0 29 2e 20 49 66 20 50 32 20 69 73 20 74 72 75 65  ). If P2 is true
171c0 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61  , roll.** back a
171d0 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74  ny currently act
171e0 69 76 65 20 62 74 72 65 65 20 74 72 61 6e 73 61  ive btree transa
171f0 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65  ctions. If there
17200 20 61 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a   are any active.
17210 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66 72  ** VMs (apart fr
17220 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68  om this one), th
17230 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61  en a ROLLBACK fa
17240 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66  ils.  A COMMIT f
17250 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65  ails if.** there
17260 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74   are active writ
17270 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76  ing VMs or activ
17280 65 20 56 4d 73 20 74 68 61 74 20 75 73 65 20 73  e VMs that use s
17290 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a  hared cache..**.
172a0 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
172b0 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20 56  ion causes the V
172c0 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61  M to halt..*/.ca
172d0 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74  se OP_AutoCommit
172e0 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65  : {.  int desire
172f0 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69  dAutoCommit;.  i
17300 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20 20  nt iRollback;.  
17310 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a 20  int turnOnAC;.. 
17320 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
17330 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  it = pOp->p1;.  
17340 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d  iRollback = pOp-
17350 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41 43 20  >p2;.  turnOnAC 
17360 3d 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  = desiredAutoCom
17370 6d 69 74 20 26 26 20 21 64 62 2d 3e 61 75 74 6f  mit && !db->auto
17380 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65 72 74  Commit;.  assert
17390 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
173a0 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65  mit==1 || desire
173b0 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29  dAutoCommit==0 )
173c0 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69  ;.  assert( desi
173d0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
173e0 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30   || iRollback==0
173f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
17400 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30 20  ->nVdbeActive>0 
17410 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20  );  /* At least 
17420 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61  this one VM is a
17430 63 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65 72  ctive */.  asser
17440 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
17450 29 3b 0a 0a 23 69 66 20 30 0a 20 20 69 66 28 20  );..#if 0.  if( 
17460 74 75 72 6e 4f 6e 41 43 20 26 26 20 69 52 6f 6c  turnOnAC && iRol
17470 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e 56 64  lback && db->nVd
17480 62 65 41 63 74 69 76 65 3e 31 20 29 7b 0a 20 20  beActive>1 ){.  
17490 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73    /* If this ins
174a0 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  truction impleme
174b0 6e 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 61  nts a ROLLBACK a
174c0 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65  nd other VMs are
174d0 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 72 75  .    ** still ru
174e0 6e 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74 72 61  nning, and a tra
174f0 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69  nsaction is acti
17500 76 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 72  ve, return an er
17510 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 0a 20  ror indicating. 
17520 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 6f     ** that the o
17530 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f  ther VMs must co
17540 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20  mplete first. . 
17550 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65     */.    sqlite
17560 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
17570 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e  ErrMsg, db, "can
17580 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61  not rollback tra
17590 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20  nsaction - ".   
175a0 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d       "SQL statem
175b0 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
175c0 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c  ");.    rc = SQL
175d0 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  ITE_BUSY;.  }els
175e0 65 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 74  e.#endif.  if( t
175f0 75 72 6e 4f 6e 41 43 20 26 26 20 21 69 52 6f 6c  urnOnAC && !iRol
17600 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e 56 64  lback && db->nVd
17610 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20  beWrite>0 ){.   
17620 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74   /* If this inst
17630 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  ruction implemen
17640 74 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20  ts a COMMIT and 
17650 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20 77 72  other VMs are wr
17660 69 74 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 74  iting.    ** ret
17670 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64  urn an error ind
17680 69 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 65  icating that the
17690 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20   other VMs must 
176a0 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20  complete first. 
176b0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69  .    */.    sqli
176c0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
176d0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63  >zErrMsg, db, "c
176e0 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61  annot commit tra
176f0 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20  nsaction - ".   
17700 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d       "SQL statem
17710 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
17720 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c  ");.    rc = SQL
17730 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  ITE_BUSY;.  }els
17740 65 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74  e if( desiredAut
17750 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74  oCommit!=db->aut
17760 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69  oCommit ){.    i
17770 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a  f( iRollback ){.
17780 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 65        assert( de
17790 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
177a0 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  =1 );.      sqli
177b0 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64  te3RollbackAll(d
177c0 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f  b, SQLITE_ABORT_
177d0 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20 20  ROLLBACK);.     
177e0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
177f0 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  = 1;.    }else i
17800 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33  f( (rc = sqlite3
17810 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31  VdbeCheckFk(p, 1
17820 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  ))!=SQLITE_OK ){
17830 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65  .      goto vdbe
17840 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65 6c  _return;.    }el
17850 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75  se{.      db->au
17860 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64  toCommit = (u8)d
17870 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
17880 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ;.      if( sqli
17890 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d  te3VdbeHalt(p)==
178a0 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
178b0 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70         p->pc = p
178c0 63 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61  c;.        db->a
178d0 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29  utoCommit = (u8)
178e0 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f  (1-desiredAutoCo
178f0 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 20 20 70  mmit);.        p
17900 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49  ->rc = rc = SQLI
17910 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20  TE_BUSY;.       
17920 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
17930 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  n;.      }.    }
17940 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
17950 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29  >nStatement==0 )
17960 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6c 6f  ;.    sqlite3Clo
17970 73 65 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29  seSavepoints(db)
17980 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d  ;.    if( p->rc=
17990 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
179a0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
179b0 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  DONE;.    }else{
179c0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
179d0 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a  TE_ERROR;.    }.
179e0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
179f0 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  turn;.  }else{. 
17a00 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
17a10 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
17a20 20 64 62 2c 0a 20 20 20 20 20 20 20 20 28 21 64   db,.        (!d
17a30 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
17a40 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72 74 20  )?"cannot start 
17a50 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69  a transaction wi
17a60 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  thin a transacti
17a70 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20 20 28 69  on":(.        (i
17a80 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f  Rollback)?"canno
17a90 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20  t rollback - no 
17aa0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
17ab0 63 74 69 76 65 22 3a 0a 20 20 20 20 20 20 20 20  ctive":.        
17ac0 20 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e             "cann
17ad0 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74  ot commit - no t
17ae0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
17af0 74 69 76 65 22 29 29 3b 0a 20 20 20 20 20 20 20  tive"));.       
17b00 20 20 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49    .    rc = SQLI
17b10 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  TE_ERROR;.  }.  
17b20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
17b30 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e  ode: Transaction
17b40 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
17b50 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72  **.** Begin a tr
17b60 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 64 61 74  ansaction on dat
17b70 61 62 61 73 65 20 50 31 20 69 66 20 61 20 74 72  abase P1 if a tr
17b80 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74  ansaction is not
17b90 20 61 6c 72 65 61 64 79 0a 2a 2a 20 61 63 74 69   already.** acti
17ba0 76 65 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  ve..** If P2 is 
17bb0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61  non-zero, then a
17bc0 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
17bd0 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2c 20 6f  on is started, o
17be0 72 20 69 66 20 61 20 0a 2a 2a 20 72 65 61 64 2d  r if a .** read-
17bf0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
17c00 6c 72 65 61 64 79 20 61 63 74 69 76 65 2c 20 69  lready active, i
17c10 74 20 69 73 20 75 70 67 72 61 64 65 64 20 74 6f  t is upgraded to
17c20 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63   a write-transac
17c30 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32 20 69  tion..** If P2 i
17c40 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72  s zero, then a r
17c50 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ead-transaction 
17c60 69 73 20 73 74 61 72 74 65 64 2e 0a 2a 2a 0a 2a  is started..**.*
17c70 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65  * P1 is the inde
17c80 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
17c90 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20  e file on which 
17ca0 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
17cb0 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20  is.** started.  
17cc0 49 6e 64 65 78 20 30 20 69 73 20 74 68 65 20 6d  Index 0 is the m
17cd0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
17ce0 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73  e and index 1 is
17cf0 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65   the.** file use
17d00 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  d for temporary 
17d10 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73  tables.  Indices
17d20 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72   of 2 or more ar
17d30 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74  e used for.** at
17d40 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
17d50 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69  ..**.** If a wri
17d60 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  te-transaction i
17d70 73 20 73 74 61 72 74 65 64 20 61 6e 64 20 74 68  s started and th
17d80 65 20 56 64 62 65 2e 75 73 65 73 53 74 6d 74 4a  e Vdbe.usesStmtJ
17d90 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a  ournal flag is.*
17da0 2a 20 74 72 75 65 20 28 74 68 69 73 20 66 6c 61  * true (this fla
17db0 67 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20  g is set if the 
17dc0 56 64 62 65 20 6d 61 79 20 6d 6f 64 69 66 79 20  Vdbe may modify 
17dd0 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f  more than one ro
17de0 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72  w and may.** thr
17df0 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65  ow an ABORT exce
17e00 70 74 69 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d  ption), a statem
17e10 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
17e20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e  may also be open
17e30 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63  ed..** More spec
17e40 69 66 69 63 61 6c 6c 79 2c 20 61 20 73 74 61 74  ifically, a stat
17e50 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
17e60 6e 20 69 73 20 6f 70 65 6e 65 64 20 69 66 66 20  n is opened iff 
17e70 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
17e80 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75  connection is cu
17e90 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61  rrently not in a
17ea0 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20  utocommit mode, 
17eb0 6f 72 20 69 66 20 74 68 65 72 65 20 61 72 65 20  or if there are 
17ec0 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69 76 65 20  other.** active 
17ed0 73 74 61 74 65 6d 65 6e 74 73 2e 20 41 20 73 74  statements. A st
17ee0 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
17ef0 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20 63  ion allows the c
17f00 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 74  hanges made by t
17f10 68 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62  his.** VDBE to b
17f20 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66  e rolled back af
17f30 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77 69 74  ter an error wit
17f40 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 72  hout having to r
17f50 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20  oll back the.** 
17f60 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74 69  entire transacti
17f70 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f 72 20  on. If no error 
17f80 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20  is encountered, 
17f90 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72  the statement tr
17fa0 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c  ansaction.** wil
17fb0 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  l automatically 
17fc0 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20  commit when the 
17fd0 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a  VDBE halts..**.*
17fe0 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20  * If P5!=0 then 
17ff0 74 68 69 73 20 6f 70 63 6f 64 65 20 61 6c 73 6f  this opcode also
18000 20 63 68 65 63 6b 73 20 74 68 65 20 73 63 68 65   checks the sche
18010 6d 61 20 63 6f 6f 6b 69 65 20 61 67 61 69 6e 73  ma cookie agains
18020 74 20 50 33 0a 2a 2a 20 61 6e 64 20 74 68 65 20  t P3.** and the 
18030 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f  schema generatio
18040 6e 20 63 6f 75 6e 74 65 72 20 61 67 61 69 6e 73  n counter agains
18050 74 20 50 34 2e 0a 2a 2a 20 54 68 65 20 63 6f 6f  t P4..** The coo
18060 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74 73 20  kie changes its 
18070 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74  value whenever t
18080 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
18090 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54  ma changes..** T
180a0 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  his operation is
180b0 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20   used to detect 
180c0 77 68 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f  when that the co
180d0 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65 64  okie has changed
180e0 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65  .** and that the
180f0 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
18100 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61 64   needs to reread
18110 20 74 68 65 20 73 63 68 65 6d 61 2e 20 20 49 66   the schema.  If
18120 20 74 68 65 20 73 63 68 65 6d 61 0a 2a 2a 20 63   the schema.** c
18130 6f 6f 6b 69 65 20 69 6e 20 50 33 20 64 69 66 66  ookie in P3 diff
18140 65 72 73 20 66 72 6f 6d 20 74 68 65 20 73 63 68  ers from the sch
18150 65 6d 61 20 63 6f 6f 6b 69 65 20 69 6e 20 74 68  ema cookie in th
18160 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65  e database heade
18170 72 20 6f 72 0a 2a 2a 20 69 66 20 74 68 65 20 73  r or.** if the s
18180 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e  chema generation
18190 20 63 6f 75 6e 74 65 72 20 69 6e 20 50 34 20 64   counter in P4 d
181a0 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20  iffers from the 
181b0 63 75 72 72 65 6e 74 0a 2a 2a 20 67 65 6e 65 72  current.** gener
181c0 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2c 20 74  ation counter, t
181d0 68 65 6e 20 61 6e 20 53 51 4c 49 54 45 5f 53 43  hen an SQLITE_SC
181e0 48 45 4d 41 20 65 72 72 6f 72 20 69 73 20 72 61  HEMA error is ra
181f0 69 73 65 64 20 61 6e 64 20 65 78 65 63 75 74 69  ised and executi
18200 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20 20 54 68  on.** halts.  Th
18210 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  e sqlite3_step()
18220 20 77 72 61 70 70 65 72 20 66 75 6e 63 74 69 6f   wrapper functio
18230 6e 20 6d 69 67 68 74 20 74 68 65 6e 20 72 65 70  n might then rep
18240 72 65 70 61 72 65 20 74 68 65 0a 2a 2a 20 73 74  repare the.** st
18250 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65 72 75  atement and reru
18260 6e 20 69 74 20 66 72 6f 6d 20 74 68 65 20 62 65  n it from the be
18270 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65  ginning..*/.case
18280 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a   OP_Transaction:
18290 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b   {.  Btree *pBt;
182a0 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20  .  int iMeta;.  
182b0 69 6e 74 20 69 47 65 6e 3b 0a 0a 20 20 61 73 73  int iGen;..  ass
182c0 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
182d0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
182e0 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c  ->readOnly==0 ||
182f0 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20   pOp->p2==0 );. 
18300 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
18310 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
18320 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
18330 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
18340 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31  k & (((yDbMask)1
18350 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20  )<<pOp->p1))!=0 
18360 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  );.  if( pOp->p2
18370 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 20 26   && (db->flags &
18380 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c   SQLITE_QueryOnl
18390 79 29 21 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  y)!=0 ){.    rc 
183a0 3d 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c  = SQLITE_READONL
183b0 59 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  Y;.    goto abor
183c0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
183d0 20 20 7d 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e    }.  pBt = db->
183e0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
183f0 3b 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a  ;..  if( pBt ){.
18400 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
18410 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28  BtreeBeginTrans(
18420 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20  pBt, pOp->p2);. 
18430 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
18440 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20  E_BUSY ){.      
18450 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  p->pc = pc;.    
18460 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
18470 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
18480 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
18490 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  rn;.    }.    if
184a0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
184b0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
184c0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
184d0 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28  ;.    }..    if(
184e0 20 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75   pOp->p2 && p->u
184f0 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a  sesStmtJournal .
18500 20 20 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74       && (db->aut
18510 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62  oCommit==0 || db
18520 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 29 20 0a  ->nVdbeRead>1) .
18530 20 20 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73      ){.      ass
18540 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
18550 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20  eIsInTrans(pBt) 
18560 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  );.      if( p->
18570 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b  iStatement==0 ){
18580 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
18590 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e   db->nStatement>
185a0 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70  =0 && db->nSavep
185b0 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20  oint>=0 );.     
185c0 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e     db->nStatemen
185d0 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d  t++; .        p-
185e0 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62  >iStatement = db
185f0 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64  ->nSavepoint + d
18600 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20  b->nStatement;. 
18610 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 63       }..      rc
18620 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61   = sqlite3VtabSa
18630 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45  vepoint(db, SAVE
18640 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e  POINT_BEGIN, p->
18650 69 53 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20  iStatement-1);. 
18660 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
18670 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
18680 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
18690 72 65 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74  reeBeginStmt(pBt
186a0 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29  , p->iStatement)
186b0 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
186c0 20 2f 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75   /* Store the cu
186d0 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74  rrent value of t
186e0 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
186f0 6c 65 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e  les deferred con
18700 73 74 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a  straint.      **
18710 20 63 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65   counter. If the
18720 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
18730 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20  action needs to 
18740 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a  be rolled back,.
18750 20 20 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c        ** the val
18760 75 65 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74  ue of this count
18770 65 72 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72  er needs to be r
18780 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f  estored too.  */
18790 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44  .      p->nStmtD
187a0 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  efCons = db->nDe
187b0 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20  ferredCons;.    
187c0 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d    p->nStmtDefImm
187d0 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
187e0 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20  rredImmCons;.   
187f0 20 7d 0a 0a 20 20 20 20 2f 2a 20 47 61 74 68 65   }..    /* Gathe
18800 72 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72  r the schema ver
18810 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20  sion number for 
18820 63 68 65 63 6b 69 6e 67 20 2a 2f 0a 20 20 20 20  checking */.    
18830 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d  sqlite3BtreeGetM
18840 65 74 61 28 70 42 74 2c 20 42 54 52 45 45 5f 53  eta(pBt, BTREE_S
18850 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28  CHEMA_VERSION, (
18860 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20  u32 *)&iMeta);. 
18870 20 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e 61 44     iGen = db->aD
18880 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65  b[pOp->p1].pSche
18890 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e 3b  ma->iGeneration;
188a0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 47  .  }else{.    iG
188b0 65 6e 20 3d 20 69 4d 65 74 61 20 3d 20 30 3b 0a  en = iMeta = 0;.
188c0 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f    }.  assert( pO
188d0 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d  p->p5==0 || pOp-
188e0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
188f0 32 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  2 );.  if( pOp->
18900 70 35 20 26 26 20 28 69 4d 65 74 61 21 3d 70 4f  p5 && (iMeta!=pO
18910 70 2d 3e 70 33 20 7c 7c 20 69 47 65 6e 21 3d 70  p->p3 || iGen!=p
18920 4f 70 2d 3e 70 34 2e 69 29 20 29 7b 0a 20 20 20  Op->p4.i) ){.   
18930 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
18940 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  b, p->zErrMsg);.
18950 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d      p->zErrMsg =
18960 20 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70   sqlite3DbStrDup
18970 28 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 73  (db, "database s
18980 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65  chema has change
18990 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74  d");.    /* If t
189a0 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65  he schema-cookie
189b0 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
189c0 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20  se file matches 
189d0 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20  the cookie .    
189e0 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20 74  ** stored with t
189f0 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70  he in-memory rep
18a00 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
18a10 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20  he schema, do.  
18a20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20    ** not reload 
18a30 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20  the schema from 
18a40 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
18a50 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  e..    **.    **
18a60 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c   If virtual-tabl
18a70 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74  es are in use, t
18a80 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20  his is not just 
18a90 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e  an optimization.
18aa0 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76  .    ** Often, v
18ab0 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68  -tables store th
18ac0 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65  eir data in othe
18ad0 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c  r SQLite tables,
18ae0 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72   which.    ** ar
18af0 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77  e queried from w
18b00 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e  ithin xNext() an
18b10 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20  d other v-table 
18b20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20  methods using.  
18b30 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75    ** prepared qu
18b40 65 72 69 65 73 2e 20 49 66 20 73 75 63 68 20 61  eries. If such a
18b50 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66   query is out-of
18b60 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74  -date, we do not
18b70 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20   want to.    ** 
18b80 64 69 73 63 61 72 64 20 74 68 65 20 64 61 74 61  discard the data
18b90 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20  base schema, as 
18ba0 74 68 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d  the user code im
18bb0 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20  plementing the. 
18bc0 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f     ** v-table wo
18bd0 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20 72  uld have to be r
18be0 65 61 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c  eady for the sql
18bf0 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
18c00 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a  ure itself.    *
18c10 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61  * to be invalida
18c20 74 65 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c  ted whenever sql
18c30 69 74 65 33 5f 73 74 65 70 28 29 20 69 73 20 63  ite3_step() is c
18c40 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69  alled from withi
18c50 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61  n .    ** a v-ta
18c60 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20  ble method..    
18c70 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61  */.    if( db->a
18c80 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68  Db[pOp->p1].pSch
18c90 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b  ema->schema_cook
18ca0 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20  ie!=iMeta ){.   
18cb0 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f     sqlite3ResetO
18cc0 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70  neSchema(db, pOp
18cd0 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ->p1);.    }.   
18ce0 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b   p->expired = 1;
18cf0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
18d00 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 62  _SCHEMA;.  }.  b
18d10 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
18d20 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20 50  de: ReadCookie P
18d30 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
18d40 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75  * Read cookie nu
18d50 6d 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61 74  mber P3 from dat
18d60 61 62 61 73 65 20 50 31 20 61 6e 64 20 77 72 69  abase P1 and wri
18d70 74 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69 73  te it into regis
18d80 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31  ter P2..** P3==1
18d90 20 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76   is the schema v
18da0 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69  ersion.  P3==2 i
18db0 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
18dc0 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20  ormat..** P3==3 
18dd0 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64  is the recommend
18de0 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20 73  ed pager cache s
18df0 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  ize, and so fort
18e00 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20  h.  P1==0 is.** 
18e10 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
18e20 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31  e file and P1==1
18e30 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
18e40 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74   file used to st
18e50 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79  ore.** temporary
18e60 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54   tables..**.** T
18e70 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 20 72  here must be a r
18e80 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20  ead-lock on the 
18e90 64 61 74 61 62 61 73 65 20 28 65 69 74 68 65 72  database (either
18ea0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a   a transaction.*
18eb0 2a 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65  * must be starte
18ec0 64 20 6f 72 20 74 68 65 72 65 20 6d 75 73 74 20  d or there must 
18ed0 62 65 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f  be an open curso
18ee0 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65  r) before.** exe
18ef0 63 75 74 69 6e 67 20 74 68 69 73 20 69 6e 73 74  cuting this inst
18f00 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
18f10 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20   OP_ReadCookie: 
18f20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
18f30 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
18f40 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74  se */.  int iMet
18f50 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20  a;.  int iDb;.  
18f60 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20  int iCookie;..  
18f70 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
18f80 61 64 65 72 20 29 3b 0a 20 20 69 44 62 20 3d 20  ader );.  iDb = 
18f90 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b  pOp->p1;.  iCook
18fa0 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ie = pOp->p3;.  
18fb0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
18fc0 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d  SQLITE_N_BTREE_M
18fd0 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ETA );.  assert(
18fe0 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
18ff0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
19000 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d  rt( db->aDb[iDb]
19010 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73  .pBt!=0 );.  ass
19020 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
19030 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
19040 31 29 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a  1)<<iDb))!=0 );.
19050 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47  .  sqlite3BtreeG
19060 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69  etMeta(db->aDb[i
19070 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65  Db].pBt, iCookie
19080 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29  , (u32 *)&iMeta)
19090 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
190a0 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a  iMeta;.  break;.
190b0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
190c0 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  tCookie P1 P2 P3
190d0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
190e0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
190f0 72 65 67 69 73 74 65 72 20 50 33 20 28 69 6e 74  register P3 (int
19100 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69  erpreted as an i
19110 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f 20  nteger).** into 
19120 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32  cookie number P2
19130 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 2e   of database P1.
19140 20 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73    P2==1 is the s
19150 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20  chema version.  
19160 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74 68 65  .** P2==2 is the
19170 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
19180 2e 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72  . P2==3 is the r
19190 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72  ecommended pager
191a0 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c   cache .** size,
191b0 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20   and so forth.  
191c0 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69  P1==0 is the mai
191d0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
191e0 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
191f0 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69   .** database fi
19200 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  le used to store
19210 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
19220 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73  s..**.** A trans
19230 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73  action must be s
19240 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 65 78  tarted before ex
19250 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63  ecuting this opc
19260 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
19270 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20  SetCookie: {    
19280 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 44     /* in3 */.  D
19290 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74  b *pDb;.  assert
192a0 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45  ( pOp->p2<SQLITE
192b0 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b  _N_BTREE_META );
192c0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
192d0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
192e0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
192f0 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
19300 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b  ask & (((yDbMask
19310 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d  )1)<<pOp->p1))!=
19320 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
19330 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
19340 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
19350 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  b[pOp->p1];.  as
19360 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d  sert( pDb->pBt!=
19370 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73  0 );.  assert( s
19380 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
19390 78 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70  xHeld(db, pOp->p
193a0 31 2c 20 30 29 20 29 3b 0a 20 20 70 49 6e 33 20  1, 0) );.  pIn3 
193b0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
193c0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
193d0 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
193e0 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74  3);.  /* See not
193f0 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68  e about index sh
19400 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61  ifting on OP_Rea
19410 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20  dCookie */.  rc 
19420 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 55 70  = sqlite3BtreeUp
19430 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42  dateMeta(pDb->pB
19440 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e 74  t, pOp->p2, (int
19450 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 69  )pIn3->u.i);.  i
19460 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45  f( pOp->p2==BTRE
19470 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  E_SCHEMA_VERSION
19480 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20   ){.    /* When 
19490 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
194a0 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72  e changes, recor
194b0 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65  d the new cookie
194c0 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20   internally */. 
194d0 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
194e0 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d  >schema_cookie =
194f0 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 3b   (int)pIn3->u.i;
19500 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c  .    db->flags |
19510 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  = SQLITE_InternC
19520 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20  hanges;.  }else 
19530 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52  if( pOp->p2==BTR
19540 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29  EE_FILE_FORMAT )
19550 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20  {.    /* Record 
19560 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66  changes in the f
19570 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20  ile format */.  
19580 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
19590 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28 75  file_format = (u
195a0 38 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d  8)pIn3->u.i;.  }
195b0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d  .  if( pOp->p1==
195c0 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61  1 ){.    /* Inva
195d0 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61  lidate all prepa
195e0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77  red statements w
195f0 68 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50  henever the TEMP
19600 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a   database.    **
19610 20 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67   schema is chang
19620 65 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34  ed.  Ticket #164
19630 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  4 */.    sqlite3
19640 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
19650 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20  atements(db);.  
19660 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30    p->expired = 0
19670 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
19680 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
19690 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20 50  nRead P1 P2 P3 P
196a0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
196b0 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33  : root=P2 iDb=P3
196c0 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65  .**.** Open a re
196d0 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66  ad-only cursor f
196e0 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  or the database 
196f0 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74  table whose root
19700 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69   page is.** P2 i
19710 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c  n a database fil
19720 65 2e 20 20 54 68 65 20 64 61 74 61 62 61 73 65  e.  The database
19730 20 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69   file is determi
19740 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50  ned by P3. .** P
19750 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d  3==0 means the m
19760 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33  ain database, P3
19770 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61  ==1 means the da
19780 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72 20  tabase used for 
19790 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61  .** temporary ta
197a0 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d  bles, and P3>1 m
197b0 65 61 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f  eans used the co
197c0 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61  rresponding atta
197d0 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65  ched.** database
197e0 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65 77 20  .  Give the new 
197f0 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69  cursor an identi
19800 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65  fier of P1.  The
19810 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65   P1.** values ne
19820 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67  ed not be contig
19830 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20  uous but all P1 
19840 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65  values should be
19850 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e   small integers.
19860 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72  .** It is an err
19870 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20  or for P1 to be 
19880 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20  negative..**.** 
19890 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75 73  If P5!=0 then us
198a0 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
198b0 20 72 65 67 69 73 74 65 72 20 50 32 20 61 73 20   register P2 as 
198c0 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e  the root page, n
198d0 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ot.** the value 
198e0 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a  of P2 itself..**
198f0 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20 62  .** There will b
19900 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e  e a read lock on
19910 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77 68   the database wh
19920 65 6e 65 76 65 72 20 74 68 65 72 65 20 69 73 20  enever there is 
19930 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f  an.** open curso
19940 72 2e 20 20 49 66 20 74 68 65 20 64 61 74 61 62  r.  If the datab
19950 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64  ase was unlocked
19960 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 69   prior to this i
19970 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68  nstruction.** th
19980 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69  en a read lock i
19990 73 20 61 63 71 75 69 72 65 64 20 61 73 20 70 61  s acquired as pa
199a0 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72  rt of this instr
199b0 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a  uction.  A read.
199c0 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f  ** lock allows o
199d0 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20 74  ther processes t
199e0 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61 62  o read the datab
199f0 61 73 65 20 62 75 74 20 70 72 6f 68 69 62 69 74  ase but prohibit
19a00 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20 70  s.** any other p
19a10 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69  rocess from modi
19a20 66 79 69 6e 67 20 74 68 65 20 64 61 74 61 62 61  fying the databa
19a30 73 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c 6f  se.  The read lo
19a40 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65  ck is.** release
19a50 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f  d when all curso
19a60 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20 20  rs are closed.  
19a70 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  If this instruct
19a80 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20  ion attempts.** 
19a90 74 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c 6f  to get a read lo
19aa0 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74 68  ck but fails, th
19ab0 65 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e 61  e script termina
19ac0 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53  tes with an.** S
19ad0 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72  QLITE_BUSY error
19ae0 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   code..**.** The
19af0 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65   P4 value may be
19b00 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67   either an integ
19b10 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72  er (P4_INT32) or
19b20 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a   a pointer to.**
19b30 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
19b40 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f  ture (P4_KEYINFO
19b50 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f  ). If it is a po
19b60 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e  inter to a KeyIn
19b70 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  fo .** structure
19b80 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75  , then said stru
19b90 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68  cture defines th
19ba0 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f  e content and co
19bb0 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75  llating .** sequ
19bc0 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65  ence of the inde
19bd0 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20  x being opened. 
19be0 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34  Otherwise, if P4
19bf0 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a   is an integer .
19c00 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20  ** value, it is 
19c10 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
19c20 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
19c30 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  the table..**.**
19c40 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 57 72   See also OpenWr
19c50 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ite..*/./* Opcod
19c60 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31 20  e: OpenWrite P1 
19c70 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
19c80 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32  ynopsis: root=P2
19c90 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70   iDb=P3.**.** Op
19ca0 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65 20  en a read/write 
19cb0 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20  cursor named P1 
19cc0 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  on the table or 
19cd0 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
19ce0 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e 20  .** page is P2. 
19cf0 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73 65   Or if P5!=0 use
19d00 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
19d10 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 66  register P2 to f
19d20 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20  ind the.** root 
19d30 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  page..**.** The 
19d40 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20  P4 value may be 
19d50 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65  either an intege
19d60 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20  r (P4_INT32) or 
19d70 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20  a pointer to.** 
19d80 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
19d90 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29  ure (P4_KEYINFO)
19da0 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69  . If it is a poi
19db0 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66  nter to a KeyInf
19dc0 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c  o .** structure,
19dd0 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63   then said struc
19de0 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65  ture defines the
19df0 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c   content and col
19e00 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65  lating .** seque
19e10 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78  nce of the index
19e20 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f   being opened. O
19e30 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20  therwise, if P4 
19e40 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a  is an integer .*
19e50 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73  * value, it is s
19e60 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  et to the number
19e70 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
19e80 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20  he table, or to 
19e90 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69  the.** largest i
19ea0 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75  ndex of any colu
19eb0 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  mn of the table 
19ec0 74 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c 79  that is actually
19ed0 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   used..**.** Thi
19ee0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f  s instruction wo
19ef0 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70  rks just like Op
19f00 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74 68  enRead except th
19f10 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20  at it opens the 
19f20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61  cursor.** in rea
19f30 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20 46  d/write mode.  F
19f40 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c 65  or a given table
19f50 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65 20 6f  , there can be o
19f60 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d  ne or more read-
19f70 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20  only.** cursors 
19f80 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61 64  or a single read
19f90 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 62 75  /write cursor bu
19fa0 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a  t not both..**.*
19fb0 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52  * See also OpenR
19fc0 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ead..*/.case OP_
19fd0 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f  OpenRead:.case O
19fe0 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20 7b 0a 20  P_OpenWrite: {. 
19ff0 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b   int nField;.  K
1a000 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
1a010 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e  ;.  int p2;.  in
1a020 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46  t iDb;.  int wrF
1a030 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58  lag;.  Btree *pX
1a040 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
1a050 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b  pCur;.  Db *pDb;
1a060 0a 0a 20 20 61 73 73 65 72 74 28 20 28 70 4f 70  ..  assert( (pOp
1a070 2d 3e 70 35 26 28 4f 50 46 4c 41 47 5f 50 32 49  ->p5&(OPFLAG_P2I
1a080 53 52 45 47 7c 4f 50 46 4c 41 47 5f 42 55 4c 4b  SREG|OPFLAG_BULK
1a090 43 53 52 29 29 3d 3d 70 4f 70 2d 3e 70 35 20 29  CSR))==pOp->p5 )
1a0a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1a0b0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e  >opcode==OP_Open
1a0c0 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70 35  Write || pOp->p5
1a0d0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
1a0e0 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
1a0f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1a100 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52  opcode==OP_OpenR
1a110 65 61 64 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e  ead || p->readOn
1a120 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20  ly==0 );..  if( 
1a130 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20 20  p->expired ){.  
1a140 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42    rc = SQLITE_AB
1a150 4f 52 54 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ORT;.    break;.
1a160 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20    }..  nField = 
1a170 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  0;.  pKeyInfo = 
1a180 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  0;.  p2 = pOp->p
1a190 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  2;.  iDb = pOp->
1a1a0 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44  p3;.  assert( iD
1a1b0 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
1a1c0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
1a1d0 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
1a1e0 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
1a1f0 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 70 44  iDb))!=0 );.  pD
1a200 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62  b = &db->aDb[iDb
1a210 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70  ];.  pX = pDb->p
1a220 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58  Bt;.  assert( pX
1a230 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  !=0 );.  if( pOp
1a240 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
1a250 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20 77 72  nWrite ){.    wr
1a260 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 61 73  Flag = 1;.    as
1a270 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
1a280 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
1a290 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
1a2a0 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  if( pDb->pSchema
1a2b0 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20  ->file_format < 
1a2c0 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
1a2d0 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70  ormat ){.      p
1a2e0 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
1a2f0 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68  rmat = pDb->pSch
1a300 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
1a310 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
1a320 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b  .    wrFlag = 0;
1a330 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
1a340 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49 53  p5 & OPFLAG_P2IS
1a350 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65 72  REG ){.    asser
1a360 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61  t( p2>0 );.    a
1a370 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e  ssert( p2<=(p->n
1a380 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
1a390 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61  );.    pIn2 = &a
1a3a0 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73  Mem[p2];.    ass
1a3b0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
1a3c0 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73 73  pIn2) );.    ass
1a3d0 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
1a3e0 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
1a3f0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
1a400 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
1a410 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20  pIn2);.    p2 = 
1a420 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a  (int)pIn2->u.i;.
1a430 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61      /* The p2 va
1a440 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73  lue always comes
1a450 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50   from a prior OP
1a460 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63  _CreateTable opc
1a470 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74  ode and.    ** t
1a480 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  hat opcode will 
1a490 61 6c 77 61 79 73 20 73 65 74 20 74 68 65 20 70  always set the p
1a4a0 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20  2 value to 2 or 
1a4b0 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69  more or else fai
1a4c0 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65  l..    ** If the
1a4d0 72 65 20 77 65 72 65 20 61 20 66 61 69 6c 75 72  re were a failur
1a4e0 65 2c 20 74 68 65 20 70 72 65 70 61 72 65 64 20  e, the prepared 
1a4f0 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20  statement would 
1a500 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20  have halted.    
1a510 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68 69  ** before reachi
1a520 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  ng this instruct
1a530 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20  ion. */.    if( 
1a540 4e 45 56 45 52 28 70 32 3c 32 29 20 29 20 7b 0a  NEVER(p2<2) ) {.
1a550 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
1a560 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
1a570 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1a580 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1a590 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70     }.  }.  if( p
1a5a0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
1a5b0 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b  EYINFO ){.    pK
1a5c0 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
1a5d0 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61  .pKeyInfo;.    a
1a5e0 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d  ssert( pKeyInfo-
1a5f0 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b  >enc==ENC(db) );
1a600 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65  .    assert( pKe
1a610 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b  yInfo->db==db );
1a620 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b  .    nField = pK
1a630 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 70  eyInfo->nField+p
1a640 4b 65 79 49 6e 66 6f 2d 3e 6e 58 46 69 65 6c 64  KeyInfo->nXField
1a650 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f  ;.  }else if( pO
1a660 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
1a670 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c  T32 ){.    nFiel
1a680 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  d = pOp->p4.i;. 
1a690 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   }.  assert( pOp
1a6a0 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73  ->p1>=0 );.  ass
1a6b0 65 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29  ert( nField>=0 )
1a6c0 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 46  ;.  testcase( nF
1a6d0 69 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54  ield==0 );  /* T
1a6e0 61 62 6c 65 20 77 69 74 68 20 49 4e 54 45 47 45  able with INTEGE
1a6f0 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e  R PRIMARY KEY an
1a700 64 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a  d nothing else *
1a710 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63  /.  pCur = alloc
1a720 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1a730 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44  ->p1, nField, iD
1a740 62 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 75  b, 1);.  if( pCu
1a750 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  r==0 ) goto no_m
1a760 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c  em;.  pCur->null
1a770 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d  Row = 1;.  pCur-
1a780 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a  >isOrdered = 1;.
1a790 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1a7a0 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32  reeCursor(pX, p2
1a7b0 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e  , wrFlag, pKeyIn
1a7c0 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75 72 73 6f  fo, pCur->pCurso
1a7d0 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79  r);.  pCur->pKey
1a7e0 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b  Info = pKeyInfo;
1a7f0 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41  .  assert( OPFLA
1a800 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54 52 45 45  G_BULKCSR==BTREE
1a810 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20 73  _BULKLOAD );.  s
1a820 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1a830 72 48 69 6e 74 73 28 70 43 75 72 2d 3e 70 43 75  rHints(pCur->pCu
1a840 72 73 6f 72 2c 20 28 70 4f 70 2d 3e 70 35 20 26  rsor, (pOp->p5 &
1a850 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 29   OPFLAG_BULKCSR)
1a860 29 3b 0a 0a 20 20 2f 2a 20 53 69 6e 63 65 20 69  );..  /* Since i
1a870 74 20 70 65 72 66 6f 72 6d 73 20 6e 6f 20 6d 65  t performs no me
1a880 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1a890 6f 72 20 49 4f 2c 20 74 68 65 20 6f 6e 6c 79 20  or IO, the only 
1a8a0 76 61 6c 75 65 20 74 68 61 74 0a 20 20 2a 2a 20  value that.  ** 
1a8b0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1a8c0 6f 72 28 29 20 6d 61 79 20 72 65 74 75 72 6e 20  or() may return 
1a8d0 69 73 20 53 51 4c 49 54 45 5f 4f 4b 2e 20 2a 2f  is SQLITE_OK. */
1a8e0 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
1a8f0 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f  QLITE_OK );..  /
1a900 2a 20 53 65 74 20 74 68 65 20 56 64 62 65 43 75  * Set the VdbeCu
1a910 72 73 6f 72 2e 69 73 54 61 62 6c 65 20 76 61 72  rsor.isTable var
1a920 69 61 62 6c 65 2e 20 50 72 65 76 69 6f 75 73 20  iable. Previous 
1a930 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a  versions of.  **
1a940 20 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f 20   SQLite used to 
1a950 63 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f 6f  check if the roo
1a960 74 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65 72  t-page flags wer
1a970 65 20 73 61 6e 65 20 61 74 20 74 68 69 73 20 70  e sane at this p
1a980 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65  oint.  ** and re
1a990 70 6f 72 74 20 64 61 74 61 62 61 73 65 20 63 6f  port database co
1a9a0 72 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65 79  rruption if they
1a9b0 20 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20 74   were not, but t
1a9c0 68 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20 20  his check has.  
1a9d0 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20 69  ** since moved i
1a9e0 6e 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c 61  nto the btree la
1a9f0 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75  yer.  */  .  pCu
1aa00 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70  r->isTable = pOp
1aa10 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59  ->p4type!=P4_KEY
1aa20 49 4e 46 4f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  INFO;.  break;.}
1aa30 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
1aa40 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32  nEphemeral P1 P2
1aa50 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f   * P4 P5.** Syno
1aa60 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32  psis: nColumn=P2
1aa70 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65  .**.** Open a ne
1aa80 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61  w cursor P1 to a
1aa90 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   transient table
1aaa0 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20  ..** The cursor 
1aab0 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64  is always opened
1aac0 20 72 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e   read/write even
1aad0 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e   if .** the main
1aae0 20 64 61 74 61 62 61 73 65 20 69 73 20 72 65 61   database is rea
1aaf0 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68  d-only.  The eph
1ab00 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20  emeral.** table 
1ab10 69 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d  is deleted autom
1ab20 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68  atically when th
1ab30 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73  e cursor is clos
1ab40 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  ed..**.** P2 is 
1ab50 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1ab60 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68  lumns in the eph
1ab70 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a  emeral table..**
1ab80 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e   The cursor poin
1ab90 74 73 20 74 6f 20 61 20 42 54 72 65 65 20 74 61  ts to a BTree ta
1aba0 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64  ble if P4==0 and
1abb0 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65   to a BTree inde
1abc0 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f  x.** if P4 is no
1abd0 74 20 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e  t 0.  If P4 is n
1abe0 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e  ot NULL, it poin
1abf0 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  ts to a KeyInfo 
1ac00 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61  structure.** tha
1ac10 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f  t defines the fo
1ac20 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20  rmat of keys in 
1ac30 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a  the index..**.**
1ac40 20 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65   The P5 paramete
1ac50 72 20 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20  r can be a mask 
1ac60 6f 66 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66  of the BTREE_* f
1ac70 6c 61 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20  lags defined.** 
1ac80 69 6e 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65  in btree.h.  The
1ac90 73 65 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c  se flags control
1aca0 20 61 73 70 65 63 74 73 20 6f 66 20 74 68 65 20   aspects of the 
1acb0 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20  operation of.** 
1acc0 74 68 65 20 62 74 72 65 65 2e 20 20 54 68 65 20  the btree.  The 
1acd0 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e  BTREE_OMIT_JOURN
1ace0 41 4c 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e  AL and BTREE_SIN
1acf0 47 4c 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a  GLE flags are.**
1ad00 20 61 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63   added automatic
1ad10 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  ally..*/./* Opco
1ad20 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65  de: OpenAutoinde
1ad30 78 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  x P1 P2 * P4 *.*
1ad40 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c  * Synopsis: nCol
1ad50 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  umn=P2.**.** Thi
1ad60 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74  s opcode works t
1ad70 68 65 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70  he same as OP_Op
1ad80 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74  enEphemeral.  It
1ad90 20 68 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72   has a.** differ
1ada0 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74  ent name to dist
1adb0 69 6e 67 75 69 73 68 20 69 74 73 20 75 73 65 2e  inguish its use.
1adc0 20 20 54 61 62 6c 65 73 20 63 72 65 61 74 65 64    Tables created
1add0 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69   using.** by thi
1ade0 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  s opcode will be
1adf0 20 75 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61   used for automa
1ae00 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20  tically created 
1ae10 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64  transient.** ind
1ae20 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a  ices in joins..*
1ae30 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75  /.case OP_OpenAu
1ae40 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f  toindex: .case O
1ae50 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a  P_OpenEphemeral:
1ae60 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
1ae70 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20  *pCx;.  KeyInfo 
1ae80 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74  *pKeyInfo;..  st
1ae90 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76  atic const int v
1aea0 66 73 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20  fsFlags = .     
1aeb0 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41   SQLITE_OPEN_REA
1aec0 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53  DWRITE |.      S
1aed0 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54  QLITE_OPEN_CREAT
1aee0 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1aef0 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20  _OPEN_EXCLUSIVE 
1af00 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1af10 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53  PEN_DELETEONCLOS
1af20 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1af30 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f  _OPEN_TRANSIENT_
1af40 44 42 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  DB;.  assert( pO
1af50 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1af60 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30  sert( pOp->p2>=0
1af70 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
1af80 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1af90 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20  p->p1, pOp->p2, 
1afa0 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43  -1, 1);.  if( pC
1afb0 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  x==0 ) goto no_m
1afc0 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52  em;.  pCx->nullR
1afd0 6f 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73  ow = 1;.  rc = s
1afe0 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28  qlite3BtreeOpen(
1aff0 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c  db->pVfs, 0, db,
1b000 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20 20   &pCx->pBt, .   
1b010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b020 20 20 20 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f       BTREE_OMIT_
1b030 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f  JOURNAL | BTREE_
1b040 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35  SINGLE | pOp->p5
1b050 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a 20 20 69  , vfsFlags);.  i
1b060 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1b070 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
1b080 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72  ite3BtreeBeginTr
1b090 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20 31 29  ans(pCx->pBt, 1)
1b0a0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d  ;.  }.  if( rc==
1b0b0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1b0c0 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65   /* If a transie
1b0d0 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65 71 75  nt index is requ
1b0e0 69 72 65 64 2c 20 63 72 65 61 74 65 20 69 74 20  ired, create it 
1b0f0 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a  by calling.    *
1b100 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  * sqlite3BtreeCr
1b110 65 61 74 65 54 61 62 6c 65 28 29 20 77 69 74 68  eateTable() with
1b120 20 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b   the BTREE_BLOBK
1b130 45 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20  EY flag before. 
1b140 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74     ** opening it
1b150 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74  . If a transient
1b160 20 74 61 62 6c 65 20 69 73 20 72 65 71 75 69 72   table is requir
1b170 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65  ed, just use the
1b180 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69  .    ** automati
1b190 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61  cally created ta
1b1a0 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61  ble with root-pa
1b1b0 67 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e  ge 1 (an BLOB_IN
1b1c0 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20  TKEY table)..   
1b1d0 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 4b 65   */.    if( (pKe
1b1e0 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
1b1f0 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a  pKeyInfo)!=0 ){.
1b200 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a        int pgno;.
1b210 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
1b220 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45  p->p4type==P4_KE
1b230 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72  YINFO );.      r
1b240 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1b250 43 72 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d  CreateTable(pCx-
1b260 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52  >pBt, &pgno, BTR
1b270 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70  EE_BLOBKEY | pOp
1b280 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 69 66  ->p5); .      if
1b290 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1b2a0 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
1b2b0 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f  t( pgno==MASTER_
1b2c0 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20  ROOT+1 );.      
1b2d0 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
1b2e0 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20  fo->db==db );.  
1b2f0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b        assert( pK
1b300 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43  eyInfo->enc==ENC
1b310 28 64 62 29 20 29 3b 0a 20 20 20 20 20 20 20 20  (db) );.        
1b320 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  pCx->pKeyInfo = 
1b330 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20  pKeyInfo;.      
1b340 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1b350 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70  reeCursor(pCx->p
1b360 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 70 4b 65  Bt, pgno, 1, pKe
1b370 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 70 43 75 72  yInfo, pCx->pCur
1b380 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  sor);.      }.  
1b390 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
1b3a0 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 0;.    }else{
1b3b0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1b3c0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
1b3d0 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f  Cx->pBt, MASTER_
1b3e0 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d  ROOT, 1, 0, pCx-
1b3f0 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  >pCursor);.     
1b400 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
1b410 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  1;.    }.  }.  p
1b420 43 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20  Cx->isOrdered = 
1b430 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f  (pOp->p5!=BTREE_
1b440 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 62 72  UNORDERED);.  br
1b450 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1b460 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e 20 50 31  e: SorterOpen P1
1b470 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
1b480 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72   This opcode wor
1b490 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45  ks like OP_OpenE
1b4a0 70 68 65 6d 65 72 61 6c 20 65 78 63 65 70 74 20  phemeral except 
1b4b0 74 68 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a  that it opens.**
1b4c0 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64   a transient ind
1b4d0 65 78 20 74 68 61 74 20 69 73 20 73 70 65 63 69  ex that is speci
1b4e0 66 69 63 61 6c 6c 79 20 64 65 73 69 67 6e 65 64  fically designed
1b4f0 20 74 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a   to sort large.*
1b500 2a 20 74 61 62 6c 65 73 20 75 73 69 6e 67 20 61  * tables using a
1b510 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65 72 67 65  n external merge
1b520 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e  -sort algorithm.
1b530 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
1b540 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65  erOpen: {.  Vdbe
1b550 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20  Cursor *pCx;..  
1b560 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1b570 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1b580 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20  pOp->p2>=0 );.  
1b590 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  pCx = allocateCu
1b5a0 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1b5b0 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29   pOp->p2, -1, 1)
1b5c0 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29  ;.  if( pCx==0 )
1b5d0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1b5e0 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  pCx->pKeyInfo = 
1b5f0 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
1b600 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78 2d  ;.  assert( pCx-
1b610 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64  >pKeyInfo->db==d
1b620 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  b );.  assert( p
1b630 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e  Cx->pKeyInfo->en
1b640 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20  c==ENC(db) );.  
1b650 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
1b660 53 6f 72 74 65 72 49 6e 69 74 28 64 62 2c 20 70  SorterInit(db, p
1b670 43 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  Cx);.  break;.}.
1b680 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1b690 50 73 65 75 64 6f 20 50 31 20 50 32 20 50 33 20  Pseudo P1 P2 P3 
1b6a0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
1b6b0 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72   P3 columns in r
1b6c0 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  [P2].**.** Open 
1b6d0 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61  a new cursor tha
1b6e0 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61  t points to a fa
1b6f0 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  ke table that co
1b700 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a  ntains a single.
1b710 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20  ** row of data. 
1b720 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   The content of 
1b730 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20  that one row is 
1b740 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d  the content of m
1b750 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65  emory.** registe
1b760 72 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72 20  r P2.  In other 
1b770 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31  words, cursor P1
1b780 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61   becomes an alia
1b790 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45  s for the .** ME
1b7a0 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63  M_Blob content c
1b7b0 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69  ontained in regi
1b7c0 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41  ster P2..**.** A
1b7d0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72   pseudo-table cr
1b7e0 65 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70  eated by this op
1b7f0 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20  code is used to 
1b800 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a  hold a single.**
1b810 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d   row output from
1b820 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74   the sorter so t
1b830 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20  hat the row can 
1b840 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e  be decomposed in
1b850 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c  to.** individual
1b860 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74   columns using t
1b870 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
1b880 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  ode.  The OP_Col
1b890 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73  umn opcode.** is
1b8a0 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72   the only cursor
1b8b0 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72   opcode that wor
1b8c0 6b 73 20 77 69 74 68 20 61 20 70 73 65 75 64 6f  ks with a pseudo
1b8d0 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33  -table..**.** P3
1b8e0 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
1b8f0 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
1b900 72 65 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c  records that wil
1b910 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a  l be stored by.*
1b920 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62  * the pseudo-tab
1b930 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  le..*/.case OP_O
1b940 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56  penPseudo: {.  V
1b950 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
1b960 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1b970 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p1>=0 );.  asser
1b980 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b  t( pOp->p3>=0 );
1b990 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74  .  pCx = allocat
1b9a0 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1b9b0 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c  p1, pOp->p3, -1,
1b9c0 20 30 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d   0);.  if( pCx==
1b9d0 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1b9e0 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20  .  pCx->nullRow 
1b9f0 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75  = 1;.  pCx->pseu
1ba00 64 6f 54 61 62 6c 65 52 65 67 20 3d 20 70 4f 70  doTableReg = pOp
1ba10 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54  ->p2;.  pCx->isT
1ba20 61 62 6c 65 20 3d 20 31 3b 0a 20 20 61 73 73 65  able = 1;.  asse
1ba30 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29  rt( pOp->p5==0 )
1ba40 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1ba50 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50   Opcode: Close P
1ba60 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
1ba70 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70  Close a cursor p
1ba80 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64  reviously opened
1ba90 20 61 73 20 50 31 2e 20 20 49 66 20 50 31 20 69   as P1.  If P1 i
1baa0 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74  s not.** current
1bab0 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e  ly open, this in
1bac0 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e  struction is a n
1bad0 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  o-op..*/.case OP
1bae0 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65  _Close: {.  asse
1baf0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1bb00 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1bb10 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65  rsor );.  sqlite
1bb20 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28  3VdbeFreeCursor(
1bb30 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  p, p->apCsr[pOp-
1bb40 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73  >p1]);.  p->apCs
1bb50 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a  r[pOp->p1] = 0;.
1bb60 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1bb70 70 63 6f 64 65 3a 20 53 65 65 6b 47 65 20 50 31  pcode: SeekGe P1
1bb80 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1bb90 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1bba0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
1bbb0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1bbc0 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1bbd0 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1bbe0 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1bbf0 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1bc00 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1bc10 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49  3 as the key.  I
1bc20 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1bc30 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1bc40 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1bc50 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1bc60 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1bc70 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1bc80 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1bc90 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1bca0 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1bcb0 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1bcc0 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
1bcd0 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c  nts to the small
1bce0 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1bcf0 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ** is greater th
1bd00 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1bd10 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1bd20 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1bd30 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65  cords .** greate
1bd40 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
1bd50 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  to the key and P
1bd60 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1bd70 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1bd80 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1bd90 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1bda0 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c   Distinct, SeekL
1bdb0 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c  t, SeekGt, SeekL
1bdc0 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
1bdd0 53 65 65 6b 47 74 20 50 31 20 50 32 20 50 33 20  SeekGt P1 P2 P3 
1bde0 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
1bdf0 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
1be00 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
1be10 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
1be20 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
1be30 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
1be40 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
1be50 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
1be60 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
1be70 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50  key. If cursor P
1be80 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
1be90 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
1bea0 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
1beb0 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
1bec0 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
1bed0 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
1bee0 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
1bef0 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
1bf00 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
1bf10 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20  sor P1 so that  
1bf20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1bf30 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20   smallest entry 
1bf40 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61  that .** is grea
1bf50 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ter than the key
1bf60 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
1bf70 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1bf80 67 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a  greater than .**
1bf90 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
1bfa0 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
1bfb0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
1bfc0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1bfd0 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44  und, NotFound, D
1bfe0 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c  istinct, SeekLt,
1bff0 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a   SeekGe, SeekLe.
1c000 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
1c010 65 6b 4c 74 20 50 31 20 50 32 20 50 33 20 50 34  ekLt P1 P2 P3 P4
1c020 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   * .** Synopsis:
1c030 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1c040 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1c050 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1c060 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1c070 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1c080 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1c090 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1c0a0 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
1c0b0 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
1c0c0 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1c0d0 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1c0e0 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1c0f0 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1c100 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1c110 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1c120 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1c130 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1c140 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1c150 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
1c160 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1c170 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68  largest entry th
1c180 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74  at .** is less t
1c190 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
1c1a0 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1c1b0 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20  no records less 
1c1c0 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79  than .** the key
1c1d0 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
1c1e0 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
1c1f0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  o P2..**.** See 
1c200 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1c210 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c  Found, Distinct,
1c220 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c   SeekGt, SeekGe,
1c230 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekLe.*/./* Op
1c240 63 6f 64 65 3a 20 53 65 65 6b 4c 65 20 50 31 20  code: SeekLe P1 
1c250 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
1c260 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1c270 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
1c280 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1c290 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1c2a0 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1c2b0 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1c2c0 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1c2d0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1c2e0 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
1c2f0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1c300 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1c310 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1c320 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1c330 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1c340 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1c350 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1c360 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1c370 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1c380 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1c390 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
1c3a0 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e  o the largest en
1c3b0 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1c3c0 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
1c3d0 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
1c3e0 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1c3f0 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a  e no records .**
1c400 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
1c410 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61  ual to the key a
1c420 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
1c430 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
1c440 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
1c450 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1c460 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53  und, Distinct, S
1c470 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekGt, SeekGe, S
1c480 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50  eekLt.*/.case OP
1c490 5f 53 65 65 6b 4c 54 3a 20 20 20 20 20 20 20 20  _SeekLT:        
1c4a0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1c4b0 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 45 3a  .case OP_SeekLE:
1c4c0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
1c4d0 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1c4e0 5f 53 65 65 6b 47 45 3a 20 20 20 20 20 20 20 20  _SeekGE:        
1c4f0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1c500 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 54 3a  .case OP_SeekGT:
1c510 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70   {       /* jump
1c520 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72  , in3 */.  int r
1c530 65 73 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a 20 20  es;.  int oc;.  
1c540 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1c550 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
1c560 20 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64   r;.  int nField
1c570 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20  ;.  i64 iKey;   
1c580 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20     /* The rowid 
1c590 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74  we are to seek t
1c5a0 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  o */..  assert( 
1c5b0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1c5c0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1c5d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1c5e0 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43  p->p2!=0 );.  pC
1c5f0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1c600 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1c610 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
1c620 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
1c630 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73  leReg==0 );.  as
1c640 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20  sert( OP_SeekLE 
1c650 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29  == OP_SeekLT+1 )
1c660 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
1c670 65 65 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekGE == OP_Seek
1c680 4c 54 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74  LT+2 );.  assert
1c690 28 20 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f  ( OP_SeekGT == O
1c6a0 50 5f 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20  P_SeekLT+3 );.  
1c6b0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72  assert( pC->isOr
1c6c0 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72  dered );.  asser
1c6d0 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
1c6e0 30 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f 70 2d  0 );.  oc = pOp-
1c6f0 3e 6f 70 63 6f 64 65 3b 0a 20 20 70 43 2d 3e 6e  >opcode;.  pC->n
1c700 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 69 66  ullRow = 0;.  if
1c710 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b  ( pC->isTable ){
1c720 0a 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75  .    /* The inpu
1c730 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69  t value in P3 mi
1c740 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79  ght be of any ty
1c750 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61  pe: integer, rea
1c760 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a  l, string,.    *
1c770 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e  * blob, or NULL.
1c780 20 20 42 75 74 20 69 74 20 6e 65 65 64 73 20 74    But it needs t
1c790 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20  o be an integer 
1c7a0 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f  before we can do
1c7b0 0a 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65 6b  .    ** the seek
1c7c0 2c 20 73 6f 20 63 6f 76 65 72 74 20 69 74 2e 20  , so covert it. 
1c7d0 2a 2f 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61  */.    pIn3 = &a
1c7e0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
1c7f0 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
1c800 66 69 6e 69 74 79 28 70 49 6e 33 29 3b 0a 20 20  finity(pIn3);.  
1c810 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33    iKey = sqlite3
1c820 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
1c830 33 29 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69  3);.    pC->rowi
1c840 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 0a 20  dIsValid = 0;.. 
1c850 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20     /* If the P3 
1c860 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20  value could not 
1c870 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
1c880 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74  o an integer wit
1c890 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73  hout.    ** loss
1c8a0 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c   of information,
1c8b0 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72   then special pr
1c8c0 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65 71 75  ocessing is requ
1c8d0 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69  ired... */.    i
1c8e0 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
1c8f0 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
1c900 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33  .      if( (pIn3
1c910 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
1c920 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  al)==0 ){.      
1c930 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76    /* If the P3 v
1c940 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63  alue cannot be c
1c950 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
1c960 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62  y kind of a numb
1c970 65 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  er,.        ** t
1c980 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20  hen the seek is 
1c990 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f  not possible, so
1c9a0 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20   jump to P2 */. 
1c9b0 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d         pc = pOp-
1c9c0 3e 70 32 20 2d 20 31 3b 20 20 56 64 62 65 42 72  >p2 - 1;  VdbeBr
1c9d0 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a  anchTaken(1,2);.
1c9e0 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1c9f0 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
1ca00 20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d   If the approxim
1ca10 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61  ation iKey is la
1ca20 72 67 65 72 20 74 68 61 6e 20 74 68 65 20 61 63  rger than the ac
1ca30 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68  tual real search
1ca40 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20  .      ** term, 
1ca50 73 75 62 73 74 69 74 75 74 65 20 3e 3d 20 66 6f  substitute >= fo
1ca60 72 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d  r > and < for <=
1ca70 2e 20 65 2e 67 2e 20 69 66 20 74 68 65 20 73 65  . e.g. if the se
1ca80 61 72 63 68 20 74 65 72 6d 0a 20 20 20 20 20 20  arch term.      
1ca90 2a 2a 20 69 73 20 34 2e 39 20 61 6e 64 20 74 68  ** is 4.9 and th
1caa0 65 20 69 6e 74 65 67 65 72 20 61 70 70 72 6f 78  e integer approx
1cab0 69 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20  imation 5:.     
1cac0 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20 20   **.      **    
1cad0 20 20 20 20 28 78 20 3e 20 20 34 2e 39 29 20 20      (x >  4.9)  
1cae0 20 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20 35    ->     (x >= 5
1caf0 29 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20  ).      **      
1cb00 20 20 28 78 20 3c 3d 20 34 2e 39 29 20 20 20 20    (x <= 4.9)    
1cb10 2d 3e 20 20 20 20 20 28 78 20 3c 20 20 35 29 0a  ->     (x <  5).
1cb20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
1cb30 66 28 20 70 49 6e 33 2d 3e 72 3c 28 64 6f 75 62  f( pIn3->r<(doub
1cb40 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20  le)iKey ){.     
1cb50 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65     assert( OP_Se
1cb60 65 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54  ekGE==(OP_SeekGT
1cb70 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  -1) );.        a
1cb80 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54  ssert( OP_SeekLT
1cb90 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20  ==(OP_SeekLE-1) 
1cba0 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1cbb0 74 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20  t( (OP_SeekLE & 
1cbc0 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65  0x0001)==(OP_See
1cbd0 6b 47 54 20 26 20 30 78 30 30 30 31 29 20 29 3b  kGT & 0x0001) );
1cbe0 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 63  .        if( (oc
1cbf0 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f   & 0x0001)==(OP_
1cc00 53 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29  SeekGT & 0x0001)
1cc10 20 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d   ) oc--;.      }
1cc20 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ..      /* If th
1cc30 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  e approximation 
1cc40 69 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65 72 20  iKey is smaller 
1cc50 74 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20  than the actual 
1cc60 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20  real search.    
1cc70 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74    ** term, subst
1cc80 69 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61  itute <= for < a
1cc90 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f  nd > for >=.  */
1cca0 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 28 20  .      else if( 
1ccb0 70 49 6e 33 2d 3e 72 3e 28 64 6f 75 62 6c 65 29  pIn3->r>(double)
1ccc0 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20  iKey ){.        
1ccd0 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c  assert( OP_SeekL
1cce0 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29  E==(OP_SeekLT+1)
1ccf0 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1cd00 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28  rt( OP_SeekGT==(
1cd10 4f 50 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a  OP_SeekGE+1) );.
1cd20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1cd30 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30  (OP_SeekLT & 0x0
1cd40 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45  001)==(OP_SeekGE
1cd50 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20   & 0x0001) );.  
1cd60 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20        if( (oc & 
1cd70 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65  0x0001)==(OP_See
1cd80 6b 4c 54 20 26 20 30 78 30 30 30 31 29 20 29 20  kLT & 0x0001) ) 
1cd90 6f 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  oc++;.      }.  
1cda0 20 20 7d 20 0a 20 20 20 20 72 63 20 3d 20 73 71    } .    rc = sq
1cdb0 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1cdc0 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
1cdd0 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b  rsor, 0, (u64)iK
1cde0 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20  ey, 0, &res);.  
1cdf0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1ce00 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
1ce10 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1ce20 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rror;.    }.    
1ce30 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
1ce40 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1ce50 61 6c 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20  alid = 1;.      
1ce60 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  pC->lastRowid = 
1ce70 69 4b 65 79 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  iKey;.    }.  }e
1ce80 6c 73 65 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20  lse{.    nField 
1ce90 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  = pOp->p4.i;.   
1cea0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
1ceb0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
1cec0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e 46  ;.    assert( nF
1ced0 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e  ield>0 );.    r.
1cee0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
1cef0 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e  KeyInfo;.    r.n
1cf00 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69  Field = (u16)nFi
1cf10 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65  eld;..    /* The
1cf20 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f   next line of co
1cf30 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66  de computes as f
1cf40 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73  ollows, only fas
1cf50 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66  ter:.    **   if
1cf60 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20  ( oc==OP_SeekGT 
1cf70 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45  || oc==OP_SeekLE
1cf80 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72   ){.    **     r
1cf90 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31  .default_rc = -1
1cfa0 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65  ;.    **   }else
1cfb0 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64  {.    **     r.d
1cfc0 65 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a  efault_rc = +1;.
1cfd0 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a      **   }.    *
1cfe0 2f 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  /.    r.default_
1cff0 72 63 20 3d 20 28 28 31 20 26 20 28 6f 63 20 2d  rc = ((1 & (oc -
1d000 20 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d   OP_SeekLT)) ? -
1d010 31 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73 73  1 : +1);.    ass
1d020 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1d030 47 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  GT || r.default_
1d040 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73  rc==-1 );.    as
1d050 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1d060 6b 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kLE || r.default
1d070 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61  _rc==-1 );.    a
1d080 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
1d090 65 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekGE || r.defaul
1d0a0 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20  t_rc==+1 );.    
1d0b0 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
1d0c0 65 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75  eekLT || r.defau
1d0d0 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20  lt_rc==+1 );..  
1d0e0 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
1d0f0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
1d100 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1d110 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28     { int i; for(
1d120 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
1d130 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
1d140 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
1d150 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
1d160 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28  .    ExpandBlob(
1d170 72 2e 61 4d 65 6d 29 3b 0a 20 20 20 20 72 63 20  r.aMem);.    rc 
1d180 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1d190 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1d1a0 3e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c  >pCursor, &r, 0,
1d1b0 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69   0, &res);.    i
1d1c0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1d1d0 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
1d1e0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1d1f0 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d  r;.    }.    pC-
1d200 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1d210 30 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66  0;.  }.  pC->def
1d220 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1d230 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
1d240 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1d250 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1d260 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73  TEST.  sqlite3_s
1d270 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
1d280 65 6e 64 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d  endif.  if( oc>=
1d290 4f 50 5f 53 65 65 6b 47 45 20 29 7b 20 20 61 73  OP_SeekGE ){  as
1d2a0 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
1d2b0 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGE || oc==OP_Se
1d2c0 65 6b 47 54 20 29 3b 0a 20 20 20 20 69 66 28 20  ekGT );.    if( 
1d2d0 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30  res<0 || (res==0
1d2e0 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   && oc==OP_SeekG
1d2f0 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  T) ){.      res 
1d300 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  = 0;.      rc = 
1d310 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
1d320 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1d330 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  es);.      if( r
1d340 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
1d350 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1d360 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 70 43  _error;.      pC
1d370 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1d380 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   0;.    }else{. 
1d390 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
1d3a0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
1d3b0 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f   assert( oc==OP_
1d3c0 53 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekLT || oc==OP
1d3d0 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69  _SeekLE );.    i
1d3e0 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73  f( res>0 || (res
1d3f0 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65  ==0 && oc==OP_Se
1d400 65 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20 20 72  ekLT) ){.      r
1d410 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63  es = 0;.      rc
1d420 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
1d430 72 65 76 69 6f 75 73 28 70 43 2d 3e 70 43 75 72  revious(pC->pCur
1d440 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
1d450 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1d460 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
1d470 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1d480 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73       pC->rowidIs
1d490 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 7d  Valid = 0;.    }
1d4a0 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72  else{.      /* r
1d4b0 65 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61  es might be nega
1d4c0 74 69 76 65 20 62 65 63 61 75 73 65 20 74 68 65  tive because the
1d4d0 20 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e   table is empty.
1d4e0 20 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20    Check to.     
1d4f0 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73 20   ** see if this 
1d500 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20  is the case..   
1d510 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 65 73 20     */.      res 
1d520 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f  = sqlite3BtreeEo
1d530 66 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  f(pC->pCursor);.
1d540 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65      }.  }.  asse
1d550 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
1d560 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
1d570 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
1d580 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70  if( res ){.    p
1d590 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1d5a0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1d5b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1d5c0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
1d5d0 53 79 6e 6f 70 73 69 73 3a 20 20 69 6e 74 6b 65  Synopsis:  intke
1d5e0 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 31  y=r[P2].**.** P1
1d5f0 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c   is an open tabl
1d600 65 20 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20  e cursor and P2 
1d610 69 73 20 61 20 72 6f 77 69 64 20 69 6e 74 65 67  is a rowid integ
1d620 65 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20  er.  Arrange.** 
1d630 66 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65 20 73  for P1 to move s
1d640 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
1d650 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 67 69   to the rowid gi
1d660 76 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a  ven by P2..**.**
1d670 20 54 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c   This is actuall
1d680 79 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65  y a deferred see
1d690 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75  k.  Nothing actu
1d6a0 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74  ally happens unt
1d6b0 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  il.** the cursor
1d6c0 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64   is used to read
1d6d0 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74   a record.  That
1d6e0 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64   way, if no read
1d6f0 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75  s.** occur, no u
1d700 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68  nnecessary I/O h
1d710 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20  appens..*/.case 
1d720 4f 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a  OP_Seek: {    /*
1d730 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75   in2 */.  VdbeCu
1d740 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73  rsor *pC;..  ass
1d750 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1d760 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1d770 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1d780 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1d790 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1d7a0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1d7b0 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
1d7c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1d7d0 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 70 43 2d  isTable );.  pC-
1d7e0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
1d7f0 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
1d800 2d 3e 70 32 5d 3b 0a 20 20 70 43 2d 3e 6d 6f 76  ->p2];.  pC->mov
1d810 65 74 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69  etoTarget = sqli
1d820 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
1d830 70 49 6e 32 29 3b 0a 20 20 70 43 2d 3e 72 6f 77  pIn2);.  pC->row
1d840 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1d850 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1d860 65 74 6f 20 3d 20 31 3b 0a 20 20 62 72 65 61 6b  eto = 1;.  break
1d870 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64  ;.}.  ../* Opcod
1d880 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50  e: Found P1 P2 P
1d890 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
1d8a0 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1d8b0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
1d8c0 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
1d8d0 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
1d8e0 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
1d8f0 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
1d900 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
1d910 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
1d920 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
1d930 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
1d940 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
1d950 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72  rd..**.** Cursor
1d960 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64   P1 is on an ind
1d970 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68  ex btree.  If th
1d980 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66  e record identif
1d990 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34  ied by P3 and P4
1d9a0 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78 20  .** is a prefix 
1d9b0 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20  of any entry in 
1d9c0 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69  P1 then a jump i
1d9d0 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64  s made to P2 and
1d9e0 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70  .** P1 is left p
1d9f0 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d  ointing at the m
1da00 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a  atching entry..*
1da10 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e  *.** See also: N
1da20 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c  otFound, NoConfl
1da30 69 63 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e 20  ict, NotExists. 
1da40 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekGe.*/./* Opc
1da50 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31  ode: NotFound P1
1da60 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1da70 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1da80 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50  3@P4].**.** If P
1da90 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74  4==0 then regist
1daa0 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
1dab0 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
1dac0 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49  y MakeRecord.  I
1dad0 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72  f.** P4>0 then r
1dae0 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
1daf0 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65  e first of P4 re
1db00 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72  gisters that for
1db10 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a  m an unpacked.**
1db20 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20   record..** .** 
1db30 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20  Cursor P1 is on 
1db40 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20  an index btree. 
1db50 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69   If the record i
1db60 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20  dentified by P3 
1db70 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74  and P4.** is not
1db80 20 74 68 65 20 70 72 65 66 69 78 20 6f 66 20 61   the prefix of a
1db90 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74  ny entry in P1 t
1dba0 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61  hen a jump is ma
1dbb0 64 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31  de to P2.  If P1
1dbc0 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69   .** does contai
1dbd0 6e 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65  n an entry whose
1dbe0 20 70 72 65 66 69 78 20 6d 61 74 63 68 65 73 20   prefix matches 
1dbf0 74 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64  the P3/P4 record
1dc00 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a   then control.**
1dc10 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74   falls through t
1dc20 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
1dc30 75 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73  uction and P1 is
1dc40 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
1dc50 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e  t the.** matchin
1dc60 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 53  g entry..**.** S
1dc70 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1dc80 4e 6f 74 45 78 69 73 74 73 2c 20 4e 6f 43 6f 6e  NotExists, NoCon
1dc90 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  flict.*/./* Opco
1dca0 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50  de: NoConflict P
1dcb0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
1dcc0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
1dcd0 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
1dce0 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73  P4==0 then regis
1dcf0 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
1dd00 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
1dd10 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
1dd20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20  If.** P4>0 then 
1dd30 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  register P3 is t
1dd40 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
1dd50 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
1dd60 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
1dd70 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a  * record..** .**
1dd80 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
1dd90 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
1dda0 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
1ddb0 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
1ddc0 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61   and P4.** conta
1ddd0 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c  ins any NULL val
1dde0 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  ue, jump immedia
1ddf0 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20  tely to P2.  If 
1de00 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74 68 65  all terms of the
1de10 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72 65 20 6e  .** record are n
1de20 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63  ot-NULL then a c
1de30 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20  heck is done to 
1de40 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 6e 79  determine if any
1de50 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50   row in the.** P
1de60 31 20 69 6e 64 65 78 20 62 74 72 65 65 20 68 61  1 index btree ha
1de70 73 20 61 20 6d 61 74 63 68 69 6e 67 20 6b 65 79  s a matching key
1de80 20 70 72 65 66 69 78 2e 20 20 49 66 20 74 68 65   prefix.  If the
1de90 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65  re are no matche
1dea0 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64  s, jump.** immed
1deb0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49  iately to P2.  I
1dec0 66 20 74 68 65 72 65 20 69 73 20 61 20 6d 61 74  f there is a mat
1ded0 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ch, fall through
1dee0 20 61 6e 64 20 6c 65 61 76 65 20 74 68 65 20 50   and leave the P
1def0 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e  1.** cursor poin
1df00 74 69 6e 67 20 74 6f 20 74 68 65 20 6d 61 74 63  ting to the matc
1df10 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20  hing row..**.** 
1df20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 73  This opcode is s
1df30 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74  imilar to OP_Not
1df40 46 6f 75 6e 64 20 77 69 74 68 20 74 68 65 20 65  Found with the e
1df50 78 63 65 70 74 69 6f 6e 73 20 74 68 61 74 20 74  xceptions that t
1df60 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73 20  he.** branch is 
1df70 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 69 66 20  always taken if 
1df80 61 6e 79 20 70 61 72 74 20 6f 66 20 74 68 65 20  any part of the 
1df90 73 65 61 72 63 68 20 6b 65 79 20 69 6e 70 75 74  search key input
1dfa0 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   is NULL..**.** 
1dfb0 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75  See also: NotFou
1dfc0 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78  nd, Found, NotEx
1dfd0 69 73 74 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ists.*/.case OP_
1dfe0 4e 6f 43 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20  NoConflict:     
1dff0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1e000 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  case OP_NotFound
1e010 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  :       /* jump,
1e020 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1e030 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20  Found: {        
1e040 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1e050 20 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69    int alreadyExi
1e060 73 74 73 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20  sts;.  int ii;. 
1e070 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1e080 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 63 68  .  int res;.  ch
1e090 61 72 20 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70  ar *pFree;.  Unp
1e0a0 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64  ackedRecord *pId
1e0b0 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64  xKey;.  Unpacked
1e0c0 52 65 63 6f 72 64 20 72 3b 0a 20 20 63 68 61 72  Record r;.  char
1e0d0 20 61 54 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38   aTempRec[ROUND8
1e0e0 28 73 69 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64  (sizeof(Unpacked
1e0f0 52 65 63 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f  Record)) + sizeo
1e100 66 28 4d 65 6d 29 2a 34 20 2b 20 37 5d 3b 0a 0a  f(Mem)*4 + 7];..
1e110 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
1e120 53 54 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  ST.  if( pOp->op
1e130 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c  code!=OP_NoConfl
1e140 69 63 74 20 29 20 73 71 6c 69 74 65 33 5f 66 6f  ict ) sqlite3_fo
1e150 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  und_count++;.#en
1e160 64 69 66 0a 0a 20 20 61 73 73 65 72 74 28 20 70  dif..  assert( p
1e170 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1e180 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1e190 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1e1a0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1e1b0 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  32 );.  pC = p->
1e1c0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1e1d0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1e1e0 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  );.  pIn3 = &aMe
1e1f0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
1e200 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
1e210 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
1e220 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
1e230 20 29 3b 0a 20 20 70 46 72 65 65 20 3d 20 30 3b   );.  pFree = 0;
1e240 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
1e250 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73    Only used to s
1e260 75 70 70 72 65 73 73 20 61 20 63 6f 6d 70 69 6c  uppress a compil
1e270 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20  er warning. */. 
1e280 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30   if( pOp->p4.i>0
1e290 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e   ){.    r.pKeyIn
1e2a0 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
1e2b0 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
1e2c0 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69  = (u16)pOp->p4.i
1e2d0 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70  ;.    r.aMem = p
1e2e0 49 6e 33 3b 0a 20 20 20 20 66 6f 72 28 69 69 3d  In3;.    for(ii=
1e2f0 30 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  0; ii<r.nField; 
1e300 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73  ii++){.      ass
1e310 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
1e320 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a  &r.aMem[ii]) );.
1e330 20 20 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62        ExpandBlob
1e340 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23  (&r.aMem[ii]);.#
1e350 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
1e360 55 47 0a 20 20 20 20 20 20 69 66 28 20 69 69 20  UG.      if( ii 
1e370 29 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  ) REGISTER_TRACE
1e380 28 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e  (pOp->p3+ii, &r.
1e390 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 65 6e 64 69  aMem[ii]);.#endi
1e3a0 66 0a 20 20 20 20 7d 0a 20 20 20 20 70 49 64 78  f.    }.    pIdx
1e3b0 4b 65 79 20 3d 20 26 72 3b 0a 20 20 7d 65 6c 73  Key = &r;.  }els
1e3c0 65 7b 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d  e{.    pIdxKey =
1e3d0 20 73 71 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f   sqlite3VdbeAllo
1e3e0 63 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28  cUnpackedRecord(
1e3f0 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 4b 65  .        pC->pKe
1e400 79 49 6e 66 6f 2c 20 61 54 65 6d 70 52 65 63 2c  yInfo, aTempRec,
1e410 20 73 69 7a 65 6f 66 28 61 54 65 6d 70 52 65 63   sizeof(aTempRec
1e420 29 2c 20 26 70 46 72 65 65 0a 20 20 20 20 29 3b  ), &pFree.    );
1e430 20 0a 20 20 20 20 69 66 28 20 70 49 64 78 4b 65   .    if( pIdxKe
1e440 79 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  y==0 ) goto no_m
1e450 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  em;.    assert( 
1e460 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
1e470 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 61 73  M_Blob );.    as
1e480 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61  sert( (pIn3->fla
1e490 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 29 3d 3d  gs & MEM_Zero)==
1e4a0 30 20 29 3b 20 20 2f 2a 20 7a 65 72 6f 62 6c 6f  0 );  /* zeroblo
1e4b0 62 73 20 61 6c 72 65 61 64 79 20 65 78 70 61 6e  bs already expan
1e4c0 64 65 64 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  ded */.    sqlit
1e4d0 65 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61  e3VdbeRecordUnpa
1e4e0 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c  ck(pC->pKeyInfo,
1e4f0 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e   pIn3->n, pIn3->
1e500 7a 2c 20 70 49 64 78 4b 65 79 29 3b 0a 20 20 7d  z, pIdxKey);.  }
1e510 0a 20 20 70 49 64 78 4b 65 79 2d 3e 64 65 66 61  .  pIdxKey->defa
1e520 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 69 66  ult_rc = 0;.  if
1e530 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1e540 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 7b 0a  P_NoConflict ){.
1e550 20 20 20 20 2f 2a 20 46 6f 72 20 74 68 65 20 4f      /* For the O
1e560 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f 70 63  P_NoConflict opc
1e570 6f 64 65 2c 20 74 61 6b 65 20 74 68 65 20 6a 75  ode, take the ju
1e580 6d 70 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65  mp if any of the
1e590 0a 20 20 20 20 2a 2a 20 69 6e 70 75 74 20 66 69  .    ** input fi
1e5a0 65 6c 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 73  elds are NULL, s
1e5b0 69 6e 63 65 20 61 6e 79 20 6b 65 79 20 77 69 74  ince any key wit
1e5c0 68 20 61 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f  h a NULL will no
1e5d0 74 0a 20 20 20 20 2a 2a 20 63 6f 6e 66 6c 69 63  t.    ** conflic
1e5e0 74 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 69 3d  t */.    for(ii=
1e5f0 30 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  0; ii<r.nField; 
1e600 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28  ii++){.      if(
1e610 20 72 2e 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67   r.aMem[ii].flag
1e620 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
1e630 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70          pc = pOp
1e640 2d 3e 70 32 20 2d 20 31 3b 20 56 64 62 65 42 72  ->p2 - 1; VdbeBr
1e650 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a  anchTaken(1,2);.
1e660 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1e670 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
1e680 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1e690 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1e6a0 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
1e6b0 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26  pIdxKey, 0, 0, &
1e6c0 72 65 73 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  res);.  if( pOp-
1e6d0 3e 70 34 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20  >p4.i==0 ){.    
1e6e0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
1e6f0 2c 20 70 46 72 65 65 29 3b 0a 20 20 7d 0a 20 20  , pFree);.  }.  
1e700 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1e710 4b 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  K ){.    break;.
1e720 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65    }.  pC->seekRe
1e730 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61 6c  sult = res;.  al
1e740 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28 72  readyExists = (r
1e750 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e 75  es==0);.  pC->nu
1e760 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61 64  llRow = 1-alread
1e770 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e 64  yExists;.  pC->d
1e780 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1e790 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
1e7a0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1e7b0 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  LE;.  if( pOp->o
1e7c0 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20  pcode==OP_Found 
1e7d0 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
1e7e0 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45 78  hTaken(alreadyEx
1e7f0 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20  ists!=0,2);.    
1e800 69 66 28 20 61 6c 72 65 61 64 79 45 78 69 73 74  if( alreadyExist
1e810 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  s ) pc = pOp->p2
1e820 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   - 1;.  }else{. 
1e830 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
1e840 65 6e 28 61 6c 72 65 61 64 79 45 78 69 73 74 73  en(alreadyExists
1e850 3d 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20  ==0,2);.    if( 
1e860 21 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29  !alreadyExists )
1e870 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1e880 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
1e890 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
1e8a0 74 45 78 69 73 74 73 20 50 31 20 50 32 20 50 33  tExists P1 P2 P3
1e8b0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
1e8c0 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a  : intkey=r[P3].*
1e8d0 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69  *.** P1 is the i
1e8e0 6e 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72  ndex of a cursor
1e8f0 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20   open on an SQL 
1e900 74 61 62 6c 65 20 62 74 72 65 65 20 28 77 69 74  table btree (wit
1e910 68 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79  h integer.** key
1e920 73 29 2e 20 20 50 33 20 69 73 20 61 6e 20 69 6e  s).  P3 is an in
1e930 74 65 67 65 72 20 72 6f 77 69 64 2e 20 20 49 66  teger rowid.  If
1e940 20 50 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e   P1 does not con
1e950 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69  tain a record wi
1e960 74 68 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20 74  th.** rowid P3 t
1e970 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
1e980 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20  tely to P2.  If 
1e990 50 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20  P1 does contain 
1e9a0 61 20 72 65 63 6f 72 64 0a 2a 2a 20 77 69 74 68  a record.** with
1e9b0 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6c   rowid P3 then l
1e9c0 65 61 76 65 20 74 68 65 20 63 75 72 73 6f 72 20  eave the cursor 
1e9d0 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74  pointing at that
1e9e0 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c   record and fall
1e9f0 0a 2a 2a 20 74 68 72 6f 75 67 68 20 74 6f 20 74  .** through to t
1ea00 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
1ea10 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f  ion..**.** The O
1ea20 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64  P_NotFound opcod
1ea30 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73  e performs the s
1ea40 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e  ame operation on
1ea50 20 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a   index btrees.**
1ea60 20 28 77 69 74 68 20 61 72 62 69 74 72 61 72 79   (with arbitrary
1ea70 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79   multi-value key
1ea80 73 29 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  s)..**.** See al
1ea90 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1eaa0 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a  und, NoConflict.
1eab0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78  */.case OP_NotEx
1eac0 69 73 74 73 3a 20 7b 20 20 20 20 20 20 20 20 2f  ists: {        /
1ead0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
1eae0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1eaf0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
1eb00 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  sr;.  int res;. 
1eb10 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49   u64 iKey;..  pI
1eb20 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
1eb30 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
1eb40 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1eb50 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74  _Int );.  assert
1eb60 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1eb70 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1eb80 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1eb90 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1eba0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1ebb0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1ebc0 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73  >isTable );.  as
1ebd0 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
1ebe0 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20  TableReg==0 );. 
1ebf0 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
1ec00 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
1ec10 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 65  pCrsr!=0 );.  re
1ec20 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20  s = 0;.  iKey = 
1ec30 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20  pIn3->u.i;.  rc 
1ec40 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1ec50 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
1ec60 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20  sr, 0, iKey, 0, 
1ec70 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6c 61 73  &res);.  pC->las
1ec80 74 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75  tRowid = pIn3->u
1ec90 2e 69 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49  .i;.  pC->rowidI
1eca0 73 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30 20  sValid = res==0 
1ecb0 3f 31 3a 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  ?1:0;.  pC->null
1ecc0 52 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  Row = 0;.  pC->c
1ecd0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1ece0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e  HE_STALE;.  pC->
1ecf0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1ed00 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   0;.  VdbeBranch
1ed10 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
1ed20 0a 20 20 69 66 28 20 72 65 73 21 3d 30 20 29 7b  .  if( res!=0 ){
1ed30 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
1ed40 32 20 2d 20 31 3b 0a 20 20 20 20 61 73 73 65 72  2 - 1;.    asser
1ed50 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  t( pC->rowidIsVa
1ed60 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 7d 0a 20 20  lid==0 );.  }.  
1ed70 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
1ed80 20 72 65 73 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   res;.  break;.}
1ed90 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71  ../* Opcode: Seq
1eda0 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20  uence P1 P2 * * 
1edb0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
1edc0 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a  [P2]=rowid.**.**
1edd0 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61   Find the next a
1ede0 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63  vailable sequenc
1edf0 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72  e number for cur
1ee00 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65  sor P1..** Write
1ee10 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75   the sequence nu
1ee20 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74  mber into regist
1ee30 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65  er P2..** The se
1ee40 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e  quence number on
1ee50 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 69   the cursor is i
1ee60 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72  ncremented after
1ee70 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63   this.** instruc
1ee80 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20  tion.  .*/.case 
1ee90 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20  OP_Sequence: {  
1eea0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
1eeb0 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
1eec0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1eed0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1eee0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
1eef0 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
1ef00 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20  pOp->p1]!=0 );. 
1ef10 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e   pOut->u.i = p->
1ef20 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
1ef30 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72  seqCount++;.  br
1ef40 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
1ef50 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20  de: NewRowid P1 
1ef60 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
1ef70 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
1ef80 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e  id.**.** Get a n
1ef90 65 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72  ew integer recor
1efa0 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20  d number (a.k.a 
1efb0 22 72 6f 77 69 64 22 29 20 75 73 65 64 20 61 73  "rowid") used as
1efc0 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61   the key to a ta
1efd0 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f  ble..** The reco
1efe0 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74  rd number is not
1eff0 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64   previously used
1f000 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65   as a key in the
1f010 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62   database.** tab
1f020 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72 20 50  le that cursor P
1f030 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68  1 points to.  Th
1f040 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  e new record num
1f050 62 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a  ber is written.*
1f060 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67  * written to reg
1f070 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
1f080 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20  If P3>0 then P3 
1f090 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e  is a register in
1f0a0 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20   the root frame 
1f0b0 6f 66 20 74 68 69 73 20 56 44 42 45 20 74 68 61  of this VDBE tha
1f0c0 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20  t holds .** the 
1f0d0 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f 75 73  largest previous
1f0e0 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72 65 63  ly generated rec
1f0f0 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e  ord number. No n
1f100 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ew record number
1f110 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64  s are.** allowed
1f120 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e   to be less than
1f130 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65   this value. Whe
1f140 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72 65 61  n this value rea
1f150 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d  ches its maximum
1f160 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f  , .** an SQLITE_
1f170 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65  FULL error is ge
1f180 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50 33 20  nerated. The P3 
1f190 72 65 67 69 73 74 65 72 20 69 73 20 75 70 64 61  register is upda
1f1a0 74 65 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a  ted with the '.*
1f1b0 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f  * generated reco
1f1c0 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20  rd number. This 
1f1d0 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20  P3 mechanism is 
1f1e0 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70  used to help imp
1f1f0 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55  lement the.** AU
1f200 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74  TOINCREMENT feat
1f210 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ure..*/.case OP_
1f220 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20  NewRowid: {     
1f230 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
1f240 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36  erelease */.  i6
1f250 34 20 76 3b 20 20 20 20 20 20 20 20 20 20 20 20  4 v;            
1f260 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20       /* The new 
1f270 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43  rowid */.  VdbeC
1f280 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20  ursor *pC;      
1f290 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74    /* Cursor of t
1f2a0 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20  able to get the 
1f2b0 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69  new rowid */.  i
1f2c0 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20  nt res;         
1f2d0 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
1f2e0 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72  of an sqlite3Btr
1f2f0 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e  eeLast() */.  in
1f300 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20  t cnt;          
1f310 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20       /* Counter 
1f320 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d  to limit the num
1f330 62 65 72 20 6f 66 20 73 65 61 72 63 68 65 73 20  ber of searches 
1f340 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20  */.  Mem *pMem; 
1f350 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
1f360 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1f370 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f  largest rowid fo
1f380 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  r AUTOINCREMENT 
1f390 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
1f3a0 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52  pFrame;     /* R
1f3b0 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42  oot frame of VDB
1f3c0 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20  E */..  v = 0;. 
1f3d0 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65   res = 0;.  asse
1f3e0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1f3f0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1f400 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1f410 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1f420 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1f430 30 20 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  0 );.  if( NEVER
1f440 28 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 29  (pC->pCursor==0)
1f450 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 7a   ){.    /* The z
1f460 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ero initializati
1f470 6f 6e 20 61 62 6f 76 65 20 69 73 20 61 6c 6c 20  on above is all 
1f480 74 68 61 74 20 69 73 20 6e 65 65 64 65 64 20 2a  that is needed *
1f490 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  /.  }else{.    /
1f4a0 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64  * The next rowid
1f4b0 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65   or record numbe
1f4c0 72 20 28 64 69 66 66 65 72 65 6e 74 20 74 65 72  r (different ter
1f4d0 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a  ms for the same.
1f4e0 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73      ** thing) is
1f4f0 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74   obtained in a t
1f500 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68  wo-step algorith
1f510 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  m..    **.    **
1f520 20 46 69 72 73 74 20 77 65 20 61 74 74 65 6d 70   First we attemp
1f530 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61  t to find the la
1f540 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72  rgest existing r
1f550 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65  owid and add one
1f560 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e  .    ** to that.
1f570 20 20 42 75 74 20 69 66 20 74 68 65 20 6c 61 72    But if the lar
1f580 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f  gest existing ro
1f590 77 69 64 20 69 73 20 61 6c 72 65 61 64 79 20 74  wid is already t
1f5a0 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a  he maximum.    *
1f5b0 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67  * positive integ
1f5c0 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66  er, we have to f
1f5d0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
1f5e0 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a  he second.    **
1f5f0 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61   probabilistic a
1f600 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a  lgorithm.    **.
1f610 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e      ** The secon
1f620 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74  d algorithm is t
1f630 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64  o select a rowid
1f640 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73   at random and s
1f650 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20  ee if.    ** it 
1f660 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 20 69  already exists i
1f670 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66  n the table.  If
1f680 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
1f690 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20  st, we have.    
1f6a0 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20 49  ** succeeded.  I
1f6b0 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77  f the random row
1f6c0 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77  id does exist, w
1f6d0 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f  e select a new o
1f6e0 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72  ne.    ** and tr
1f6f0 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31  y again, up to 1
1f700 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f  00 times..    */
1f710 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1f720 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66  >isTable );..#if
1f730 64 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54  def SQLITE_32BIT
1f740 5f 52 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e  _ROWID.#   defin
1f750 65 20 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66  e MAX_ROWID 0x7f
1f760 66 66 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20  ffffff.#else.   
1f770 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65   /* Some compile
1f780 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75  rs complain abou
1f790 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74  t constants of t
1f7a0 68 65 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66  he form 0x7fffff
1f7b0 66 66 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20  ffffffffff..    
1f7c0 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61  ** Others compla
1f7d0 69 6e 20 61 62 6f 75 74 20 30 78 37 66 66 66 66  in about 0x7ffff
1f7e0 66 66 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20  ffffffffffffLL. 
1f7f0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
1f800 61 63 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a  acro seems.    *
1f810 2a 20 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65  * to provide the
1f820 20 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20   constant while 
1f830 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69  making all compi
1f840 6c 65 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20  lers happy..    
1f850 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41  */.#   define MA
1f860 58 5f 52 4f 57 49 44 20 20 28 69 36 34 29 28 20  X_ROWID  (i64)( 
1f870 28 28 28 75 36 34 29 30 78 37 66 66 66 66 66 66  (((u64)0x7ffffff
1f880 66 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30  f)<<32) | (u64)0
1f890 78 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64  xffffffff ).#end
1f8a0 69 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d  if..    if( !pC-
1f8b0 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
1f8c0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
1f8d0 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70  lite3BtreeLast(p
1f8e0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  C->pCursor, &res
1f8f0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
1f900 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1f910 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1f920 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1f930 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
1f940 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20   res ){.        
1f950 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a  v = 1;   /* IMP:
1f960 20 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a   R-61914-48074 *
1f970 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  /.      }else{. 
1f980 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
1f990 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1f9a0 72 49 73 56 61 6c 69 64 28 70 43 2d 3e 70 43 75  rIsValid(pC->pCu
1f9b0 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
1f9c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1f9d0 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43  eeKeySize(pC->pC
1f9e0 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20  ursor, &v);.    
1f9f0 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
1fa00 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f  SQLITE_OK );   /
1fa10 2a 20 43 61 6e 6e 6f 74 20 66 61 69 6c 20 66 6f  * Cannot fail fo
1fa20 6c 6c 6f 77 69 6e 67 20 42 74 72 65 65 4c 61 73  llowing BtreeLas
1fa30 74 28 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  t() */.        i
1fa40 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49 44 20  f( v>=MAX_ROWID 
1fa50 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d  ){.          pC-
1fa60 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
1fa70 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 1;.        }el
1fa80 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 76 2b  se{.          v+
1fa90 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32  +;   /* IMP: R-2
1faa0 39 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20  9538-34987 */.  
1fab0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
1fac0 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53      }..#ifndef S
1fad0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
1fae0 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 69 66 28  NCREMENT.    if(
1faf0 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20   pOp->p3 ){.    
1fb00 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
1fb10 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
1fb20 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20  emory cell. */. 
1fb30 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1fb40 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
1fb50 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b  if( p->pFrame ){
1fb60 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70 46 72  .        for(pFr
1fb70 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70  ame=p->pFrame; p
1fb80 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20  Frame->pParent; 
1fb90 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
1fba0 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20  Parent);.       
1fbb0 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
1fbc0 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65  P3 is a valid me
1fbd0 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20  mory cell. */.  
1fbe0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
1fbf0 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e  p->p3<=pFrame->n
1fc00 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 70  Mem );.        p
1fc10 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61  Mem = &pFrame->a
1fc20 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
1fc30 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1fc40 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
1fc50 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
1fc60 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
1fc70 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1fc80 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
1fc90 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
1fca0 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20  .        pMem = 
1fcb0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1fcc0 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74          memAbout
1fcd0 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d  ToChange(p, pMem
1fce0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
1fcf0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1fd00 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20  lid(pMem) );..  
1fd10 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
1fd20 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d  CE(pOp->p3, pMem
1fd30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
1fd40 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
1fd50 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 61  y(pMem);.      a
1fd60 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
1fd70 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
1fd80 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29  0 );  /* mem(P3)
1fd90 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
1fda0 72 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70  r */.      if( p
1fdb0 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f  Mem->u.i==MAX_RO
1fdc0 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61  WID || pC->useRa
1fdd0 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20  ndomRowid ){.   
1fde0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
1fdf0 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a  _FULL;   /* IMP:
1fe00 20 52 2d 31 32 32 37 35 2d 36 31 33 33 38 20 2a   R-12275-61338 *
1fe10 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  /.        goto a
1fe20 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1fe30 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
1fe40 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69   if( v<pMem->u.i
1fe50 2b 31 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20  +1 ){.        v 
1fe60 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b  = pMem->u.i + 1;
1fe70 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
1fe80 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Mem->u.i = v;.  
1fe90 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 69    }.#endif.    i
1fea0 66 28 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  f( pC->useRandom
1feb0 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 2f  Rowid ){.      /
1fec0 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e  * IMPLEMENTATION
1fed0 2d 4f 46 3a 20 52 2d 30 37 36 37 37 2d 34 31 38  -OF: R-07677-418
1fee0 38 31 20 49 66 20 74 68 65 20 6c 61 72 67 65 73  81 If the larges
1fef0 74 20 52 4f 57 49 44 20 69 73 20 65 71 75 61 6c  t ROWID is equal
1ff00 20 74 6f 20 74 68 65 0a 20 20 20 20 20 20 2a 2a   to the.      **
1ff10 20 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c   largest possibl
1ff20 65 20 69 6e 74 65 67 65 72 20 28 39 32 32 33 33  e integer (92233
1ff30 37 32 30 33 36 38 35 34 37 37 35 38 30 37 29 20  72036854775807) 
1ff40 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73  then the databas
1ff50 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e  e.      ** engin
1ff60 65 20 73 74 61 72 74 73 20 70 69 63 6b 69 6e 67  e starts picking
1ff70 20 70 6f 73 69 74 69 76 65 20 63 61 6e 64 69 64   positive candid
1ff80 61 74 65 20 52 4f 57 49 44 73 20 61 74 20 72 61  ate ROWIDs at ra
1ff90 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20  ndom until.     
1ffa0 20 2a 2a 20 69 74 20 66 69 6e 64 73 20 6f 6e 65   ** it finds one
1ffb0 20 74 68 61 74 20 69 73 20 6e 6f 74 20 70 72 65   that is not pre
1ffc0 76 69 6f 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f  viously used. */
1ffd0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1ffe0 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a  Op->p3==0 );  /*
1fff0 20 57 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e   We cannot be in
20000 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f   random rowid mo
20010 64 65 20 69 66 20 74 68 69 73 20 69 73 0a 20 20  de if this is.  
20020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20030 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e             ** an
20040 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74   AUTOINCREMENT t
20050 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 2f  able. */.      /
20060 2a 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20 61  * on the first a
20070 74 74 65 6d 70 74 2c 20 73 69 6d 70 6c 79 20 64  ttempt, simply d
20080 6f 20 6f 6e 65 20 6d 6f 72 65 20 74 68 61 6e 20  o one more than 
20090 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20  previous */.    
200a0 20 20 76 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b    v = lastRowid;
200b0 0a 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58  .      v &= (MAX
200c0 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65  _ROWID>>1); /* e
200d0 6e 73 75 72 65 20 64 6f 65 73 6e 27 74 20 67 6f  nsure doesn't go
200e0 20 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 20   negative */.   
200f0 20 20 20 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72     v++; /* ensur
20100 65 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20  e non-zero */.  
20110 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20      cnt = 0;.   
20120 20 20 20 77 68 69 6c 65 28 20 20 20 28 28 72 63     while(   ((rc
20130 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
20140 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
20150 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75  ->pCursor, 0, (u
20160 36 34 29 76 2c 0a 20 20 20 20 20 20 20 20 20 20  64)v,.          
20170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20190 20 20 20 20 20 20 20 30 2c 20 26 72 65 73 29 29         0, &res))
201a0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20  ==SQLITE_OK).   
201b0 20 20 20 20 20 20 20 20 20 26 26 20 28 72 65 73           && (res
201c0 3d 3d 30 29 0a 20 20 20 20 20 20 20 20 20 20 20  ==0).           
201d0 20 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29   && (++cnt<100))
201e0 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c  {.        /* col
201f0 6c 69 73 69 6f 6e 20 2d 20 74 72 79 20 61 6e 6f  lision - try ano
20200 74 68 65 72 20 72 61 6e 64 6f 6d 20 72 6f 77 69  ther random rowi
20210 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c  d */.        sql
20220 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28  ite3_randomness(
20230 73 69 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a  sizeof(v), &v);.
20240 20 20 20 20 20 20 20 20 69 66 28 20 63 6e 74 3c          if( cnt<
20250 35 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f  5 ){.          /
20260 2a 20 74 72 79 20 22 73 6d 61 6c 6c 22 20 72 61  * try "small" ra
20270 6e 64 6f 6d 20 72 6f 77 69 64 73 20 66 6f 72 20  ndom rowids for 
20280 74 68 65 20 69 6e 69 74 69 61 6c 20 61 74 74 65  the initial atte
20290 6d 70 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20  mpts */.        
202a0 20 20 76 20 26 3d 20 30 78 66 66 66 66 66 66 3b    v &= 0xffffff;
202b0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
202c0 20 20 20 20 20 20 20 20 20 20 76 20 26 3d 20 28            v &= (
202d0 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 2f  MAX_ROWID>>1); /
202e0 2a 20 65 6e 73 75 72 65 20 64 6f 65 73 6e 27 74  * ensure doesn't
202f0 20 67 6f 20 6e 65 67 61 74 69 76 65 20 2a 2f 0a   go negative */.
20300 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
20310 20 20 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65    v++; /* ensure
20320 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20   non-zero */.   
20330 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72     }.      if( r
20340 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
20350 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  res==0 ){.      
20360 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55    rc = SQLITE_FU
20370 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d  LL;   /* IMP: R-
20380 33 38 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20  38219-53002 */. 
20390 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
203a0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
203b0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73        }.      as
203c0 73 65 72 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a  sert( v>0 );  /*
203d0 20 45 56 3a 20 52 2d 34 30 38 31 32 2d 30 33 35   EV: R-40812-035
203e0 37 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20  70 */.    }.    
203f0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
20400 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65   = 0;.    pC->de
20410 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
20420 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
20430 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
20440 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  ALE;.  }.  pOut-
20450 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61  >u.i = v;.  brea
20460 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
20470 20 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33   Insert P1 P2 P3
20480 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
20490 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d  is: intkey=r[P3]
204a0 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a   data=r[P2].**.*
204b0 2a 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79  * Write an entry
204c0 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20   into the table 
204d0 6f 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41  of cursor P1.  A
204e0 20 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a   new entry is.**
204f0 20 63 72 65 61 74 65 64 20 69 66 20 69 74 20 64   created if it d
20500 6f 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65  oesn't already e
20510 78 69 73 74 20 6f 72 20 74 68 65 20 64 61 74 61  xist or the data
20520 20 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67   for an existing
20530 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65  .** entry is ove
20540 72 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64  rwritten.  The d
20550 61 74 61 20 69 73 20 74 68 65 20 76 61 6c 75 65  ata is the value
20560 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64   MEM_Blob stored
20570 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20   in register.** 
20580 6e 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b  number P2. The k
20590 65 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ey is stored in 
205a0 72 65 67 69 73 74 65 72 20 50 33 2e 20 54 68 65  register P3. The
205b0 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20   key must.** be 
205c0 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a  a MEM_Int..**.**
205d0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e   If the OPFLAG_N
205e0 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50  CHANGE flag of P
205f0 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74  5 is set, then t
20600 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f  he row change co
20610 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d  unt is.** increm
20620 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65  ented (otherwise
20630 20 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f   not).  If the O
20640 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
20650 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
20660 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64  t,.** then rowid
20670 20 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73   is stored for s
20680 75 62 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e  ubsequent return
20690 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   by the.** sqlit
206a0 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
206b0 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20  owid() function 
206c0 28 6f 74 68 65 72 77 69 73 65 20 69 74 20 69 73  (otherwise it is
206d0 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a   unmodified)..**
206e0 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
206f0 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
20700 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
20710 74 20 61 6e 64 20 69 66 20 74 68 65 20 72 65 73  t and if the res
20720 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 6c 61  ult of.** the la
20730 73 74 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f  st seek operatio
20740 6e 20 28 4f 50 5f 4e 6f 74 45 78 69 73 74 73 29  n (OP_NotExists)
20750 20 77 61 73 20 61 20 73 75 63 63 65 73 73 2c 20   was a success, 
20760 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 65  then this.** ope
20770 72 61 74 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20  ration will not 
20780 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20  attempt to find 
20790 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  the appropriate 
207a0 72 6f 77 20 62 65 66 6f 72 65 20 64 6f 69 6e 67  row before doing
207b0 0a 2a 2a 20 74 68 65 20 69 6e 73 65 72 74 20 62  .** the insert b
207c0 75 74 20 77 69 6c 6c 20 69 6e 73 74 65 61 64 20  ut will instead 
207d0 6f 76 65 72 77 72 69 74 65 20 74 68 65 20 72 6f  overwrite the ro
207e0 77 20 74 68 61 74 20 74 68 65 20 63 75 72 73 6f  w that the curso
207f0 72 20 69 73 0a 2a 2a 20 63 75 72 72 65 6e 74 6c  r is.** currentl
20800 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20  y pointing to.  
20810 50 72 65 73 75 6d 61 62 6c 79 2c 20 74 68 65 20  Presumably, the 
20820 70 72 69 6f 72 20 4f 50 5f 4e 6f 74 45 78 69 73  prior OP_NotExis
20830 74 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 68 61 73  ts opcode.** has
20840 20 61 6c 72 65 61 64 79 20 70 6f 73 69 74 69 6f   already positio
20850 6e 65 64 20 74 68 65 20 63 75 72 73 6f 72 20 63  ned the cursor c
20860 6f 72 72 65 63 74 6c 79 2e 20 20 54 68 69 73 20  orrectly.  This 
20870 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69  is an optimizati
20880 6f 6e 0a 2a 2a 20 74 68 61 74 20 62 6f 6f 73 74  on.** that boost
20890 73 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 62 79  s performance by
208a0 20 61 76 6f 69 64 69 6e 67 20 72 65 64 75 6e 64   avoiding redund
208b0 61 6e 74 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a  ant seeks..**.**
208c0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49   If the OPFLAG_I
208d0 53 55 50 44 41 54 45 20 66 6c 61 67 20 69 73 20  SUPDATE flag is 
208e0 73 65 74 2c 20 74 68 65 6e 20 74 68 69 73 20 6f  set, then this o
208f0 70 63 6f 64 65 20 69 73 20 70 61 72 74 20 6f 66  pcode is part of
20900 20 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70   an.** UPDATE op
20910 65 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77  eration.  Otherw
20920 69 73 65 20 28 69 66 20 74 68 65 20 66 6c 61 67  ise (if the flag
20930 20 69 73 20 63 6c 65 61 72 29 20 74 68 65 6e 20   is clear) then 
20940 74 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  this opcode.** i
20950 73 20 70 61 72 74 20 6f 66 20 61 6e 20 49 4e 53  s part of an INS
20960 45 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  ERT operation.  
20970 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 69  The difference i
20980 73 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74  s only important
20990 20 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61 74   to.** the updat
209a0 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61  e hook..**.** Pa
209b0 72 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70  rameter P4 may p
209c0 6f 69 6e 74 20 74 6f 20 61 20 73 74 72 69 6e 67  oint to a string
209d0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
209e0 74 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a  table-name, or.*
209f0 2a 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49  * may be NULL. I
20a00 66 20 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f it is not NULL
20a10 2c 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74  , then the updat
20a20 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69  e-hook .** (sqli
20a30 74 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62  te3.xUpdateCallb
20a40 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20  ack) is invoked 
20a50 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63  following a succ
20a60 65 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a  essful insert..*
20a70 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f  *.** (WARNING/TO
20a80 44 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20 70  DO: If P1 is a p
20a90 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64  seudo-cursor and
20aa0 20 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c   P2 is dynamical
20ab0 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c  ly.** allocated,
20ac0 20 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20   then ownership 
20ad0 6f 66 20 50 32 20 69 73 20 74 72 61 6e 73 66 65  of P2 is transfe
20ae0 72 72 65 64 20 74 6f 20 74 68 65 20 70 73 65 75  rred to the pseu
20af0 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64  do-cursor.** and
20b00 20 72 65 67 69 73 74 65 72 20 50 32 20 62 65 63   register P2 bec
20b10 6f 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20  omes ephemeral. 
20b20 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   If the cursor i
20b30 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a  s changed, the.*
20b40 2a 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  * value of regis
20b50 74 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e  ter P2 will then
20b60 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73   change.  Make s
20b70 75 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f  ure this does no
20b80 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70  t.** cause any p
20b90 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20  roblems.).**.** 
20ba0 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
20bb0 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74   only works on t
20bc0 61 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69  ables.  The equi
20bd0 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69  valent instructi
20be0 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65  on.** for indice
20bf0 73 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72  s is OP_IdxInser
20c00 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t..*/./* Opcode:
20c10 20 49 6e 73 65 72 74 49 6e 74 20 50 31 20 50 32   InsertInt P1 P2
20c20 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
20c30 6f 70 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d 50  opsis:  intkey=P
20c40 33 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a  3 data=r[P2].**.
20c50 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 65 78  ** This works ex
20c60 61 63 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e  actly like OP_In
20c70 73 65 72 74 20 65 78 63 65 70 74 20 74 68 61 74  sert except that
20c80 20 74 68 65 20 6b 65 79 20 69 73 20 74 68 65 0a   the key is the.
20c90 2a 2a 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ** integer value
20ca0 20 50 33 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c   P3, not the val
20cb0 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65  ue of the intege
20cc0 72 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  r stored in regi
20cd0 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65  ster P3..*/.case
20ce0 20 4f 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73   OP_Insert: .cas
20cf0 65 20 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20  e OP_InsertInt: 
20d00 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20  {.  Mem *pData; 
20d10 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c        /* MEM cel
20d20 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74 61 20 66  l holding data f
20d30 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  or the record to
20d40 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a   be inserted */.
20d50 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20    Mem *pKey;    
20d60 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20      /* MEM cell 
20d70 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f 72  holding key  for
20d80 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
20d90 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20   i64 iKey;      
20da0 20 20 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65     /* The intege
20db0 72 20 52 4f 57 49 44 20 6f 72 20 6b 65 79 20 66  r ROWID or key f
20dc0 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  or the record to
20dd0 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a   be inserted */.
20de0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
20df0 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f  ;   /* Cursor to
20e00 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68 69 63   table into whic
20e10 68 20 69 6e 73 65 72 74 20 69 73 20 77 72 69 74  h insert is writ
20e20 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65  ten */.  int nZe
20e30 72 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ro;        /* Nu
20e40 6d 62 65 72 20 6f 66 20 7a 65 72 6f 2d 62 79 74  mber of zero-byt
20e50 65 73 20 74 6f 20 61 70 70 65 6e 64 20 2a 2f 0a  es to append */.
20e60 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74    int seekResult
20e70 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66  ;   /* Result of
20e80 20 70 72 69 6f 72 20 73 65 65 6b 20 6f 72 20 30   prior seek or 0
20e90 20 69 66 20 6e 6f 20 55 53 45 53 45 45 4b 52 45   if no USESEEKRE
20ea0 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63  SULT flag */.  c
20eb0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20  onst char *zDb; 
20ec0 20 2f 2a 20 64 61 74 61 62 61 73 65 20 6e 61 6d   /* database nam
20ed0 65 20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20  e - used by the 
20ee0 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20  update hook */. 
20ef0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62   const char *zTb
20f00 6c 3b 20 2f 2a 20 54 61 62 6c 65 20 6e 61 6d 65  l; /* Table name
20f10 20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20 6f   - used by the o
20f20 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20  pdate hook */.  
20f30 69 6e 74 20 6f 70 3b 20 20 20 20 20 20 20 20 20  int op;         
20f40 20 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20    /* Opcode for 
20f50 75 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c  update hook: SQL
20f60 49 54 45 5f 55 50 44 41 54 45 20 6f 72 20 53 51  ITE_UPDATE or SQ
20f70 4c 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a  LITE_INSERT */..
20f80 20 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b    pData = &aMem[
20f90 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
20fa0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
20fb0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
20fc0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
20fd0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61  ( memIsValid(pDa
20fe0 74 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  ta) );.  pC = p-
20ff0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
21000 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
21010 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
21020 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  ->pCursor!=0 );.
21030 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73    assert( pC->ps
21040 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20  eudoTableReg==0 
21050 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
21060 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 52 45  >isTable );.  RE
21070 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
21080 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20  ->p2, pData);.. 
21090 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
210a0 3d 3d 4f 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20  ==OP_Insert ){. 
210b0 20 20 20 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b     pKey = &aMem[
210c0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73  pOp->p3];.    as
210d0 73 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67  sert( pKey->flag
210e0 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
210f0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
21100 56 61 6c 69 64 28 70 4b 65 79 29 20 29 3b 0a 20  Valid(pKey) );. 
21110 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
21120 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29  E(pOp->p3, pKey)
21130 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4b 65  ;.    iKey = pKe
21140 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b  y->u.i;.  }else{
21150 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
21160 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73  ->opcode==OP_Ins
21170 65 72 74 49 6e 74 20 29 3b 0a 20 20 20 20 69 4b  ertInt );.    iK
21180 65 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ey = pOp->p3;.  
21190 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  }..  if( pOp->p5
211a0 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
211b0 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b  E ) p->nChange++
211c0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ;.  if( pOp->p5 
211d0 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  & OPFLAG_LASTROW
211e0 49 44 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77  ID ) db->lastRow
211f0 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d  id = lastRowid =
21200 20 69 4b 65 79 3b 0a 20 20 69 66 28 20 70 44 61   iKey;.  if( pDa
21210 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ta->flags & MEM_
21220 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 44 61 74  Null ){.    pDat
21230 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44  a->z = 0;.    pD
21240 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65  ata->n = 0;.  }e
21250 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
21260 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
21270 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74  (MEM_Blob|MEM_St
21280 72 29 20 29 3b 0a 20 20 7d 0a 20 20 73 65 65 6b  r) );.  }.  seek
21290 52 65 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e  Result = ((pOp->
212a0 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53  p5 & OPFLAG_USES
212b0 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d  EEKRESULT) ? pC-
212c0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29  >seekResult : 0)
212d0 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66  ;.  if( pData->f
212e0 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20  lags & MEM_Zero 
212f0 29 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70  ){.    nZero = p
21300 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20  Data->u.nZero;. 
21310 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 5a 65 72   }else{.    nZer
21320 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 63 20  o = 0;.  }.  rc 
21330 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
21340 73 65 72 74 28 70 43 2d 3e 70 43 75 72 73 6f 72  sert(pC->pCursor
21350 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20 20 20  , 0, iKey,.     
21360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21370 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c 20 70       pData->z, p
21380 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a  Data->n, nZero,.
21390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213a0 20 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e            (pOp->
213b0 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 50 50 45  p5 & OPFLAG_APPE
213c0 4e 44 29 21 3d 30 2c 20 73 65 65 6b 52 65 73 75  ND)!=0, seekResu
213d0 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e 72 6f  lt.  );.  pC->ro
213e0 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
213f0 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
21400 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
21410 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
21420 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a  CHE_STALE;..  /*
21430 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61   Invoke the upda
21440 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69  te-hook if requi
21450 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63  red. */.  if( rc
21460 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64  ==SQLITE_OK && d
21470 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
21480 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20  ck && pOp->p4.z 
21490 29 7b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d  ){.    zDb = db-
214a0 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e  >aDb[pC->iDb].zN
214b0 61 6d 65 3b 0a 20 20 20 20 7a 54 62 6c 20 3d 20  ame;.    zTbl = 
214c0 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f  pOp->p4.z;.    o
214d0 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  p = ((pOp->p5 & 
214e0 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29  OPFLAG_ISUPDATE)
214f0 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45   ? SQLITE_UPDATE
21500 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54   : SQLITE_INSERT
21510 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
21520 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
21530 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c    db->xUpdateCal
21540 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74  lback(db->pUpdat
21550 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a  eArg, op, zDb, z
21560 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20  Tbl, iKey);.    
21570 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e  assert( pC->iDb>
21580 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  =0 );.  }.  brea
21590 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
215a0 20 44 65 6c 65 74 65 20 50 31 20 50 32 20 2a 20   Delete P1 P2 * 
215b0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  P4 *.**.** Delet
215c0 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20  e the record at 
215d0 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72  which the P1 cur
215e0 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  sor is currently
215f0 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a   pointing..**.**
21600 20 54 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c   The cursor will
21610 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   be left pointin
21620 67 20 61 74 20 65 69 74 68 65 72 20 74 68 65 20  g at either the 
21630 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72 65 76  next or the prev
21640 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69  ious.** record i
21650 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20  n the table. If 
21660 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  it is left point
21670 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74 20  ing at the next 
21680 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20  record, then.** 
21690 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e  the next Next in
216a0 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62  struction will b
216b0 65 20 61 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63  e a no-op.  Henc
216c0 65 20 69 74 20 69 73 20 4f 4b 20 74 6f 20 64 65  e it is OK to de
216d0 6c 65 74 65 0a 2a 2a 20 61 20 72 65 63 6f 72 64  lete.** a record
216e0 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20   from within an 
216f0 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a  Next loop..**.**
21700 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e   If the OPFLAG_N
21710 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50  CHANGE flag of P
21720 32 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74  2 is set, then t
21730 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f  he row change co
21740 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d  unt is.** increm
21750 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65  ented (otherwise
21760 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20   not)..**.** P1 
21770 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75  must not be pseu
21780 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61  do-table.  It ha
21790 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74  s to be a real t
217a0 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c  able with.** mul
217b0 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a  tiple rows..**.*
217c0 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e  * If P4 is not N
217d0 55 4c 4c 2c 20 74 68 65 6e 20 69 74 20 69 73 20  ULL, then it is 
217e0 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
217f0 74 61 62 6c 65 20 74 68 61 74 20 50 31 20 69 73  table that P1 is
21800 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e  .** pointing to.
21810 20 20 54 68 65 20 75 70 64 61 74 65 20 68 6f 6f    The update hoo
21820 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65  k will be invoke
21830 64 2c 20 69 66 20 69 74 20 65 78 69 73 74 73 2e  d, if it exists.
21840 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74  .** If P4 is not
21850 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 50   NULL then the P
21860 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61  1 cursor must ha
21870 76 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e  ve been position
21880 65 64 0a 2a 2a 20 75 73 69 6e 67 20 4f 50 5f 4e  ed.** using OP_N
21890 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f  otFound prior to
218a0 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f   invoking this o
218b0 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pcode..*/.case O
218c0 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 69 36  P_Delete: {.  i6
218d0 34 20 69 4b 65 79 3b 0a 20 20 56 64 62 65 43 75  4 iKey;.  VdbeCu
218e0 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73  rsor *pC;..  ass
218f0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
21900 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
21910 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
21920 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
21930 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
21940 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
21950 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
21960 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69 64  ;  /* Only valid
21970 20 66 6f 72 20 72 65 61 6c 20 74 61 62 6c 65 73   for real tables
21980 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61 62 6c 65  , no pseudotable
21990 73 20 2a 2f 0a 20 20 69 4b 65 79 20 3d 20 70 43  s */.  iKey = pC
219a0 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20  ->lastRowid;    
219b0 20 20 2f 2a 20 4f 6e 6c 79 20 75 73 65 64 20 66    /* Only used f
219c0 6f 72 20 74 68 65 20 75 70 64 61 74 65 20 68 6f  or the update ho
219d0 6f 6b 20 2a 2f 0a 0a 20 20 2f 2a 20 54 68 65 20  ok */..  /* The 
219e0 4f 50 5f 44 65 6c 65 74 65 20 6f 70 63 6f 64 65  OP_Delete opcode
219f0 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73 20   always follows 
21a00 61 6e 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20  an OP_NotExists 
21a10 6f 72 20 4f 50 5f 4c 61 73 74 20 6f 72 0a 20 20  or OP_Last or.  
21a20 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 20  ** OP_Column on 
21a30 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 77  the same table w
21a40 69 74 68 6f 75 74 20 61 6e 79 20 69 6e 74 65 72  ithout any inter
21a50 76 65 6e 69 6e 67 20 6f 70 65 72 61 74 69 6f 6e  vening operation
21a60 73 20 74 68 61 74 0a 20 20 2a 2a 20 6d 69 67 68  s that.  ** migh
21a70 74 20 6d 6f 76 65 20 6f 72 20 69 6e 76 61 6c 69  t move or invali
21a80 64 61 74 65 20 74 68 65 20 63 75 72 73 6f 72 2e  date the cursor.
21a90 20 20 48 65 6e 63 65 20 63 75 72 73 6f 72 20 70    Hence cursor p
21aa0 43 20 69 73 20 61 6c 77 61 79 73 20 70 6f 69 6e  C is always poin
21ab0 74 69 6e 67 0a 20 20 2a 2a 20 74 6f 20 74 68 65  ting.  ** to the
21ac0 20 72 6f 77 20 74 6f 20 62 65 20 64 65 6c 65 74   row to be delet
21ad0 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74  ed and the sqlit
21ae0 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
21af0 74 6f 28 29 20 6f 70 65 72 61 74 69 6f 6e 0a 20  to() operation. 
21b00 20 2a 2a 20 62 65 6c 6f 77 20 69 73 20 61 6c 77   ** below is alw
21b10 61 79 73 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20  ays a no-op and 
21b20 63 61 6e 6e 6f 74 20 66 61 69 6c 2e 20 20 57 65  cannot fail.  We
21b30 20 77 69 6c 6c 20 72 75 6e 20 69 74 20 61 6e 79   will run it any
21b40 68 6f 77 2c 20 74 68 6f 75 67 68 2c 0a 20 20 2a  how, though,.  *
21b50 2a 20 74 6f 20 67 75 61 72 64 20 61 67 61 69 6e  * to guard again
21b60 73 74 20 66 75 74 75 72 65 20 63 68 61 6e 67 65  st future change
21b70 73 20 74 6f 20 74 68 65 20 63 6f 64 65 20 67 65  s to the code ge
21b80 6e 65 72 61 74 6f 72 2e 0a 20 20 2a 2a 2f 0a 20  nerator..  **/. 
21b90 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
21ba0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
21bb0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
21bc0 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
21bd0 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45  (pC);.  if( NEVE
21be0 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29  R(rc!=SQLITE_OK)
21bf0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
21c00 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 72  e_to_error;..  r
21c10 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
21c20 44 65 6c 65 74 65 28 70 43 2d 3e 70 43 75 72 73  Delete(pC->pCurs
21c30 6f 72 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  or);.  pC->cache
21c40 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
21c50 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  TALE;..  /* Invo
21c60 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  ke the update-ho
21c70 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20  ok if required. 
21c80 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  */.  if( rc==SQL
21c90 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55  ITE_OK && db->xU
21ca0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26  pdateCallback &&
21cb0 20 70 4f 70 2d 3e 70 34 2e 7a 20 26 26 20 70 43   pOp->p4.z && pC
21cc0 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20  ->isTable ){.   
21cd0 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
21ce0 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65  back(db->pUpdate
21cf0 41 72 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45  Arg, SQLITE_DELE
21d00 54 45 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  TE,.            
21d10 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e              db->
21d20 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61  aDb[pC->iDb].zNa
21d30 6d 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 69  me, pOp->p4.z, i
21d40 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Key);.    assert
21d50 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a  ( pC->iDb>=0 );.
21d60 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
21d70 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  2 & OPFLAG_NCHAN
21d80 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b  GE ) p->nChange+
21d90 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a  +;.  break;.}./*
21da0 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f   Opcode: ResetCo
21db0 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  unt * * * * *.**
21dc0 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66  .** The value of
21dd0 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e   the change coun
21de0 74 65 72 20 69 73 20 63 6f 70 69 65 64 20 74 6f  ter is copied to
21df0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
21e00 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63  ndle.** change c
21e10 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e 65 64  ounter (returned
21e20 20 62 79 20 73 75 62 73 65 71 75 65 6e 74 20 63   by subsequent c
21e30 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 33 5f  alls to sqlite3_
21e40 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54  changes())..** T
21e50 68 65 6e 20 74 68 65 20 56 4d 73 20 69 6e 74 65  hen the VMs inte
21e60 72 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e  rnal change coun
21e70 74 65 72 20 72 65 73 65 74 73 20 74 6f 20 30 2e  ter resets to 0.
21e80 0a 2a 2a 20 54 68 69 73 20 69 73 20 75 73 65 64  .** This is used
21e90 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67   by trigger prog
21ea0 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  rams..*/.case OP
21eb0 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20  _ResetCount: {. 
21ec0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
21ed0 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43  hanges(db, p->nC
21ee0 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68  hange);.  p->nCh
21ef0 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72 65 61  ange = 0;.  brea
21f00 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
21f10 20 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 20 50   SorterCompare P
21f20 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79  1 P2 P3 P4.** Sy
21f30 6e 6f 70 73 69 73 3a 20 20 69 66 20 6b 65 79 28  nopsis:  if key(
21f40 50 31 29 21 3d 72 74 72 69 6d 28 72 5b 50 33 5d  P1)!=rtrim(r[P3]
21f50 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  ,P4) goto P2.**.
21f60 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74 65  ** P1 is a sorte
21f70 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73 20 69  r cursor. This i
21f80 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d 70 61  nstruction compa
21f90 72 65 73 20 61 20 70 72 65 66 69 78 20 6f 66 20  res a prefix of 
21fa0 74 68 65 0a 2a 2a 20 74 68 65 20 72 65 63 6f 72  the.** the recor
21fb0 64 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74  d blob in regist
21fc0 65 72 20 50 33 20 61 67 61 69 6e 73 74 20 61 20  er P3 against a 
21fd0 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 65 6e  prefix of the en
21fe0 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 74 68 65  try that .** the
21ff0 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20 63   sorter cursor c
22000 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20  urrently points 
22010 74 6f 2e 20 20 54 68 65 20 66 69 6e 61 6c 20 50  to.  The final P
22020 34 20 66 69 65 6c 64 73 20 6f 66 20 62 6f 74 68  4 fields of both
22030 0a 2a 2a 20 74 68 65 20 50 33 20 61 6e 64 20 73  .** the P3 and s
22040 6f 72 74 65 72 20 72 65 63 6f 72 64 20 61 72 65  orter record are
22050 20 69 67 6e 6f 72 65 64 2e 0a 2a 2a 0a 2a 2a 20   ignored..**.** 
22060 49 66 20 65 69 74 68 65 72 20 50 33 20 6f 72 20  If either P3 or 
22070 74 68 65 20 73 6f 72 74 65 72 20 63 6f 6e 74 61  the sorter conta
22080 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e  ins a NULL in on
22090 65 20 6f 66 20 74 68 65 69 72 20 73 69 67 6e 69  e of their signi
220a0 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c 64 73  ficant.** fields
220b0 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67 20 74   (not counting t
220c0 68 65 20 50 34 20 66 69 65 6c 64 73 20 61 74 20  he P4 fields at 
220d0 74 68 65 20 65 6e 64 20 77 68 69 63 68 20 61 72  the end which ar
220e0 65 20 69 67 6e 6f 72 65 64 29 20 74 68 65 6e 0a  e ignored) then.
220f0 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  ** the compariso
22100 6e 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20  n is assumed to 
22110 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20  be equal..**.** 
22120 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  Fall through to 
22130 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
22140 20 69 66 20 74 68 65 20 74 77 6f 20 72 65 63 6f   if the two reco
22150 72 64 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61  rds compare equa
22160 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f 74 68  l to.** each oth
22170 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 20  er.  Jump to P2 
22180 69 66 20 74 68 65 79 20 61 72 65 20 64 69 66 66  if they are diff
22190 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  erent..*/.case O
221a0 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 3a  P_SorterCompare:
221b0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
221c0 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
221d0 20 20 69 6e 74 20 6e 49 67 6e 6f 72 65 3b 0a 0a    int nIgnore;..
221e0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
221f0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
22200 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
22210 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
22220 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
22230 54 33 32 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20  T32 );.  pIn3 = 
22240 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
22250 20 20 6e 49 67 6e 6f 72 65 20 3d 20 70 4f 70 2d    nIgnore = pOp-
22260 3e 70 34 2e 69 3b 0a 20 20 72 63 20 3d 20 73 71  >p4.i;.  rc = sq
22270 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 43  lite3VdbeSorterC
22280 6f 6d 70 61 72 65 28 70 43 2c 20 70 49 6e 33 2c  ompare(pC, pIn3,
22290 20 6e 49 67 6e 6f 72 65 2c 20 26 72 65 73 29 3b   nIgnore, &res);
222a0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
222b0 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
222c0 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70  if( res ){.    p
222d0 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20  c = pOp->p2-1;. 
222e0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a   }.  break;.};..
222f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
22300 72 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20  rData P1 P2 * * 
22310 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
22320 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20  [P2]=data.**.** 
22330 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
22340 74 65 72 20 50 32 20 74 68 65 20 63 75 72 72 65  ter P2 the curre
22350 6e 74 20 73 6f 72 74 65 72 20 64 61 74 61 20 66  nt sorter data f
22360 6f 72 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72  or sorter cursor
22370 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
22380 53 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a 20 20  SorterData: {.  
22390 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
223a0 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
223b0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d  pOp->p2];.  pC =
223c0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
223d0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73  1];.  assert( is
223e0 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20  Sorter(pC) );.  
223f0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
22400 53 6f 72 74 65 72 52 6f 77 6b 65 79 28 70 43 2c  SorterRowkey(pC,
22410 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b   pOut);.  break;
22420 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
22430 6f 77 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a  owData P1 P2 * *
22440 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
22450 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a  r[P2]=data.**.**
22460 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
22470 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70  ster P2 the comp
22480 6c 65 74 65 20 72 6f 77 20 64 61 74 61 20 66 6f  lete row data fo
22490 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
224a0 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65  There is no inte
224b0 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
224c0 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20  e data.  .** It 
224d0 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f  is just copied o
224e0 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69 73  nto the P2 regis
224f0 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a  ter exactly as .
22500 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69  ** it is found i
22510 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
22520 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ile..**.** If th
22530 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
22540 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20   be pointing to 
22550 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74  a valid row (not
22560 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20   a NULL row).** 
22570 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  of a real table,
22580 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
22590 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ble..*/./* Opcod
225a0 65 3a 20 52 6f 77 4b 65 79 20 50 31 20 50 32 20  e: RowKey P1 P2 
225b0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
225c0 73 3a 20 72 5b 50 32 5d 3d 6b 65 79 0a 2a 2a 0a  s: r[P2]=key.**.
225d0 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
225e0 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f  gister P2 the co
225f0 6d 70 6c 65 74 65 20 72 6f 77 20 6b 65 79 20 66  mplete row key f
22600 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  or cursor P1..**
22610 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74   There is no int
22620 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
22630 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 54 68  he data.  .** Th
22640 65 20 6b 65 79 20 69 73 20 63 6f 70 69 65 64 20  e key is copied 
22650 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69  onto the P2 regi
22660 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20  ster exactly as 
22670 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20  .** it is found 
22680 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
22690 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  file..**.** If t
226a0 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
226b0 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f  t be pointing to
226c0 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f   a valid row (no
226d0 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a  t a NULL row).**
226e0 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65   of a real table
226f0 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
22700 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
22710 5f 52 6f 77 4b 65 79 3a 0a 63 61 73 65 20 4f 50  _RowKey:.case OP
22720 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56 64  _RowData: {.  Vd
22730 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
22740 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
22750 0a 20 20 75 33 32 20 6e 3b 0a 20 20 69 36 34 20  .  u32 n;.  i64 
22760 6e 36 34 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26  n64;..  pOut = &
22770 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
22780 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
22790 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f  e(p, pOut);..  /
227a0 2a 20 4e 6f 74 65 20 74 68 61 74 20 52 6f 77 4b  * Note that RowK
227b0 65 79 20 61 6e 64 20 52 6f 77 44 61 74 61 20 61  ey and RowData a
227c0 72 65 20 72 65 61 6c 6c 79 20 65 78 61 63 74 6c  re really exactl
227d0 79 20 74 68 65 20 73 61 6d 65 20 69 6e 73 74 72  y the same instr
227e0 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65  uction */.  asse
227f0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
22800 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
22810 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
22820 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
22830 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
22840 72 74 65 72 28 70 43 29 3d 3d 30 20 29 3b 0a 20  rter(pC)==0 );. 
22850 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
22860 61 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  able || pOp->opc
22870 6f 64 65 21 3d 4f 50 5f 52 6f 77 44 61 74 61 20  ode!=OP_RowData 
22880 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
22890 3e 69 73 54 61 62 6c 65 3d 3d 30 20 7c 7c 20 70  >isTable==0 || p
228a0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52  Op->opcode==OP_R
228b0 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65  owData );.  asse
228c0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
228d0 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52  ssert( pC->nullR
228e0 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ow==0 );.  asser
228f0 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
22900 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73  leReg==0 );.  as
22910 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
22920 72 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  r!=0 );.  pCrsr 
22930 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
22940 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
22950 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
22960 69 64 28 70 43 72 73 72 29 20 29 3b 0a 0a 20 20  id(pCrsr) );..  
22970 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65 79  /* The OP_RowKey
22980 20 61 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61 20   and OP_RowData 
22990 6f 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66  opcodes always f
229a0 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73  ollow OP_NotExis
229b0 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52 65  ts or.  ** OP_Re
229c0 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74  wind/Op_Next wit
229d0 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67  h no intervening
229e0 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 74 68   instructions th
229f0 61 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64  at might invalid
22a00 61 74 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72  ate.  ** the cur
22a10 73 6f 72 2e 20 20 48 65 6e 63 65 20 74 68 65 20  sor.  Hence the 
22a20 66 6f 6c 6c 6f 77 69 6e 67 20 73 71 6c 69 74 65  following sqlite
22a30 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
22a40 6f 28 29 20 63 61 6c 6c 20 69 73 20 61 6c 77 61  o() call is alwa
22a50 79 73 0a 20 20 2a 2a 20 61 20 6e 6f 2d 6f 70 20  ys.  ** a no-op 
22a60 61 6e 64 20 63 61 6e 20 6e 65 76 65 72 20 66 61  and can never fa
22a70 69 6c 2e 20 20 42 75 74 20 77 65 20 6c 65 61 76  il.  But we leav
22a80 65 20 69 74 20 69 6e 20 70 6c 61 63 65 20 61 73  e it in place as
22a90 20 61 20 73 61 66 65 74 79 2e 0a 20 20 2a 2f 0a   a safety..  */.
22aa0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
22ab0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
22ac0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
22ad0 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
22ae0 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56  o(pC);.  if( NEV
22af0 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  ER(rc!=SQLITE_OK
22b00 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
22b10 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20  ue_to_error;..  
22b20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  if( pC->isTable=
22b30 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
22b40 28 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  ( !pC->isTable )
22b50 3b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72  ;.    VVA_ONLY(r
22b60 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65  c =) sqlite3Btre
22b70 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c 20  eKeySize(pCrsr, 
22b80 26 6e 36 34 29 3b 0a 20 20 20 20 61 73 73 65 72  &n64);.    asser
22b90 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
22ba0 20 29 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 62   );    /* True b
22bb0 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72  ecause of Cursor
22bc0 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62  Moveto() call ab
22bd0 6f 76 65 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e  ove */.    if( n
22be0 36 34 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  64>db->aLimit[SQ
22bf0 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
22c00 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  H] ){.      goto
22c10 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a   too_big;.    }.
22c20 20 20 20 20 6e 20 3d 20 28 75 33 32 29 6e 36 34      n = (u32)n64
22c30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56  ;.  }else{.    V
22c40 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71  VA_ONLY(rc =) sq
22c50 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 53 69  lite3BtreeDataSi
22c60 7a 65 28 70 43 72 73 72 2c 20 26 6e 29 3b 0a 20  ze(pCrsr, &n);. 
22c70 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
22c80 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f  QLITE_OK );    /
22c90 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63 61 6e  * DataSize() can
22ca0 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20  not fail */.    
22cb0 69 66 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61  if( n>(u32)db->a
22cc0 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
22cd0 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
22ce0 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
22cf0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
22d00 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
22d10 47 72 6f 77 28 70 4f 75 74 2c 20 6e 2c 20 30 29  Grow(pOut, n, 0)
22d20 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   ){.    goto no_
22d30 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  mem;.  }.  pOut-
22d40 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65 74  >n = n;.  MemSet
22d50 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
22d60 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69 66 28 20  EM_Blob);.  if( 
22d70 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
22d80 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
22d90 65 33 42 74 72 65 65 4b 65 79 28 70 43 72 73 72  e3BtreeKey(pCrsr
22da0 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29  , 0, n, pOut->z)
22db0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
22dc0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
22dd0 44 61 74 61 28 70 43 72 73 72 2c 20 30 2c 20 6e  Data(pCrsr, 0, n
22de0 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a  , pOut->z);.  }.
22df0 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51    pOut->enc = SQ
22e00 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49  LITE_UTF8;  /* I
22e10 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20  n case the blob 
22e20 69 73 20 65 76 65 72 20 63 61 73 74 20 74 6f 20  is ever cast to 
22e30 74 65 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45  text */.  UPDATE
22e40 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
22e50 75 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  ut);.  REGISTER_
22e60 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
22e70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
22e80 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
22e90 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  id P1 P2 * * *.*
22ea0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
22eb0 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74  ]=rowid.**.** St
22ec0 6f 72 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  ore in register 
22ed0 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68  P2 an integer wh
22ee0 69 63 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f  ich is the key o
22ef0 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72  f the table entr
22f00 79 20 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20  y that.** P1 is 
22f10 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20  currently point 
22f20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e  to..**.** P1 can
22f30 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72   be either an or
22f40 64 69 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20  dinary table or 
22f50 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
22f60 20 20 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a    There used to.
22f70 2a 2a 20 62 65 20 61 20 73 65 70 61 72 61 74 65  ** be a separate
22f80 20 4f 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64   OP_VRowid opcod
22f90 65 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 76  e for use with v
22fa0 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62  irtual tables, b
22fb0 75 74 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f  ut this.** one o
22fc0 70 63 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20  pcode now works 
22fd0 66 6f 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74  for both table t
22fe0 79 70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ypes..*/.case OP
22ff0 5f 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  _Rowid: {       
23000 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
23010 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
23020 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
23030 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c  ;.  i64 v;.  sql
23040 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
23050 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
23060 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
23070 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  e;..  assert( pO
23080 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
23090 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
230a0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
230b0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
230c0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
230d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
230e0 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 7c  udoTableReg==0 |
230f0 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b  | pC->nullRow );
23100 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52  .  if( pC->nullR
23110 6f 77 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  ow ){.    pOut->
23120 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
23130 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
23140 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66  else if( pC->def
23150 65 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20  erredMoveto ){. 
23160 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74     v = pC->movet
23170 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e 64 65 66  oTarget;.#ifndef
23180 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
23190 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73  TUALTABLE.  }els
231a0 65 20 69 66 28 20 70 43 2d 3e 70 56 74 61 62 43  e if( pC->pVtabC
231b0 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 70 56 74  ursor ){.    pVt
231c0 61 62 20 3d 20 70 43 2d 3e 70 56 74 61 62 43 75  ab = pC->pVtabCu
231d0 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20  rsor->pVtab;.   
231e0 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
231f0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61  ->pModule;.    a
23200 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e  ssert( pModule->
23210 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63  xRowid );.    rc
23220 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77   = pModule->xRow
23230 69 64 28 70 43 2d 3e 70 56 74 61 62 43 75 72 73  id(pC->pVtabCurs
23240 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c  or, &v);.    sql
23250 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
23260 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
23270 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
23280 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
23290 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20  LE */.  }else{. 
232a0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70     assert( pC->p
232b0 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20  Cursor!=0 );.   
232c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
232d0 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43  eCursorMoveto(pC
232e0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
232f0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
23300 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28  o_error;.    if(
23310 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
23320 64 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 70  d ){.      v = p
23330 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20  C->lastRowid;.  
23340 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
23350 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
23360 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72  KeySize(pC->pCur
23370 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20  sor, &v);.      
23380 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
23390 54 45 5f 4f 4b 20 29 3b 20 20 2f 2a 20 41 6c 77  TE_OK );  /* Alw
233a0 61 79 73 20 73 6f 20 62 65 63 61 75 73 65 20 6f  ays so because o
233b0 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  f CursorMoveto()
233c0 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 7d 0a   above */.    }.
233d0 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
233e0 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = v;.  break;.}.
233f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c  ./* Opcode: Null
23400 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  Row P1 * * * *.*
23410 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75  *.** Move the cu
23420 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c  rsor P1 to a nul
23430 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43  l row.  Any OP_C
23440 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73  olumn operations
23450 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77  .** that occur w
23460 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20  hile the cursor 
23470 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72  is on the null r
23480 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a  ow will always.*
23490 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a  * write a NULL..
234a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52  */.case OP_NullR
234b0 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ow: {.  VdbeCurs
234c0 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72  or *pC;..  asser
234d0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
234e0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
234f0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
23500 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
23510 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
23520 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f   );.  pC->nullRo
23530 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 72 6f 77  w = 1;.  pC->row
23540 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
23550 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
23560 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
23570 20 20 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f    if( pC->pCurso
23580 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  r ){.    sqlite3
23590 42 74 72 65 65 43 6c 65 61 72 43 75 72 73 6f 72  BtreeClearCursor
235a0 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  (pC->pCursor);. 
235b0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
235c0 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20 50  * Opcode: Last P
235d0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
235e0 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66   The next use of
235f0 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f   the Rowid or Co
23600 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73  lumn or Next ins
23610 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20  truction for P1 
23620 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74  .** will refer t
23630 6f 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79  o the last entry
23640 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
23650 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
23660 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65  .** If the table
23670 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70   or index is emp
23680 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65  ty and P2>0, the
23690 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
236a0 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20  ly to P2..** If 
236b0 50 32 20 69 73 20 30 20 6f 72 20 69 66 20 74 68  P2 is 0 or if th
236c0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
236d0 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66   is not empty, f
236e0 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
236f0 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
23700 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
23710 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20  case OP_Last: { 
23720 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
23730 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
23740 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
23750 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
23760 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
23770 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
23780 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
23790 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
237a0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
237b0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
237c0 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
237d0 73 6f 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a  sor;.  res = 0;.
237e0 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
237f0 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
23800 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
23810 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43  rsr, &res);.  pC
23820 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29  ->nullRow = (u8)
23830 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72  res;.  pC->defer
23840 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
23850 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
23860 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  d = 0;.  pC->cac
23870 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
23880 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f  _STALE;.  if( pO
23890 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20 56  p->p2>0 ){.    V
238a0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
238b0 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66  es!=0,2);.    if
238c0 28 20 72 65 73 20 29 20 70 63 20 3d 20 70 4f 70  ( res ) pc = pOp
238d0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
238e0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
238f0 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50 32  code: Sort P1 P2
23900 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69   * * *.**.** Thi
23910 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65 78  s opcode does ex
23920 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74  actly the same t
23930 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69 6e  hing as OP_Rewin
23940 64 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a  d except that.**
23950 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 61   it increments a
23960 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67  n undocumented g
23970 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 75  lobal variable u
23980 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 2e  sed for testing.
23990 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69  .**.** Sorting i
239a0 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62  s accomplished b
239b0 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72 64  y writing record
239c0 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67  s into a sorting
239d0 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20   index,.** then 
239e0 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20 69  rewinding that i
239f0 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e 67  ndex and playing
23a00 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62 65   it back from be
23a10 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e  ginning to.** en
23a20 64 2e 20 20 57 65 20 75 73 65 20 74 68 65 20 4f  d.  We use the O
23a30 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e  P_Sort opcode in
23a40 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77 69  stead of OP_Rewi
23a50 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20  nd to do the.** 
23a60 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68 61  rewinding so tha
23a70 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  t the global var
23a80 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e  iable will be in
23a90 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a  cremented and.**
23aa0 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
23ab0 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20  s can determine 
23ac0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
23ad0 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a  he optimizer is.
23ae0 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70 74  ** correctly opt
23af0 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74  imizing out sort
23b00 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  s..*/.case OP_So
23b10 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20  rterSort:    /* 
23b20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
23b30 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  Sort: {        /
23b40 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66  * jump */.#ifdef
23b50 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73   SQLITE_TEST.  s
23b60 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e  qlite3_sort_coun
23b70 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  t++;.  sqlite3_s
23b80 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23  earch_count--;.#
23b90 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e  endif.  p->aCoun
23ba0 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  ter[SQLITE_STMTS
23bb0 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20  TATUS_SORT]++;. 
23bc0 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
23bd0 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20   into OP_Rewind 
23be0 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  */.}./* Opcode: 
23bf0 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20 2a  Rewind P1 P2 * *
23c00 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78   *.**.** The nex
23c10 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77  t use of the Row
23c20 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20  id or Column or 
23c30 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
23c40 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c   for P1 .** will
23c50 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66 69   refer to the fi
23c60 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  rst entry in the
23c70 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
23c80 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20  or index..** If 
23c90 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
23ca0 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20  ex is empty and 
23cb0 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20  P2>0, then jump 
23cc0 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
23cd0 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30  2..** If P2 is 0
23ce0 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65   or if the table
23cf0 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74   or index is not
23d00 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72   empty, fall thr
23d10 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
23d20 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
23d30 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
23d40 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20 20 20 20  _Rewind: {      
23d50 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
23d60 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
23d70 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
23d80 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20  ;.  int res;..  
23d90 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
23da0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
23db0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
23dc0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
23dd0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
23de0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
23df0 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d  t( isSorter(pC)=
23e00 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  =(pOp->opcode==O
23e10 50 5f 53 6f 72 74 65 72 53 6f 72 74 29 20 29 3b  P_SorterSort) );
23e20 0a 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 69 66  .  res = 1;.  if
23e30 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
23e40 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
23e50 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 77 69  e3VdbeSorterRewi
23e60 6e 64 28 64 62 2c 20 70 43 2c 20 26 72 65 73 29  nd(db, pC, &res)
23e70 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
23e80 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
23e90 6f 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  or;.    assert( 
23ea0 70 43 72 73 72 20 29 3b 0a 20 20 20 20 72 63 20  pCrsr );.    rc 
23eb0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69  = sqlite3BtreeFi
23ec0 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  rst(pCrsr, &res)
23ed0 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
23ee0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
23ef0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
23f00 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
23f10 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  .    pC->rowidIs
23f20 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  Valid = 0;.  }. 
23f30 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
23f40 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74  u8)res;.  assert
23f50 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
23f60 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p2<p->nOp );
23f70 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
23f80 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
23f90 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70  if( res ){.    p
23fa0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
23fb0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
23fc0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74  ./* Opcode: Next
23fd0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
23fe0 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63 75  **.** Advance cu
23ff0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
24000 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
24010 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61 20 70   next key/data p
24020 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61  air in its.** ta
24030 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49  ble or index.  I
24040 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d  f there are no m
24050 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ore key/value pa
24060 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
24070 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
24080 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
24090 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
240a0 68 65 20 63 75 72 73 6f 72 20 61 64 76 61 6e 63  he cursor advanc
240b0 65 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c  e was successful
240c0 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69  ,.** jump immedi
240d0 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a  ately to P2..**.
240e0 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72  ** The P1 cursor
240f0 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72   must be for a r
24100 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
24110 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20   pseudo-table.  
24120 50 31 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20  P1 must have.** 
24130 62 65 65 6e 20 6f 70 65 6e 65 64 20 70 72 69 6f  been opened prio
24140 72 20 74 6f 20 74 68 69 73 20 6f 70 63 6f 64 65  r to this opcode
24150 20 6f 72 20 74 68 65 20 70 72 6f 67 72 61 6d 20   or the program 
24160 77 69 6c 6c 20 73 65 67 66 61 75 6c 74 2e 0a 2a  will segfault..*
24170 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75  *.** The P3 valu
24180 65 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74  e is a hint to t
24190 68 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65  he btree impleme
241a0 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d  ntation. If P3==
241b0 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73  1, that.** means
241c0 20 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e   P1 is an SQL in
241d0 64 65 78 20 61 6e 64 20 74 68 61 74 20 74 68 69  dex and that thi
241e0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f  s instruction co
241f0 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a  uld have been.**
24200 20 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61 74   omitted if that
24210 20 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20   index had been 
24220 75 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20 75  unique.  P3 is u
24230 73 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73  sually 0.  P3 is
24240 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65  .** always eithe
24250 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20  r 0 or 1..**.** 
24260 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20  P4 is always of 
24270 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e  type P4_ADVANCE.
24280 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f   The function po
24290 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a  inter points to.
242a0 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e  ** sqlite3BtreeN
242b0 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ext()..**.** If 
242c0 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61  P5 is positive a
242d0 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  nd the jump is t
242e0 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74  aken, then event
242f0 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62   counter.** numb
24300 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70  er P5-1 in the p
24310 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
24320 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
24330 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
24340 3a 20 50 72 65 76 2c 20 4e 65 78 74 49 66 4f 70  : Prev, NextIfOp
24350 65 6e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  en.*/./* Opcode:
24360 20 4e 65 78 74 49 66 4f 70 65 6e 20 50 31 20 50   NextIfOpen P1 P
24370 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
24380 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72   This opcode wor
24390 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 50 5f  ks just like OP_
243a0 4e 65 78 74 20 65 78 63 65 70 74 20 74 68 61 74  Next except that
243b0 20 69 66 20 63 75 72 73 6f 72 20 50 31 20 69 73   if cursor P1 is
243c0 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20   not.** open it 
243d0 62 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e  behaves a no-op.
243e0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .*/./* Opcode: P
243f0 72 65 76 20 50 31 20 50 32 20 50 33 20 50 34 20  rev P1 P2 P3 P4 
24400 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70  P5.**.** Back up
24410 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
24420 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
24430 74 68 65 20 70 72 65 76 69 6f 75 73 20 6b 65 79  the previous key
24440 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74  /data pair in it
24450 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  s.** table or in
24460 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 69  dex.  If there i
24470 73 20 6e 6f 20 70 72 65 76 69 6f 75 73 20 6b 65  s no previous ke
24480 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68  y/value pairs th
24490 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  en fall through.
244a0 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
244b0 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
244c0 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72    But if the cur
244d0 73 6f 72 20 62 61 63 6b 75 70 20 77 61 73 20 73  sor backup was s
244e0 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75  uccessful,.** ju
244f0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
24500 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  o P2..**.** The 
24510 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
24520 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62  e for a real tab
24530 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
24540 2d 74 61 62 6c 65 2e 20 20 49 66 20 50 31 20 69  -table.  If P1 i
24550 73 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e 20 74 68  s.** not open th
24560 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20  en the behavior 
24570 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a  is undefined..**
24580 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65  .** The P3 value
24590 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68   is a hint to th
245a0 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e  e btree implemen
245b0 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31  tation. If P3==1
245c0 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20  , that.** means 
245d0 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64  P1 is an SQL ind
245e0 65 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73  ex and that this
245f0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75   instruction cou
24600 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20  ld have been.** 
24610 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20  omitted if that 
24620 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75  index had been u
24630 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73  nique.  P3 is us
24640 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a  ually 0.  P3 is.
24650 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72  ** always either
24660 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50   0 or 1..**.** P
24670 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74  4 is always of t
24680 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20  ype P4_ADVANCE. 
24690 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  The function poi
246a0 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a  nter points to.*
246b0 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  * sqlite3BtreePr
246c0 65 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20  evious()..**.** 
246d0 49 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76  If P5 is positiv
246e0 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69  e and the jump i
246f0 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76  s taken, then ev
24700 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e  ent counter.** n
24710 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68  umber P5-1 in th
24720 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
24730 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ment is incremen
24740 74 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ted..*/./* Opcod
24750 65 3a 20 50 72 65 76 49 66 4f 70 65 6e 20 50 31  e: PrevIfOpen P1
24760 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
24770 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
24780 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f  orks just like O
24790 50 5f 50 72 65 76 20 65 78 63 65 70 74 20 74 68  P_Prev except th
247a0 61 74 20 69 66 20 63 75 72 73 6f 72 20 50 31 20  at if cursor P1 
247b0 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69  is not.** open i
247c0 74 20 62 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f  t behaves a no-o
247d0 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  p..*/.case OP_So
247e0 72 74 65 72 4e 65 78 74 3a 20 7b 20 20 2f 2a 20  rterNext: {  /* 
247f0 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
24800 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20  rsor *pC;.  int 
24810 72 65 73 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e  res;..  pC = p->
24820 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
24830 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
24840 65 72 28 70 43 29 20 29 3b 0a 20 20 72 63 20 3d  er(pC) );.  rc =
24850 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
24860 65 72 4e 65 78 74 28 64 62 2c 20 70 43 2c 20 26  erNext(db, pC, &
24870 72 65 73 29 3b 0a 20 20 67 6f 74 6f 20 6e 65 78  res);.  goto nex
24880 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50 5f  t_tail;.case OP_
24890 50 72 65 76 49 66 4f 70 65 6e 3a 20 20 20 20 2f  PrevIfOpen:    /
248a0 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
248b0 50 5f 4e 65 78 74 49 66 4f 70 65 6e 3a 20 20 20  P_NextIfOpen:   
248c0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66   /* jump */.  if
248d0 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  ( p->apCsr[pOp->
248e0 70 31 5d 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  p1]==0 ) break;.
248f0 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
24900 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65  h */.case OP_Pre
24910 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  v:          /* j
24920 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  ump */.case OP_N
24930 65 78 74 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  ext:          /*
24940 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72   jump */.  asser
24950 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
24960 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
24970 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
24980 20 70 4f 70 2d 3e 70 35 3c 41 72 72 61 79 53 69   pOp->p5<ArraySi
24990 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20  ze(p->aCounter) 
249a0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
249b0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 72  sr[pOp->p1];.  r
249c0 65 73 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  es = pOp->p3;.  
249d0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
249e0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
249f0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
24a00 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
24a10 2d 3e 70 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->pCursor );.  a
24a20 73 73 65 72 74 28 20 72 65 73 3d 3d 30 20 7c 7c  ssert( res==0 ||
24a30 20 28 72 65 73 3d 3d 31 20 26 26 20 70 43 2d 3e   (res==1 && pC->
24a40 69 73 54 61 62 6c 65 3d 3d 30 29 20 29 3b 0a 20  isTable==0) );. 
24a50 20 74 65 73 74 63 61 73 65 28 20 72 65 73 3d 3d   testcase( res==
24a60 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  1 );.  assert( p
24a70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
24a80 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78  ext || pOp->p4.x
24a90 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33  Advance==sqlite3
24aa0 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61  BtreeNext );.  a
24ab0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
24ac0 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70  de!=OP_Prev || p
24ad0 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d  Op->p4.xAdvance=
24ae0 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65  =sqlite3BtreePre
24af0 76 69 6f 75 73 20 29 3b 0a 20 20 61 73 73 65 72  vious );.  asser
24b00 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
24b10 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 20 7c 7c  OP_NextIfOpen ||
24b20 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
24b30 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e  e==sqlite3BtreeN
24b40 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ext );.  assert(
24b50 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
24b60 5f 50 72 65 76 49 66 4f 70 65 6e 20 7c 7c 20 70  _PrevIfOpen || p
24b70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d  Op->p4.xAdvance=
24b80 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65  =sqlite3BtreePre
24b90 76 69 6f 75 73 29 3b 0a 20 20 72 63 20 3d 20 70  vious);.  rc = p
24ba0 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 28  Op->p4.xAdvance(
24bb0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65  pC->pCursor, &re
24bc0 73 29 3b 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a 20  s);.next_tail:. 
24bd0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
24be0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
24bf0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
24c00 6e 28 72 65 73 3d 3d 30 2c 32 29 3b 0a 20 20 69  n(res==0,2);.  i
24c10 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
24c20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
24c30 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  ;.    pc = pOp->
24c40 70 32 20 2d 20 31 3b 0a 20 20 20 20 70 2d 3e 61  p2 - 1;.    p->a
24c50 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 5d  Counter[pOp->p5]
24c60 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  ++;.#ifdef SQLIT
24c70 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74  E_TEST.    sqlit
24c80 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b  e3_search_count+
24c90 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73  +;.#endif.  }els
24ca0 65 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  e{.    pC->nullR
24cb0 6f 77 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 70 43  ow = 1;.  }.  pC
24cc0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
24cd0 20 30 3b 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b   0;.  goto check
24ce0 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
24cf0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
24d00 78 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33  xInsert P1 P2 P3
24d10 20 2a 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69   * P5.** Synopsi
24d20 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a  s: key=r[P2].**.
24d30 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32 20 68  ** Register P2 h
24d40 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64 65  olds an SQL inde
24d50 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67  x key made using
24d60 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f   the.** MakeReco
24d70 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e  rd instructions.
24d80 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72    This opcode wr
24d90 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a  ites that key.**
24da0 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20   into the index 
24db0 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68  P1.  Data for th
24dc0 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a  e entry is nil..
24dd0 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61 20 66 6c  **.** P3 is a fl
24de0 61 67 20 74 68 61 74 20 70 72 6f 76 69 64 65 73  ag that provides
24df0 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
24e00 2d 74 72 65 65 20 6c 61 79 65 72 20 74 68 61 74  -tree layer that
24e10 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20   this.** insert 
24e20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  is likely to be 
24e30 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a  an append..**.**
24e40 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f   If P5 has the O
24e50 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69  PFLAG_NCHANGE bi
24e60 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  t set, then the 
24e70 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
24e80 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64  s.** incremented
24e90 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63   by this instruc
24ea0 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 4f 50  tion.  If the OP
24eb0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74  FLAG_NCHANGE bit
24ec0 20 69 73 20 63 6c 65 61 72 2c 0a 2a 2a 20 74 68   is clear,.** th
24ed0 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  en the change co
24ee0 75 6e 74 65 72 20 69 73 20 75 6e 63 68 61 6e 67  unter is unchang
24ef0 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  ed..**.** If P5 
24f00 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 55  has the OPFLAG_U
24f10 53 45 53 45 45 4b 52 45 53 55 4c 54 20 62 69 74  SESEEKRESULT bit
24f20 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 63   set, then the c
24f30 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 0a  ursor must have.
24f40 2a 2a 20 6a 75 73 74 20 64 6f 6e 65 20 61 20 73  ** just done a s
24f50 65 65 6b 20 74 6f 20 74 68 65 20 73 70 6f 74 20  eek to the spot 
24f60 77 68 65 72 65 20 74 68 65 20 6e 65 77 20 65 6e  where the new en
24f70 74 72 79 20 69 73 20 74 6f 20 62 65 20 69 6e 73  try is to be ins
24f80 65 72 74 65 64 2e 0a 2a 2a 20 54 68 69 73 20 66  erted..** This f
24f90 6c 61 67 20 61 76 6f 69 64 73 20 64 6f 69 6e 67  lag avoids doing
24fa0 20 61 6e 20 65 78 74 72 61 20 73 65 65 6b 2e 0a   an extra seek..
24fb0 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
24fc0 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b  uction only work
24fd0 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20  s for indices.  
24fe0 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69  The equivalent i
24ff0 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f  nstruction.** fo
25000 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49  r tables is OP_I
25010 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  nsert..*/.case O
25020 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 3a 20  P_SorterInsert: 
25030 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
25040 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72  case OP_IdxInser
25050 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69  t: {        /* i
25060 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  n2 */.  VdbeCurs
25070 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
25080 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
25090 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74 20 63   nKey;.  const c
250a0 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73  har *zKey;..  as
250b0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
250c0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
250d0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
250e0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
250f0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
25100 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
25110 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28   isSorter(pC)==(
25120 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
25130 53 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29 3b  SorterInsert) );
25140 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
25150 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
25160 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20  rt( pIn2->flags 
25170 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
25180 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
25190 73 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  sor;.  if( pOp->
251a0 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41  p5 & OPFLAG_NCHA
251b0 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65  NGE ) p->nChange
251c0 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  ++;.  assert( pC
251d0 72 73 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  rsr!=0 );.  asse
251e0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
251f0 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 45 78 70  =0 );.  rc = Exp
25200 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20  andBlob(pIn2);. 
25210 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
25220 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28 20 69 73  OK ){.    if( is
25230 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20  Sorter(pC) ){.  
25240 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
25250 56 64 62 65 53 6f 72 74 65 72 57 72 69 74 65 28  VdbeSorterWrite(
25260 64 62 2c 20 70 43 2c 20 70 49 6e 32 29 3b 0a 20  db, pC, pIn2);. 
25270 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
25280 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a  nKey = pIn2->n;.
25290 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e        zKey = pIn
252a0 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d  2->z;.      rc =
252b0 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73   sqlite3BtreeIns
252c0 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c  ert(pCrsr, zKey,
252d0 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c   nKey, "", 0, 0,
252e0 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20   pOp->p3, .     
252f0 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26       ((pOp->p5 &
25300 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
25310 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
25320 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20  kResult : 0).   
25330 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20         );.      
25340 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
25350 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
25360 0a 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65  .      pC->cache
25370 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
25380 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  TALE;.    }.  }.
25390 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
253a0 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65  pcode: IdxDelete
253b0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
253c0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
253d0 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P2@P3].**.** Th
253e0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20  e content of P3 
253f0 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69  registers starti
25400 6e 67 20 61 74 20 72 65 67 69 73 74 65 72 20 50  ng at register P
25410 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70  2 form.** an unp
25420 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
25430 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d   This opcode rem
25440 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72 79 20  oves that entry 
25450 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64  from the .** ind
25460 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72  ex opened by cur
25470 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20  sor P1..*/.case 
25480 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a  OP_IdxDelete: {.
25490 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
254a0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
254b0 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
254c0 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
254d0 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   r;..  assert( p
254e0 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73  Op->p3>0 );.  as
254f0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
25500 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e  && pOp->p2+pOp->
25510 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
25520 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
25530 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
25540 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
25550 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
25560 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
25570 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
25580 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
25590 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
255a0 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
255b0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
255c0 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20  pOp->p5==0 );.  
255d0 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
255e0 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e  >pKeyInfo;.  r.n
255f0 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70  Field = (u16)pOp
25600 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66 61 75 6c  ->p3;.  r.defaul
25610 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72 2e 61 4d  t_rc = 0;.  r.aM
25620 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
25630 70 32 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  p2];.#ifdef SQLI
25640 54 45 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e 74  TE_DEBUG.  { int
25650 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72   i; for(i=0; i<r
25660 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73  .nField; i++) as
25670 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
25680 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20  (&r.aMem[i]) ); 
25690 7d 0a 23 65 6e 64 69 66 0a 20 20 72 63 20 3d 20  }.#endif.  rc = 
256a0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
256b0 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72  toUnpacked(pCrsr
256c0 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73  , &r, 0, 0, &res
256d0 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
256e0 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30  ITE_OK && res==0
256f0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
25700 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
25710 70 43 72 73 72 29 3b 0a 20 20 7d 0a 20 20 61 73  pCrsr);.  }.  as
25720 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
25730 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
25740 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
25750 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
25760 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
25770 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20  pcode: IdxRowid 
25780 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
25790 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
257a0 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  owid.**.** Write
257b0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
257c0 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69  2 an integer whi
257d0 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20 65  ch is the last e
257e0 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f  ntry in the reco
257f0 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64  rd at.** the end
25800 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65   of the index ke
25810 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20  y pointed to by 
25820 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73  cursor P1.  This
25830 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20   integer should 
25840 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20  be.** the rowid 
25850 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74  of the table ent
25860 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ry to which this
25870 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69   index entry poi
25880 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  nts..**.** See a
25890 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65  lso: Rowid, Make
258a0 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20  Record..*/.case 
258b0 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20  OP_IdxRowid: {  
258c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
258d0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
258e0 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  /.  BtCursor *pC
258f0 72 73 72 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  rsr;.  VdbeCurso
25900 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 72 6f 77  r *pC;.  i64 row
25910 69 64 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  id;..  assert( p
25920 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
25930 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
25940 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
25950 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
25960 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
25970 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
25980 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
25990 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 70   pCrsr!=0 );.  p
259a0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
259b0 5f 4e 75 6c 6c 3b 0a 20 20 72 63 20 3d 20 73 71  _Null;.  rc = sq
259c0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
259d0 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28  oveto(pC);.  if(
259e0 20 4e 45 56 45 52 28 72 63 29 20 29 20 67 6f 74   NEVER(rc) ) got
259f0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
25a00 72 72 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rror;.  assert( 
25a10 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
25a20 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
25a30 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
25a40 30 20 29 3b 0a 20 20 69 66 28 20 21 70 43 2d 3e  0 );.  if( !pC->
25a50 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72  nullRow ){.    r
25a60 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  owid = 0;  /* No
25a70 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
25a80 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20  used to silence 
25a90 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
25aa0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
25ab0 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70  beIdxRowid(db, p
25ac0 43 72 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20  Crsr, &rowid);. 
25ad0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
25ae0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
25af0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
25b00 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20  error;.    }.   
25b10 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77   pOut->u.i = row
25b20 69 64 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  id;.    pOut->fl
25b30 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
25b40 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
25b50 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20  * Opcode: IdxGE 
25b60 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
25b70 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
25b80 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
25b90 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
25ba0 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
25bb0 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
25bc0 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
25bd0 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
25be0 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
25bf0 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  Y.  Compare this
25c00 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
25c10 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  st the index .**
25c20 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
25c30 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
25c40 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
25c50 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
25c60 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20  OWID .** fields 
25c70 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a  at the end..**.*
25c80 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65  * If the P1 inde
25c90 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74  x entry is great
25ca0 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
25cb0 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
25cc0 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74  e.** then jump t
25cd0 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65  o P2.  Otherwise
25ce0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
25cf0 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
25d00 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ction..*/./* Opc
25d10 6f 64 65 3a 20 49 64 78 47 54 20 50 31 20 50 32  ode: IdxGT P1 P2
25d20 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
25d30 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
25d40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  P4].**.** The P4
25d50 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
25d60 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
25d70 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
25d80 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
25d90 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
25da0 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43   PRIMARY KEY.  C
25db0 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
25dc0 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
25dd0 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
25de0 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
25df0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
25e00 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
25e10 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20  RY KEY or ROWID 
25e20 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68  .** fields at th
25e30 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  e end..**.** If 
25e40 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
25e50 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ry is greater th
25e60 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
25e70 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  .** then jump to
25e80 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20   P2.  Otherwise 
25e90 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
25ea0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
25eb0 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
25ec0 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32 20  de: IdxLT P1 P2 
25ed0 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
25ee0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
25ef0 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  4].**.** The P4 
25f00 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
25f10 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
25f20 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
25f30 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
25f40 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
25f50 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
25f60 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74  OWID.  Compare t
25f70 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
25f80 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64  ainst.** the ind
25f90 65 78 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ex that P1 is cu
25fa0 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
25fb0 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
25fc0 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
25fd0 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  .** ROWID on the
25fe0 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
25ff0 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
26000 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74   entry is less t
26010 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
26020 65 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  e then jump to P
26030 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20  2..** Otherwise 
26040 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
26050 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
26060 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
26070 64 65 3a 20 49 64 78 4c 45 20 50 31 20 50 32 20  de: IdxLE P1 P2 
26080 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
26090 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
260a0 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  4].**.** The P4 
260b0 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
260c0 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
260d0 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
260e0 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
260f0 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
26100 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
26110 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74  OWID.  Compare t
26120 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
26130 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64  ainst.** the ind
26140 65 78 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ex that P1 is cu
26150 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
26160 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
26170 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
26180 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  .** ROWID on the
26190 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
261a0 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
261b0 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74   entry is less t
261c0 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
261d0 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68  the key value th
261e0 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32  en jump.** to P2
261f0 2e 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c  . Otherwise fall
26200 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
26210 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
26220 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  ..*/.case OP_Idx
26230 4c 45 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  LE:          /* 
26240 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
26250 49 64 78 47 54 3a 20 20 20 20 20 20 20 20 20 20  IdxGT:          
26260 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
26270 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20  OP_IdxLT:       
26280 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
26290 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 20 7b 20  se OP_IdxGE:  { 
262a0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
262b0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
262c0 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
262d0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
262e0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
262f0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
26300 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
26310 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
26320 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
26330 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
26340 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72  assert( pC->isOr
26350 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72  dered );.  asser
26360 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
26370 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  0);.  assert( pC
26380 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
26390 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
263a0 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70   pOp->p5==0 || p
263b0 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 61  Op->p5==1 );.  a
263c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
263d0 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
263e0 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
263f0 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72  C->pKeyInfo;.  r
26400 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
26410 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28 20  Op->p4.i;.  if( 
26420 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50 5f 49  pOp->opcode<OP_I
26430 64 78 4c 54 20 29 7b 0a 20 20 20 20 61 73 73 65  dxLT ){.    asse
26440 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
26450 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70  =OP_IdxLE || pOp
26460 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
26470 47 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61  GT );.    r.defa
26480 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 7d  ult_rc = -1;.  }
26490 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
264a0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
264b0 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e  P_IdxGE || pOp->
264c0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54  opcode==OP_IdxLT
264d0 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c   );.    r.defaul
264e0 74 5f 72 63 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  t_rc = 0;.  }.  
264f0 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
26500 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20  Op->p3];.#ifdef 
26510 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b  SQLITE_DEBUG.  {
26520 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
26530 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
26540 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
26550 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
26560 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72   ); }.#endif.  r
26570 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  es = 0;  /* Not 
26580 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73  needed.  Only us
26590 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ed to silence a 
265a0 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63  warning. */.  rc
265b0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64   = sqlite3VdbeId
265c0 78 4b 65 79 43 6f 6d 70 61 72 65 28 70 43 2c 20  xKeyCompare(pC, 
265d0 26 72 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73  &r, &res);.  ass
265e0 65 72 74 28 20 28 4f 50 5f 49 64 78 4c 45 26 31  ert( (OP_IdxLE&1
265f0 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20  )==(OP_IdxLT&1) 
26600 26 26 20 28 4f 50 5f 49 64 78 47 45 26 31 29 3d  && (OP_IdxGE&1)=
26610 3d 28 4f 50 5f 49 64 78 47 54 26 31 29 20 29 3b  =(OP_IdxGT&1) );
26620 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63  .  if( (pOp->opc
26630 6f 64 65 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c  ode&1)==(OP_IdxL
26640 54 26 31 29 20 29 7b 0a 20 20 20 20 61 73 73 65  T&1) ){.    asse
26650 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
26660 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70  =OP_IdxLE || pOp
26670 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
26680 4c 54 20 29 3b 0a 20 20 20 20 72 65 73 20 3d 20  LT );.    res = 
26690 2d 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  -res;.  }else{. 
266a0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
266b0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45  opcode==OP_IdxGE
266c0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
266d0 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
266e0 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a 20 20 56 64   res++;.  }.  Vd
266f0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
26700 73 3e 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  s>0,2);.  if( re
26710 73 3e 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  s>0 ){.    pc = 
26720 70 4f 70 2d 3e 70 32 20 2d 20 31 20 3b 0a 20 20  pOp->p2 - 1 ;.  
26730 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
26740 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79   Opcode: Destroy
26750 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
26760 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e  .** Delete an en
26770 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74 61  tire database ta
26780 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
26790 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20  se root page in 
267a0 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
267b0 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79  file is given by
267c0 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74   P1..**.** The t
267d0 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72  able being destr
267e0 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d  oyed is in the m
267f0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
26800 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a  e if P3==0.  If.
26810 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68  ** P3==1 then th
26820 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
26830 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
26840 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
26850 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
26860 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
26870 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
26880 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
26890 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
268a0 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69   If AUTOVACUUM i
268b0 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69  s enabled then i
268c0 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68  t is possible th
268d0 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20  at another root 
268e0 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65  page.** might be
268f0 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20   moved into the 
26900 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f  newly deleted ro
26910 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72  ot page in order
26920 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20   to keep all.** 
26930 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69  root pages conti
26940 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65 67  guous at the beg
26950 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61  inning of the da
26960 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72  tabase.  The for
26970 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20  mer.** value of 
26980 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68  the root page th
26990 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76  at moved - its v
269a0 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65 20  alue before the 
269b0 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a  move occurred -.
269c0 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ** is stored in 
269d0 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
269e0 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76   no page .** mov
269f0 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69 72  ement was requir
26a00 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65 20  ed (because the 
26a10 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70  table being drop
26a20 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79 20  ped was already 
26a30 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e 65  .** the last one
26a40 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
26a50 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73  ) then a zero is
26a60 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
26a70 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55  ter P2..** If AU
26a80 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73 61  TOVACUUM is disa
26a90 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f  bled then a zero
26aa0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
26ab0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
26ac0 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72   See also: Clear
26ad0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74  .*/.case OP_Dest
26ae0 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75  roy: {     /* ou
26af0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
26b00 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20  .  int iMoved;. 
26b10 20 69 6e 74 20 69 43 6e 74 3b 0a 20 20 56 64 62   int iCnt;.  Vdb
26b20 65 20 2a 70 56 64 62 65 3b 0a 20 20 69 6e 74 20  e *pVdbe;.  int 
26b30 69 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  iDb;..  assert( 
26b40 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
26b50 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
26b60 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
26b70 4c 45 0a 20 20 69 43 6e 74 20 3d 20 30 3b 0a 20  LE.  iCnt = 0;. 
26b80 20 66 6f 72 28 70 56 64 62 65 3d 64 62 2d 3e 70   for(pVdbe=db->p
26b90 56 64 62 65 3b 20 70 56 64 62 65 3b 20 70 56 64  Vdbe; pVdbe; pVd
26ba0 62 65 20 3d 20 70 56 64 62 65 2d 3e 70 4e 65 78  be = pVdbe->pNex
26bb0 74 29 7b 0a 20 20 20 20 69 66 28 20 70 56 64 62  t){.    if( pVdb
26bc0 65 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d  e->magic==VDBE_M
26bd0 41 47 49 43 5f 52 55 4e 20 26 26 20 70 56 64 62  AGIC_RUN && pVdb
26be0 65 2d 3e 62 49 73 52 65 61 64 65 72 20 0a 20 20  e->bIsReader .  
26bf0 20 20 20 26 26 20 70 56 64 62 65 2d 3e 69 6e 56     && pVdbe->inV
26c00 74 61 62 4d 65 74 68 6f 64 3c 32 20 26 26 20 70  tabMethod<2 && p
26c10 56 64 62 65 2d 3e 70 63 3e 3d 30 20 0a 20 20 20  Vdbe->pc>=0 .   
26c20 20 29 7b 0a 20 20 20 20 20 20 69 43 6e 74 2b 2b   ){.      iCnt++
26c30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6c 73  ;.    }.  }.#els
26c40 65 0a 20 20 69 43 6e 74 20 3d 20 64 62 2d 3e 6e  e.  iCnt = db->n
26c50 56 64 62 65 52 65 61 64 3b 0a 23 65 6e 64 69 66  VdbeRead;.#endif
26c60 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
26c70 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28   MEM_Null;.  if(
26c80 20 69 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 72   iCnt>1 ){.    r
26c90 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  c = SQLITE_LOCKE
26ca0 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41  D;.    p->errorA
26cb0 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74  ction = OE_Abort
26cc0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
26cd0 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  Db = pOp->p3;.  
26ce0 20 20 61 73 73 65 72 74 28 20 69 43 6e 74 3d 3d    assert( iCnt==
26cf0 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
26d00 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
26d10 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
26d20 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 20 20  iDb))!=0 );.    
26d30 69 4d 6f 76 65 64 20 3d 20 30 3b 20 20 2f 2a 20  iMoved = 0;  /* 
26d40 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
26d50 79 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77  y to silence a w
26d60 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72  arning. */.    r
26d70 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
26d80 44 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61 44  DropTable(db->aD
26d90 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d  b[iDb].pBt, pOp-
26da0 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20  >p1, &iMoved);. 
26db0 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
26dc0 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f   MEM_Int;.    pO
26dd0 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64  ut->u.i = iMoved
26de0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
26df0 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
26e00 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
26e10 49 54 45 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64  ITE_OK && iMoved
26e20 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  !=0 ){.      sql
26e30 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65  ite3RootPageMove
26e40 64 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65  d(db, iDb, iMove
26e50 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20  d, pOp->p1);.   
26e60 20 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73     /* All OP_Des
26e70 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20  troy operations 
26e80 6f 63 63 75 72 20 6f 6e 20 74 68 65 20 73 61 6d  occur on the sam
26e90 65 20 62 74 72 65 65 20 2a 2f 0a 20 20 20 20 20  e btree */.     
26ea0 20 61 73 73 65 72 74 28 20 72 65 73 65 74 53 63   assert( resetSc
26eb0 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c  hemaOnFault==0 |
26ec0 7c 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  | resetSchemaOnF
26ed0 61 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20  ault==iDb+1 );. 
26ee0 20 20 20 20 20 72 65 73 65 74 53 63 68 65 6d 61       resetSchema
26ef0 4f 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b  OnFault = iDb+1;
26f00 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
26f10 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
26f20 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50   Opcode: Clear P
26f30 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65  1 P2 P3.**.** De
26f40 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74  lete all content
26f50 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  s of the databas
26f60 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
26f70 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
26f80 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62  .** in the datab
26f90 61 73 65 20 66 69 6c 65 20 69 73 20 67 69 76 65  ase file is give
26fa0 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75  n by P1.  But, u
26fb0 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64  nlike Destroy, d
26fc0 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20  o not.** remove 
26fd0 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
26fe0 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ex from the data
26ff0 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
27000 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   The table being
27010 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
27020 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
27030 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49  ile if P2==0.  I
27040 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20  f.** P2==1 then 
27050 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20  the table to be 
27060 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
27070 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
27080 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20  se file.** that 
27090 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
270a0 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75   tables create u
270b0 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50  sing CREATE TEMP
270c0 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a  ORARY TABLE..**.
270d0 2a 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  ** If the P3 val
270e0 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  ue is non-zero, 
270f0 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72  then the table r
27100 65 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20  eferred to must 
27110 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20  be an.** intkey 
27120 74 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61  table (an SQL ta
27130 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65  ble, not an inde
27140 78 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  x). In this case
27150 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20   the row change 
27160 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63  .** count is inc
27170 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20  remented by the 
27180 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
27190 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  n the table bein
271a0 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49  g cleared. .** I
271b0 66 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  f P3 is greater 
271c0 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20  than zero, then 
271d0 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64  the value stored
271e0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
271f0 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65  is.** also incre
27200 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75  mented by the nu
27210 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
27220 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
27230 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53  cleared..**.** S
27240 65 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79  ee also: Destroy
27250 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61  .*/.case OP_Clea
27260 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e  r: {.  int nChan
27270 67 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20  ge;. .  nChange 
27280 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
27290 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
272a0 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
272b0 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44  treeMask & (((yD
272c0 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70  bMask)1)<<pOp->p
272d0 32 29 29 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d  2))!=0 );.  rc =
272e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
272f0 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64  arTable(.      d
27300 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e  b->aDb[pOp->p2].
27310 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70  pBt, pOp->p1, (p
27320 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67  Op->p3 ? &nChang
27330 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66  e : 0).  );.  if
27340 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
27350 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e   p->nChange += n
27360 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20  Change;.    if( 
27370 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20  pOp->p3>0 ){.   
27380 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
27390 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
273a0 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d  >p3]) );.      m
273b0 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
273c0 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  p, &aMem[pOp->p3
273d0 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70  ]);.      aMem[p
273e0 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e  Op->p3].u.i += n
273f0 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20  Change;.    }.  
27400 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
27410 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 54   Opcode: CreateT
27420 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20 2a  able P1 P2 * * *
27430 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
27440 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a  P2]=root iDb=P1.
27450 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61  **.** Allocate a
27460 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 74 68   new table in th
27470 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
27480 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72  file if P1==0 or
27490 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c   in the.** auxil
274a0 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
274b0 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69  le if P1==1 or i
274c0 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
274d0 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e  tabase if.** P1>
274e0 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f  1.  Write the ro
274f0 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  ot page number o
27500 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20  f the new table 
27510 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
27520 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69   P2.**.** The di
27530 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
27540 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61 6e 20   a table and an 
27550 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a 20 20  index is this:  
27560 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20  A table must.** 
27570 68 61 76 65 20 61 20 34 2d 62 79 74 65 20 69 6e  have a 4-byte in
27580 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20 63 61  teger key and ca
27590 6e 20 68 61 76 65 20 61 72 62 69 74 72 61 72 79  n have arbitrary
275a0 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64 65 78   data.  An index
275b0 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62 69 74  .** has an arbit
275c0 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e 6f 20  rary key but no 
275d0 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  data..**.** See 
275e0 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e 64 65  also: CreateInde
275f0 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  x.*/./* Opcode: 
27600 43 72 65 61 74 65 49 6e 64 65 78 20 50 31 20 50  CreateIndex P1 P
27610 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
27620 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20  sis: r[P2]=root 
27630 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c  iDb=P1.**.** All
27640 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65  ocate a new inde
27650 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  x in the main da
27660 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
27670 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a  1==0 or in the.*
27680 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  * auxiliary data
27690 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
276a0 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61  =1 or in an atta
276b0 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66  ched database if
276c0 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65  .** P1>1.  Write
276d0 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   the root page n
276e0 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77  umber of the new
276f0 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72   table into.** r
27700 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
27710 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74  * See documentat
27720 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65  ion on OP_Create
27730 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69  Table for additi
27740 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
27750 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65  ..*/.case OP_Cre
27760 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20  ateIndex:       
27770 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
27780 72 65 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65 20  release */.case 
27790 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20  OP_CreateTable: 
277a0 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75  {          /* ou
277b0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
277c0 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69  .  int pgno;.  i
277d0 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a  nt flags;.  Db *
277e0 70 44 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d 20 30  pDb;..  pgno = 0
277f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
27800 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
27810 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
27820 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
27830 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73  Mask & (((yDbMas
27840 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21  k)1)<<pOp->p1))!
27850 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
27860 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
27870 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61  ;.  pDb = &db->a
27880 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  Db[pOp->p1];.  a
27890 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21  ssert( pDb->pBt!
278a0 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  =0 );.  if( pOp-
278b0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61  >opcode==OP_Crea
278c0 74 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f  teTable ){.    /
278d0 2a 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f  * flags = BTREE_
278e0 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66  INTKEY; */.    f
278f0 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54  lags = BTREE_INT
27900 4b 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  KEY;.  }else{.  
27910 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f    flags = BTREE_
27920 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20 72  BLOBKEY;.  }.  r
27930 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
27940 43 72 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d  CreateTable(pDb-
27950 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61  >pBt, &pgno, fla
27960 67 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  gs);.  pOut->u.i
27970 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b   = pgno;.  break
27980 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
27990 50 61 72 73 65 53 63 68 65 6d 61 20 50 31 20 2a  ParseSchema P1 *
279a0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
279b0 61 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c  ad and parse all
279c0 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68   entries from th
279d0 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20  e SQLITE_MASTER 
279e0 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73  table of databas
279f0 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74  e P1.** that mat
27a00 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  ch the WHERE cla
27a10 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54  use P4. .**.** T
27a20 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
27a30 65 73 20 74 68 65 20 70 61 72 73 65 72 20 74 6f  es the parser to
27a40 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 76 69   create a new vi
27a50 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a  rtual machine,.*
27a60 2a 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65 20  * then runs the 
27a70 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68  new virtual mach
27a80 69 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75 73  ine.  It is thus
27a90 20 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70   a re-entrant op
27aa0 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  code..*/.case OP
27ab0 5f 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a  _ParseSchema: {.
27ac0 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e    int iDb;.  con
27ad0 73 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72  st char *zMaster
27ae0 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a  ;.  char *zSql;.
27af0 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44    InitData initD
27b00 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70  ata;..  /* Any p
27b10 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
27b20 74 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20 74  t that invokes t
27b30 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  his opcode will 
27b40 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20 20 2a  hold mutexes.  *
27b50 2a 20 6f 6e 20 65 76 65 72 79 20 62 74 72 65 65  * on every btree
27b60 2e 20 20 54 68 69 73 20 69 73 20 61 20 70 72 65  .  This is a pre
27b70 72 65 71 75 69 73 69 74 65 20 66 6f 72 20 69 6e  requisite for in
27b80 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c  voking .  ** sql
27b90 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
27ba0 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20  ()..  */.#ifdef 
27bb0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66  SQLITE_DEBUG.  f
27bc0 6f 72 28 69 44 62 3d 30 3b 20 69 44 62 3c 64 62  or(iDb=0; iDb<db
27bd0 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20  ->nDb; iDb++){. 
27be0 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d     assert( iDb==
27bf0 31 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65  1 || sqlite3Btre
27c00 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e  eHoldsMutex(db->
27c10 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b  aDb[iDb].pBt) );
27c20 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69  .  }.#endif..  i
27c30 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
27c40 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
27c50 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
27c60 0a 20 20 61 73 73 65 72 74 28 20 44 62 48 61 73  .  assert( DbHas
27c70 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62  Property(db, iDb
27c80 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  , DB_SchemaLoade
27c90 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64 20  d) );.  /* Used 
27ca0 74 6f 20 62 65 20 61 20 63 6f 6e 64 69 74 69 6f  to be a conditio
27cb0 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61  nal */ {.    zMa
27cc0 73 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54 41  ster = SCHEMA_TA
27cd0 42 4c 45 28 69 44 62 29 3b 0a 20 20 20 20 69 6e  BLE(iDb);.    in
27ce0 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a  itData.db = db;.
27cf0 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62      initData.iDb
27d00 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20   = pOp->p1;.    
27d10 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73  initData.pzErrMs
27d20 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b  g = &p->zErrMsg;
27d30 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69  .    zSql = sqli
27d40 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20  te3MPrintf(db,. 
27d50 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61        "SELECT na
27d60 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71  me, rootpage, sq
27d70 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57  l FROM '%q'.%s W
27d80 48 45 52 45 20 25 73 20 4f 52 44 45 52 20 42 59  HERE %s ORDER BY
27d90 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20   rowid",.       
27da0 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61  db->aDb[iDb].zNa
27db0 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70  me, zMaster, pOp
27dc0 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28  ->p4.z);.    if(
27dd0 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20   zSql==0 ){.    
27de0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f    rc = SQLITE_NO
27df0 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  MEM;.    }else{.
27e00 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
27e10 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29  ->init.busy==0 )
27e20 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74  ;.      db->init
27e30 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20  .busy = 1;.     
27e40 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53   initData.rc = S
27e50 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20  QLITE_OK;.      
27e60 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c  assert( !db->mal
27e70 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20  locFailed );.   
27e80 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
27e90 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73  exec(db, zSql, s
27ea0 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
27eb0 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30  ck, &initData, 0
27ec0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  );.      if( rc=
27ed0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20  =SQLITE_OK ) rc 
27ee0 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20  = initData.rc;. 
27ef0 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
27f00 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20  ee(db, zSql);.  
27f10 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73      db->init.bus
27f20 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  y = 0;.    }.  }
27f30 0a 20 20 69 66 28 20 72 63 20 29 20 73 71 6c 69  .  if( rc ) sqli
27f40 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d  te3ResetAllSchem
27f50 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64  asOfConnection(d
27f60 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  b);.  if( rc==SQ
27f70 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20  LITE_NOMEM ){.  
27f80 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
27f90 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a   }.  break;  .}.
27fa0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
27fb0 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a  LITE_OMIT_ANALYZ
27fc0 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f  E)./* Opcode: Lo
27fd0 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20  adAnalysis P1 * 
27fe0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64  * * *.**.** Read
27ff0 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
28000 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61  1 table for data
28010 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64  base P1 and load
28020 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20   the content.** 
28030 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e  of that table in
28040 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  to the internal 
28050 69 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c 65  index hash table
28060 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75  .  This will cau
28070 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73  se.** the analys
28080 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 77 68  is to be used wh
28090 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c  en preparing all
280a0 20 73 75 62 73 65 71 75 65 6e 74 20 71 75 65 72   subsequent quer
280b0 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ies..*/.case OP_
280c0 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a  LoadAnalysis: {.
280d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
280e0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
280f0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20  db->nDb );.  rc 
28100 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69  = sqlite3Analysi
28110 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70  sLoad(db, pOp->p
28120 31 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d  1);.  break;  .}
28130 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69  .#endif /* !defi
28140 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
28150 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20  ANALYZE) */../* 
28160 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c  Opcode: DropTabl
28170 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  e P1 * * P4 *.**
28180 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
28190 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
281a0 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
281b0 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
281c0 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e  e.** the table n
281d0 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
281e0 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
281f0 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20   called after a 
28200 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70  table.** is drop
28210 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ped in order to 
28220 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61  keep the interna
28230 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
28240 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
28250 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
28260 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
28270 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
28280 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c  opTable: {.  sql
28290 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
282a0 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70  eteTable(db, pOp
282b0 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
282c0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
282d0 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64   Opcode: DropInd
282e0 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  ex P1 * * P4 *.*
282f0 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
28300 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
28310 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
28320 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
28330 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20  be.** the index 
28340 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
28350 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
28360 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
28370 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72  n index.** is dr
28380 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74  opped in order t
28390 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72  o keep the inter
283a0 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
283b0 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
283c0 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
283d0 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
283e0 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
283f0 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73  DropIndex: {.  s
28400 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
28410 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70  eleteIndex(db, p
28420 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
28430 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
28440 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54  /* Opcode: DropT
28450 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34  rigger P1 * * P4
28460 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
28470 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
28480 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
28490 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
284a0 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72  scribe.** the tr
284b0 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69  igger named P4 i
284c0 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
284d0 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
284e0 66 74 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a  fter a trigger.*
284f0 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20  * is dropped in 
28500 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68  order to keep th
28510 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65  e internal repre
28520 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
28530 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69  .** schema consi
28540 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20  stent with what 
28550 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63  is on disk..*/.c
28560 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67  ase OP_DropTrigg
28570 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55  er: {.  sqlite3U
28580 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
28590 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70  igger(db, pOp->p
285a0 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
285b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e   break;.}...#ifn
285c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
285d0 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a  INTEGRITY_CHECK.
285e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67  /* Opcode: Integ
285f0 72 69 74 79 43 6b 20 50 31 20 50 32 20 50 33 20  rityCk P1 P2 P3 
28600 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e  * P5.**.** Do an
28610 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65   analysis of the
28620 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20   currently open 
28630 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65  database.  Store
28640 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   in.** register 
28650 50 31 20 74 68 65 20 74 65 78 74 20 6f 66 20 61  P1 the text of a
28660 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
28670 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70  describing any p
28680 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e  roblems..** If n
28690 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66  o problems are f
286a0 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55  ound, store a NU
286b0 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  LL in register P
286c0 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67  1..**.** The reg
286d0 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e  ister P3 contain
286e0 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  s the maximum nu
286f0 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20  mber of allowed 
28700 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f  errors..** At mo
28710 73 74 20 72 65 67 28 50 33 29 20 65 72 72 6f 72  st reg(P3) error
28720 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74  s will be report
28730 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  ed..** In other 
28740 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79  words, the analy
28750 73 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f  sis stops as soo
28760 6e 20 61 73 20 72 65 67 28 50 31 29 20 65 72 72  n as reg(P1) err
28770 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e  ors are .** seen
28780 2e 20 20 52 65 67 28 50 31 29 20 69 73 20 75 70  .  Reg(P1) is up
28790 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20 6e  dated with the n
287a0 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
287b0 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a  remaining..**.**
287c0 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   The root page n
287d0 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61  umbers of all ta
287e0 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74 61  bles in the data
287f0 62 61 73 65 20 61 72 65 20 69 6e 74 65 67 65 72  base are integer
28800 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 72 65  .** stored in re
28810 67 28 50 31 29 2c 20 72 65 67 28 50 31 2b 31 29  g(P1), reg(P1+1)
28820 2c 20 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e  , reg(P1+2), ...
28830 2e 20 20 54 68 65 72 65 20 61 72 65 20 50 32 20  .  There are P2 
28840 74 61 62 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e  tables.** total.
28850 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
28860 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68  not zero, the ch
28870 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74  eck is done on t
28880 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  he auxiliary dat
28890 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e  abase.** file, n
288a0 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ot the main data
288b0 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
288c0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
288d0 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  used to implemen
288e0 74 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f  t the integrity_
288f0 63 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f  check pragma..*/
28900 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69  .case OP_Integri
28910 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52  tyCk: {.  int nR
28920 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  oot;      /* Num
28930 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f  ber of tables to
28940 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72   check.  (Number
28950 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29   of root pages.)
28960 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74   */.  int *aRoot
28970 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f  ;     /* Array o
28980 66 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65  f rootpage numbe
28990 72 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f  rs for tables to
289a0 20 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20   be checked */. 
289b0 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20   int j;         
289c0 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
289d0 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
289e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
289f0 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74  of errors report
28a00 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b  ed */.  char *z;
28a10 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
28a20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72 65 70  of the error rep
28a30 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e  ort */.  Mem *pn
28a40 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69  Err;     /* Regi
28a50 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61  ster keeping tra
28a60 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d  ck of errors rem
28a70 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61 73 73  aining */..  ass
28a80 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
28a90 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20 70  r );.  nRoot = p
28aa0 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
28ab0 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61  ( nRoot>0 );.  a
28ac0 52 6f 6f 74 20 3d 20 73 71 6c 69 74 65 33 44 62  Root = sqlite3Db
28ad0 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69  MallocRaw(db, si
28ae0 7a 65 6f 66 28 69 6e 74 29 2a 28 6e 52 6f 6f 74  zeof(int)*(nRoot
28af0 2b 31 29 20 29 3b 0a 20 20 69 66 28 20 61 52 6f  +1) );.  if( aRo
28b00 6f 74 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  ot==0 ) goto no_
28b10 6d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  mem;.  assert( p
28b20 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
28b30 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
28b40 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
28b50 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  nErr = &aMem[pOp
28b60 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
28b70 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26   (pnErr->flags &
28b80 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
28b90 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72    assert( (pnErr
28ba0 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
28bb0 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30  tr|MEM_Blob))==0
28bc0 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
28bd0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66  em[pOp->p1];.  f
28be0 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b  or(j=0; j<nRoot;
28bf0 20 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74   j++){.    aRoot
28c00 5b 6a 5d 20 3d 20 28 69 6e 74 29 73 71 6c 69 74  [j] = (int)sqlit
28c10 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 26  e3VdbeIntValue(&
28c20 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20  pIn1[j]);.  }.  
28c30 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20  aRoot[j] = 0;.  
28c40 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c  assert( pOp->p5<
28c50 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
28c60 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
28c70 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
28c80 31 29 3c 3c 70 4f 70 2d 3e 70 35 29 29 21 3d 30  1)<<pOp->p5))!=0
28c90 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65   );.  z = sqlite
28ca0 33 42 74 72 65 65 49 6e 74 65 67 72 69 74 79 43  3BtreeIntegrityC
28cb0 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70  heck(db->aDb[pOp
28cc0 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74  ->p5].pBt, aRoot
28cd0 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20  , nRoot,.       
28ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28cf0 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 70            (int)p
28d00 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72  nErr->u.i, &nErr
28d10 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72  );.  sqlite3DbFr
28d20 65 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20  ee(db, aRoot);. 
28d30 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e   pnErr->u.i -= n
28d40 45 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  Err;.  sqlite3Vd
28d50 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e  beMemSetNull(pIn
28d60 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d  1);.  if( nErr==
28d70 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
28d80 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65   z==0 );.  }else
28d90 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20   if( z==0 ){.   
28da0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
28db0 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
28dc0 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
28dd0 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c  pIn1, z, -1, SQL
28de0 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65  ITE_UTF8, sqlite
28df0 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55  3_free);.  }.  U
28e00 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
28e10 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69  ZE(pIn1);.  sqli
28e20 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
28e30 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f  oding(pIn1, enco
28e40 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ding);.  break;.
28e50 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
28e60 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
28e70 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f  Y_CHECK */../* O
28e80 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64  pcode: RowSetAdd
28e90 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
28ea0 53 79 6e 6f 70 73 69 73 3a 20 20 72 6f 77 73 65  Synopsis:  rowse
28eb0 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a  t(P1)=r[P2].**.*
28ec0 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74  * Insert the int
28ed0 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20  eger value held 
28ee0 62 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69  by register P2 i
28ef0 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e  nto a boolean in
28f00 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72  dex.** held in r
28f10 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a  egister P1..**.*
28f20 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66  * An assertion f
28f30 61 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f  ails if P2 is no
28f40 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f  t an integer..*/
28f50 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41  .case OP_RowSetA
28f60 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69  dd: {       /* i
28f70 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e  n1, in2 */.  pIn
28f80 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
28f90 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
28fa0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
28fb0 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c  ssert( (pIn2->fl
28fc0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
28fd0 30 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  0 );.  if( (pIn1
28fe0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
28ff0 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  wSet)==0 ){.    
29000 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
29010 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20  tRowSet(pIn1);. 
29020 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c     if( (pIn1->fl
29030 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
29040 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  )==0 ) goto no_m
29050 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  em;.  }.  sqlite
29060 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49  3RowSetInsert(pI
29070 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70  n1->u.pRowSet, p
29080 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65  In2->u.i);.  bre
29090 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
290a0 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50 31 20  : RowSetRead P1 
290b0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
290c0 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 6f  opsis:  r[P3]=ro
290d0 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45  wset(P1).**.** E
290e0 78 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c  xtract the small
290f0 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62  est value from b
29100 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20  oolean index P1 
29110 61 6e 64 20 70 75 74 20 74 68 61 74 20 76 61 6c  and put that val
29120 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  ue into.** regis
29130 74 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20  ter P3.  Or, if 
29140 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31  boolean index P1
29150 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d   is initially em
29160 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a  pty, leave P3.**
29170 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a   unchanged and j
29180 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
29190 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  on P2..*/.case O
291a0 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20  P_RowSetRead: { 
291b0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
291c0 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n1, out3 */.  i6
291d0 34 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d  4 val;..  pIn1 =
291e0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
291f0 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
29200 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
29210 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69  )==0 .   || sqli
29220 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 70 49  te3RowSetNext(pI
29230 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26  n1->u.pRowSet, &
29240 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20  val)==0.  ){.   
29250 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20   /* The boolean 
29260 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a  index is empty *
29270 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
29280 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31  eMemSetNull(pIn1
29290 29 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  );.    pc = pOp-
292a0 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 56 64 62  >p2 - 1;.    Vdb
292b0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32  eBranchTaken(1,2
292c0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
292d0 2f 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20 70  /* A value was p
292e0 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 69  ulled from the i
292f0 6e 64 65 78 20 2a 2f 0a 20 20 20 20 73 71 6c 69  ndex */.    sqli
29300 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
29310 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  64(&aMem[pOp->p3
29320 5d 2c 20 76 61 6c 29 3b 0a 20 20 20 20 56 64 62  ], val);.    Vdb
29330 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 32  eBranchTaken(0,2
29340 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68  );.  }.  goto ch
29350 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
29360 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t;.}../* Opcode:
29370 20 52 6f 77 53 65 74 54 65 73 74 20 50 31 20 50   RowSetTest P1 P
29380 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70  2 P3 P4.** Synop
29390 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e  sis: if r[P3] in
293a0 20 72 6f 77 73 65 74 28 50 31 29 20 67 6f 74 6f   rowset(P1) goto
293b0 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P2.**.** Regist
293c0 65 72 20 50 33 20 69 73 20 61 73 73 75 6d 65 64  er P3 is assumed
293d0 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69   to hold a 64-bi
293e0 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  t integer value.
293f0 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31 0a   If register P1.
29400 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f  ** contains a Ro
29410 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20  wSet object and 
29420 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65  that RowSet obje
29430 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74  ct contains.** t
29440 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e  he value held in
29450 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67   P3, jump to reg
29460 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77  ister P2. Otherw
29470 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a  ise, insert the.
29480 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33  ** integer in P3
29490 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74   into the RowSet
294a0 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e   and continue on
294b0 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20   to the.** next 
294c0 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  opcode..**.** Th
294d0 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  e RowSet object 
294e0 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72  is optimized for
294f0 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65 20   the case where 
29500 73 75 63 63 65 73 73 69 76 65 20 73 65 74 73 0a  successive sets.
29510 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 2c 20  ** of integers, 
29520 77 68 65 72 65 20 65 61 63 68 20 73 65 74 20 63  where each set c
29530 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69  ontains no dupli
29540 63 61 74 65 73 2e 20 45 61 63 68 20 73 65 74 0a  cates. Each set.
29550 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20 69 73 20  ** of values is 
29560 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
29570 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e  unique P4 value.
29580 20 54 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a   The first set.*
29590 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d  * must have P4==
295a0 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74  0, the final set
295b0 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74   P4=-1.  P4 must
295c0 20 62 65 20 65 69 74 68 65 72 20 2d 31 20 6f 72   be either -1 or
295d0 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65  .** non-negative
295e0 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74  .  For non-negat
295f0 69 76 65 20 76 61 6c 75 65 73 20 6f 66 20 50 34  ive values of P4
29600 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20   only the lower 
29610 34 0a 2a 2a 20 62 69 74 73 20 61 72 65 20 73 69  4.** bits are si
29620 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a  gnificant..**.**
29630 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74   This allows opt
29640 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20  imizations: (a) 
29650 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65  when P4==0 there
29660 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74   is no need to t
29670 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65  est.** the rowse
29680 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c  t object for P3,
29690 20 61 73 20 69 74 20 69 73 20 67 75 61 72 61 6e   as it is guaran
296a0 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74  teed not to cont
296b0 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77  ain it,.** (b) w
296c0 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65  hen P4==-1 there
296d0 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69   is no need to i
296e0 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c  nsert the value,
296f0 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e   as it will.** n
29700 65 76 65 72 20 62 65 20 74 65 73 74 65 64 20 66  ever be tested f
29710 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e  or, and (c) when
29720 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 69 73   a value that is
29730 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 69   part of set X i
29740 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74  s.** inserted, t
29750 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
29760 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65 65  to search to see
29770 20 69 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c   if the same val
29780 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f  ue was.** previo
29790 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73  usly inserted as
297a0 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 28   part of set X (
297b0 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20 70  only if it was p
297c0 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73  reviously.** ins
297d0 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66  erted as part of
297e0 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29   some other set)
297f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
29800 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20  SetTest: {      
29810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
29820 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  * jump, in1, in3
29830 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a   */.  int iSet;.
29840 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20    int exists;.. 
29850 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
29860 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d  p->p1];.  pIn3 =
29870 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
29880 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70  .  iSet = pOp->p
29890 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70  4.i;.  assert( p
298a0 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In3->flags&MEM_I
298b0 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  nt );..  /* If t
298c0 68 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67  here is anything
298d0 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f   other than a ro
298e0 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d  wset object in m
298f0 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20  emory cell P1,. 
29900 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f   ** delete it no
29910 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65  w and initialize
29920 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74   P1 with an empt
29930 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20  y rowset.  */.  
29940 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
29950 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
29960 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
29970 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74  VdbeMemSetRowSet
29980 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20  (pIn1);.    if( 
29990 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
299a0 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20  EM_RowSet)==0 ) 
299b0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
299c0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
299d0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
299e0 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  2 );.  assert( i
299f0 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e  Set==-1 || iSet>
29a00 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74  =0 );.  if( iSet
29a10 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d   ){.    exists =
29a20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65   sqlite3RowSetTe
29a30 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  st(pIn1->u.pRowS
29a40 65 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  et, .           
29a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a60 20 20 20 20 28 75 38 29 28 69 53 65 74 3e 3d 30      (u8)(iSet>=0
29a70 20 3f 20 69 53 65 74 20 26 20 30 78 66 20 3a 20   ? iSet & 0xf : 
29a80 30 78 66 66 29 2c 0a 20 20 20 20 20 20 20 20 20  0xff),.         
29a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29aa0 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 29        pIn3->u.i)
29ab0 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  ;.    VdbeBranch
29ac0 54 61 6b 65 6e 28 65 78 69 73 74 73 21 3d 30 2c  Taken(exists!=0,
29ad0 32 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73  2);.    if( exis
29ae0 74 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  ts ){.      pc =
29af0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
29b00 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
29b10 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e  .  }.  if( iSet>
29b20 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
29b30 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49  3RowSetInsert(pI
29b40 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70  n1->u.pRowSet, p
29b50 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20  In3->u.i);.  }. 
29b60 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e   break;.}...#ifn
29b70 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
29b80 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f  TRIGGER../* Opco
29b90 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50  de: Program P1 P
29ba0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
29bb0 20 45 78 65 63 75 74 65 20 74 68 65 20 74 72 69   Execute the tri
29bc0 67 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73  gger program pas
29bd0 73 65 64 20 61 73 20 50 34 20 28 74 79 70 65 20  sed as P4 (type 
29be0 50 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20  P4_SUBPROGRAM). 
29bf0 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69  .**.** P1 contai
29c00 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  ns the address o
29c10 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  f the memory cel
29c20 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  l that contains 
29c30 74 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79  the first memory
29c40 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20   .** cell in an 
29c50 61 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20  array of values 
29c60 75 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74  used as argument
29c70 73 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f  s to the sub-pro
29c80 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e  gram. P2 .** con
29c90 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73  tains the addres
29ca0 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20  s to jump to if 
29cb0 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  the sub-program 
29cc0 74 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45  throws an IGNORE
29cd0 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75   .** exception u
29ce0 73 69 6e 67 20 74 68 65 20 52 41 49 53 45 28 29  sing the RAISE()
29cf0 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73   function. Regis
29d00 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20  ter P3 contains 
29d10 74 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20  the address .** 
29d20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  of a memory cell
29d30 20 69 6e 20 74 68 69 73 20 28 74 68 65 20 70 61   in this (the pa
29d40 72 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73  rent) VM that is
29d50 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74   used to allocat
29d60 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79  e the .** memory
29d70 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
29d80 20 73 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e   sub-vdbe at run
29d90 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  time..**.** P4 i
29da0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
29db0 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67  he VM containing
29dc0 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
29dd0 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  gram..**.** If P
29de0 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  5 is non-zero, t
29df0 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 70 72  hen recursive pr
29e00 6f 67 72 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e  ogram invocation
29e10 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a   is enabled..*/.
29e20 63 61 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a  case OP_Program:
29e30 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
29e40 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b  p */.  int nMem;
29e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
29e60 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  * Number of memo
29e70 72 79 20 72 65 67 69 73 74 65 72 73 20 66 6f 72  ry registers for
29e80 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a   sub-program */.
29e90 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20    int nByte;    
29ea0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74            /* Byt
29eb0 65 73 20 6f 66 20 72 75 6e 74 69 6d 65 20 73 70  es of runtime sp
29ec0 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72  ace required for
29ed0 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a   sub-program */.
29ee0 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20 20    Mem *pRt;     
29ef0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
29f00 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74  ister to allocat
29f10 65 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20  e runtime space 
29f20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20  */.  Mem *pMem; 
29f30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
29f40 55 73 65 64 20 74 6f 20 69 74 65 72 61 74 65 20  Used to iterate 
29f50 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63  through memory c
29f60 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ells */.  Mem *p
29f70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
29f80 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79    /* Last memory
29f90 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72   cell in new arr
29fa0 61 79 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  ay */.  VdbeFram
29fb0 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 20  e *pFrame;      
29fc0 2f 2a 20 4e 65 77 20 76 64 62 65 20 66 72 61 6d  /* New vdbe fram
29fd0 65 20 74 6f 20 65 78 65 63 75 74 65 20 69 6e 20  e to execute in 
29fe0 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20  */.  SubProgram 
29ff0 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20  *pProgram;   /* 
2a000 53 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65  Sub-program to e
2a010 78 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64  xecute */.  void
2a020 20 2a 74 3b 20 20 20 20 20 20 20 20 20 20 20 20   *t;            
2a030 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65      /* Token ide
2a040 6e 74 69 66 79 69 6e 67 20 74 72 69 67 67 65 72  ntifying trigger
2a050 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20   */..  pProgram 
2a060 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72  = pOp->p4.pProgr
2a070 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d 65  am;.  pRt = &aMe
2a080 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
2a090 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
2a0a0 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a  nOp>0 );.  .  /*
2a0b0 20 49 66 20 74 68 65 20 70 35 20 66 6c 61 67 20   If the p5 flag 
2a0c0 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72  is clear, then r
2a0d0 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74  ecursive invocat
2a0e0 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 20  ion of triggers 
2a0f0 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65  is .  ** disable
2a100 64 20 66 6f 72 20 62 61 63 6b 77 61 72 64 73 20  d for backwards 
2a110 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 28 70  compatibility (p
2a120 35 20 69 73 20 73 65 74 20 69 66 20 74 68 69 73  5 is set if this
2a130 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a   sub-program.  *
2a140 2a 20 69 73 20 72 65 61 6c 6c 79 20 61 20 74 72  * is really a tr
2a150 69 67 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72  igger, not a for
2a160 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c  eign key action,
2a170 20 61 6e 64 20 74 68 65 20 66 6c 61 67 20 73 65   and the flag se
2a180 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72  t.  ** and clear
2a190 65 64 20 62 79 20 74 68 65 20 22 50 52 41 47 4d  ed by the "PRAGM
2a1a0 41 20 72 65 63 75 72 73 69 76 65 5f 74 72 69 67  A recursive_trig
2a1b0 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73  gers" command is
2a1c0 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20   clear)..  ** . 
2a1d0 20 2a 2a 20 49 74 20 69 73 20 72 65 63 75 72 73   ** It is recurs
2a1e0 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  ive invocation o
2a1f0 66 20 74 72 69 67 67 65 72 73 2c 20 61 74 20 74  f triggers, at t
2a200 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68  he SQL level, th
2a210 61 74 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61  at is .  ** disa
2a220 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61  bled. In some ca
2a230 73 65 73 20 61 20 73 69 6e 67 6c 65 20 74 72 69  ses a single tri
2a240 67 67 65 72 20 6d 61 79 20 67 65 6e 65 72 61 74  gger may generat
2a250 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  e more than one 
2a260 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d  .  ** SubProgram
2a270 20 28 69 66 20 74 68 65 20 74 72 69 67 67 65 72   (if the trigger
2a280 20 6d 61 79 20 62 65 20 65 78 65 63 75 74 65 64   may be executed
2a290 20 77 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20   with more than 
2a2a0 6f 6e 65 20 64 69 66 66 65 72 65 6e 74 20 0a 20  one different . 
2a2b0 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20   ** ON CONFLICT 
2a2c0 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75 62 50  algorithm). SubP
2a2d0 72 6f 67 72 61 6d 20 73 74 72 75 63 74 75 72 65  rogram structure
2a2e0 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
2a2f0 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20  h a.  ** single 
2a300 74 72 69 67 67 65 72 20 61 6c 6c 20 68 61 76 65  trigger all have
2a310 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
2a320 66 6f 72 20 74 68 65 20 53 75 62 50 72 6f 67 72  for the SubProgr
2a330 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76  am.token .  ** v
2a340 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69  ariable.  */.  i
2a350 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
2a360 20 20 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e    t = pProgram->
2a370 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70  token;.    for(p
2a380 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b  Frame=p->pFrame;
2a390 20 70 46 72 61 6d 65 20 26 26 20 70 46 72 61 6d   pFrame && pFram
2a3a0 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72  e->token!=t; pFr
2a3b0 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72  ame=pFrame->pPar
2a3c0 65 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 70 46  ent);.    if( pF
2a3d0 72 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20 20  rame ) break;.  
2a3e0 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72 61  }..  if( p->nFra
2a3f0 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  me>=db->aLimit[S
2a400 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47  QLITE_LIMIT_TRIG
2a410 47 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20  GER_DEPTH] ){.  
2a420 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
2a430 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ROR;.    sqlite3
2a440 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2a450 72 72 4d 73 67 2c 20 64 62 2c 20 22 74 6f 6f 20  rrMsg, db, "too 
2a460 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20 74  many levels of t
2a470 72 69 67 67 65 72 20 72 65 63 75 72 73 69 6f 6e  rigger recursion
2a480 22 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  ");.    break;. 
2a490 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65   }..  /* Registe
2a4a0 72 20 70 52 74 20 69 73 20 75 73 65 64 20 74 6f  r pRt is used to
2a4b0 20 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72   store the memor
2a4c0 79 20 72 65 71 75 69 72 65 64 20 74 6f 20 73 61  y required to sa
2a4d0 76 65 20 74 68 65 20 73 74 61 74 65 0a 20 20 2a  ve the state.  *
2a4e0 2a 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  * of the current
2a4f0 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68   program, and th
2a500 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
2a510 64 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f 20  d at runtime to 
2a520 65 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68 65  execute.  ** the
2a530 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
2a540 2e 20 49 66 20 74 68 69 73 20 74 72 69 67 67 65  . If this trigge
2a550 72 20 68 61 73 20 62 65 65 6e 20 66 69 72 65 64  r has been fired
2a560 20 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70 52   before, then pR
2a570 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65 61  t .  ** is alrea
2a580 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74  dy allocated. Ot
2a590 68 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73 74  herwise, it must
2a5a0 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e   be initialized.
2a5b0 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74 2d    */.  if( (pRt-
2a5c0 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65  >flags&MEM_Frame
2a5d0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53  )==0 ){.    /* S
2a5e0 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69  ubProgram.nMem i
2a5f0 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d  s set to the num
2a600 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65  ber of memory ce
2a610 6c 6c 73 20 75 73 65 64 20 62 79 20 74 68 65 20  lls used by the 
2a620 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20  .    ** program 
2a630 73 74 6f 72 65 64 20 69 6e 20 53 75 62 50 72 6f  stored in SubPro
2a640 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c  gram.aOp. As wel
2a650 6c 20 61 73 20 74 68 65 73 65 2c 20 6f 6e 65 20  l as these, one 
2a660 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65  memory.    ** ce
2a670 6c 6c 20 69 73 20 72 65 71 75 69 72 65 64 20 66  ll is required f
2a680 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72 20 75  or each cursor u
2a690 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72  sed by the progr
2a6a0 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20  am. Set local.  
2a6b0 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d    ** variable nM
2a6c0 65 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c 20 56  em (and later, V
2a6d0 64 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d  dbeFrame.nChildM
2a6e0 65 6d 29 20 74 6f 20 74 68 69 73 20 76 61 6c 75  em) to this valu
2a6f0 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d  e..    */.    nM
2a700 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  em = pProgram->n
2a710 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e  Mem + pProgram->
2a720 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79 74 65 20  nCsr;.    nByte 
2a730 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28  = ROUND8(sizeof(
2a740 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20 20  VdbeFrame)).    
2a750 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d            + nMem
2a760 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20   * sizeof(Mem). 
2a770 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 70               + p
2a780 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20  Program->nCsr * 
2a790 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
2a7a0 72 20 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20  r *).           
2a7b0 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e     + pProgram->n
2a7c0 4f 6e 63 65 20 2a 20 73 69 7a 65 6f 66 28 75 38  Once * sizeof(u8
2a7d0 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20  );.    pFrame = 
2a7e0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
2a7f0 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a  ero(db, nByte);.
2a800 20 20 20 20 69 66 28 20 21 70 46 72 61 6d 65 20      if( !pFrame 
2a810 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f  ){.      goto no
2a820 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _mem;.    }.    
2a830 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
2a840 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20  lease(pRt);.    
2a850 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  pRt->flags = MEM
2a860 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d  _Frame;.    pRt-
2a870 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61  >u.pFrame = pFra
2a880 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d  me;..    pFrame-
2a890 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61  >v = p;.    pFra
2a8a0 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20  me->nChildMem = 
2a8b0 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65  nMem;.    pFrame
2a8c0 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50  ->nChildCsr = pP
2a8d0 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20  rogram->nCsr;.  
2a8e0 20 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 70    pFrame->pc = p
2a8f0 63 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  c;.    pFrame->a
2a900 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20  Mem = p->aMem;. 
2a910 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20     pFrame->nMem 
2a920 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70  = p->nMem;.    p
2a930 46 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70  Frame->apCsr = p
2a940 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72  ->apCsr;.    pFr
2a950 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70  ame->nCursor = p
2a960 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70  ->nCursor;.    p
2a970 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e  Frame->aOp = p->
2a980 61 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  aOp;.    pFrame-
2a990 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20  >nOp = p->nOp;. 
2a9a0 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e     pFrame->token
2a9b0 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b   = pProgram->tok
2a9c0 65 6e 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  en;.    pFrame->
2a9d0 61 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 61  aOnceFlag = p->a
2a9e0 4f 6e 63 65 46 6c 61 67 3b 0a 20 20 20 20 70 46  OnceFlag;.    pF
2a9f0 72 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20  rame->nOnceFlag 
2aa00 3d 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a  = p->nOnceFlag;.
2aa10 0a 20 20 20 20 70 45 6e 64 20 3d 20 26 56 64 62  .    pEnd = &Vdb
2aa20 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65  eFrameMem(pFrame
2aa30 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  )[pFrame->nChild
2aa40 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d  Mem];.    for(pM
2aa50 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d 28  em=VdbeFrameMem(
2aa60 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70  pFrame); pMem!=p
2aa70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20  End; pMem++){.  
2aa80 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20      pMem->flags 
2aa90 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b  = MEM_Undefined;
2aaa0 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20  .      pMem->db 
2aab0 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  = db;.    }.  }e
2aac0 6c 73 65 7b 0a 20 20 20 20 70 46 72 61 6d 65 20  lse{.    pFrame 
2aad0 3d 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b  = pRt->u.pFrame;
2aae0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72  .    assert( pPr
2aaf0 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f  ogram->nMem+pPro
2ab00 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61  gram->nCsr==pFra
2ab10 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 29 3b  me->nChildMem );
2ab20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72  .    assert( pPr
2ab30 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72  ogram->nCsr==pFr
2ab40 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29  ame->nChildCsr )
2ab50 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 63  ;.    assert( pc
2ab60 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a  ==pFrame->pc );.
2ab70 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65    }..  p->nFrame
2ab80 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50  ++;.  pFrame->pP
2ab90 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d  arent = p->pFram
2aba0 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73  e;.  pFrame->las
2abb0 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77  tRowid = lastRow
2abc0 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43  id;.  pFrame->nC
2abd0 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e  hange = p->nChan
2abe0 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65  ge;.  p->nChange
2abf0 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d   = 0;.  p->pFram
2ac00 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d  e = pFrame;.  p-
2ac10 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26  >aMem = aMem = &
2ac20 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
2ac30 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e  ame)[-1];.  p->n
2ac40 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43  Mem = pFrame->nC
2ac50 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43  hildMem;.  p->nC
2ac60 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72  ursor = (u16)pFr
2ac70 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a  ame->nChildCsr;.
2ac80 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64    p->apCsr = (Vd
2ac90 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65  beCursor **)&aMe
2aca0 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20  m[p->nMem+1];.  
2acb0 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70  p->aOp = aOp = p
2acc0 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20  Program->aOp;.  
2acd0 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61  p->nOp = pProgra
2ace0 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e  m->nOp;.  p->aOn
2acf0 63 65 46 6c 61 67 20 3d 20 28 75 38 20 2a 29 26  ceFlag = (u8 *)&
2ad00 70 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e 43 75 72  p->apCsr[p->nCur
2ad10 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65  sor];.  p->nOnce
2ad20 46 6c 61 67 20 3d 20 70 50 72 6f 67 72 61 6d 2d  Flag = pProgram-
2ad30 3e 6e 4f 6e 63 65 3b 0a 20 20 70 63 20 3d 20 2d  >nOnce;.  pc = -
2ad40 31 3b 0a 20 20 6d 65 6d 73 65 74 28 70 2d 3e 61  1;.  memset(p->a
2ad50 4f 6e 63 65 46 6c 61 67 2c 20 30 2c 20 70 2d 3e  OnceFlag, 0, p->
2ad60 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a 20 20 62  nOnceFlag);..  b
2ad70 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2ad80 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50 32 20  de: Param P1 P2 
2ad90 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73  * * *.**.** This
2ada0 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
2adb0 65 76 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20  ever present in 
2adc0 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c  sub-programs cal
2add0 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a 2a 20  led via the .** 
2ade0 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72  OP_Program instr
2adf0 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76  uction. Copy a v
2ae00 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20 73  alue currently s
2ae10 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72  tored in a memor
2ae20 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68  y .** cell of th
2ae30 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e  e calling (paren
2ae40 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c  t) frame to cell
2ae50 20 50 32 20 69 6e 20 74 68 65 20 63 75 72 72 65   P2 in the curre
2ae60 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64  nt frames .** ad
2ae70 64 72 65 73 73 20 73 70 61 63 65 2e 20 54 68 69  dress space. Thi
2ae80 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69  s is used by tri
2ae90 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74 6f  gger programs to
2aea0 20 61 63 63 65 73 73 20 74 68 65 20 6e 65 77 2e   access the new.
2aeb0 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20  * .** and old.* 
2aec0 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  values..**.** Th
2aed0 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65  e address of the
2aee0 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61 72   cell in the par
2aef0 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64 65 74  ent frame is det
2af00 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64 69 6e  ermined by addin
2af10 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f  g.** the value o
2af20 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e  f the P1 argumen
2af30 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
2af40 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e  f the P1 argumen
2af50 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c  t to the.** call
2af60 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69  ing OP_Program i
2af70 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
2af80 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20  ase OP_Param: { 
2af90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
2afa0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
2afb0 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
2afc0 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b  ame;.  Mem *pIn;
2afd0 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70  .  pFrame = p->p
2afe0 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26  Frame;.  pIn = &
2aff0 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
2b000 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61  ->p1 + pFrame->a
2b010 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70  Op[pFrame->pc].p
2b020 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65 33  1];   .  sqlite3
2b030 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
2b040 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45  py(pOut, pIn, ME
2b050 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65 61  M_Ephem);.  brea
2b060 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  k;.}..#endif /* 
2b070 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2b080 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a  MIT_TRIGGER */..
2b090 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2b0a0 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
2b0b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75  /* Opcode: FkCou
2b0c0 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a  nter P1 P2 * * *
2b0d0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b  .** Synopsis: fk
2b0e0 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a  ctr[P1]+=P2.**.*
2b0f0 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63  * Increment a "c
2b100 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65  onstraint counte
2b110 72 22 20 62 79 20 50 32 20 28 50 32 20 6d 61 79  r" by P2 (P2 may
2b120 20 62 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20   be negative or 
2b130 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66  positive)..** If
2b140 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P1 is non-zero,
2b150 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
2b160 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72  nstraint counter
2b170 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
2b180 0a 2a 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f  .** (deferred fo
2b190 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
2b1a0 61 69 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73  aints). Otherwis
2b1b0 65 2c 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f  e, if P1 is zero
2b1c0 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d  , the .** statem
2b1d0 65 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69  ent counter is i
2b1e0 6e 63 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65  ncremented (imme
2b1f0 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65  diate foreign ke
2b200 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a  y constraints)..
2b210 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75  */.case OP_FkCou
2b220 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28 20 64 62  nter: {.  if( db
2b230 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
2b240 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a 20 20 20  _DeferFKs ){.   
2b250 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
2b260 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32  mCons += pOp->p2
2b270 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f  ;.  }else if( pO
2b280 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d  p->p1 ){.    db-
2b290 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b  >nDeferredCons +
2b2a0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c  = pOp->p2;.  }el
2b2b0 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f  se{.    p->nFkCo
2b2c0 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d  nstraint += pOp-
2b2d0 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  >p2;.  }.  break
2b2e0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2b2f0 46 6b 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a  FkIfZero P1 P2 *
2b300 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2b310 3a 20 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d  : if fkctr[P1]==
2b320 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  0 goto P2.**.** 
2b330 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73 74  This opcode test
2b340 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20 6b  s if a foreign k
2b350 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f  ey constraint-co
2b360 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e 74  unter is current
2b370 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73  ly zero..** If s
2b380 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  o, jump to instr
2b390 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72  uction P2. Other
2b3a0 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75  wise, fall throu
2b3b0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 0a  gh to the next .
2b3c0 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ** instruction..
2b3d0 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  **.** If P1 is n
2b3e0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  on-zero, then th
2b3f0 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
2b400 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  if the database 
2b410 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
2b420 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74  er.** is zero (t
2b430 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e  he one that coun
2b440 74 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  ts deferred cons
2b450 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
2b460 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a 20  s). If P1 is.** 
2b470 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69  zero, the jump i
2b480 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 73  s taken if the s
2b490 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61  tatement constra
2b4a0 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a  int-counter is z
2b4b0 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74  ero.** (immediat
2b4c0 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
2b4d0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
2b4e0 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ons)..*/.case OP
2b4f0 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20  _FkIfZero: {    
2b500 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2b510 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b    if( pOp->p1 ){
2b520 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2b530 61 6b 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72 72  aken(db->nDeferr
2b540 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d  edCons==0 && db-
2b550 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
2b560 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66  s==0, 2);.    if
2b570 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  ( db->nDeferredC
2b580 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44  ons==0 && db->nD
2b590 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d  eferredImmCons==
2b5a0 30 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  0 ) pc = pOp->p2
2b5b0 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  -1;.  }else{.   
2b5c0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2b5d0 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e  (p->nFkConstrain
2b5e0 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66  t==0 && db->nDef
2b5f0 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c  erredImmCons==0,
2b600 20 32 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e   2);.    if( p->
2b610 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30  nFkConstraint==0
2b620 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
2b630 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 70 63  dImmCons==0 ) pc
2b640 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
2b650 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2b660 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
2b670 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
2b680 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64  GN_KEY */..#ifnd
2b690 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
2b6a0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20  UTOINCREMENT./* 
2b6b0 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50  Opcode: MemMax P
2b6c0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
2b6d0 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61  nopsis: r[P1]=ma
2b6e0 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a  x(r[P1],r[P2]).*
2b6f0 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67  *.** P1 is a reg
2b700 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f  ister in the roo
2b710 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20  t frame of this 
2b720 56 4d 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61  VM (the root fra
2b730 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65  me is.** differe
2b740 6e 74 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72  nt from the curr
2b750 65 6e 74 20 66 72 61 6d 65 20 69 66 20 74 68 69  ent frame if thi
2b760 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
2b770 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a   being executed.
2b780 2a 2a 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d  ** within a sub-
2b790 70 72 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68  program). Set th
2b7a0 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
2b7b0 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61  ter P1 to the ma
2b7c0 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73  ximum of .** its
2b7d0 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61   current value a
2b7e0 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  nd the value in 
2b7f0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
2b800 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
2b810 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72  ion throws an er
2b820 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72  ror if the memor
2b830 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e  y cell is not in
2b840 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e  itially.** an in
2b850 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  teger..*/.case O
2b860 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20  P_MemMax: {     
2b870 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56     /* in2 */.  V
2b880 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
2b890 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d  ;.  if( p->pFram
2b8a0 65 20 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72  e ){.    for(pFr
2b8b0 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70  ame=p->pFrame; p
2b8c0 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20  Frame->pParent; 
2b8d0 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
2b8e0 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e  Parent);.    pIn
2b8f0 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65  1 = &pFrame->aMe
2b900 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65  m[pOp->p1];.  }e
2b910 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20  lse{.    pIn1 = 
2b920 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2b930 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 6d 65    }.  assert( me
2b940 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29  mIsValid(pIn1) )
2b950 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
2b960 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
2b970 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1);.  pIn2 = &aM
2b980 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73  em[pOp->p2];.  s
2b990 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
2b9a0 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20  egerify(pIn2);. 
2b9b0 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70   if( pIn1->u.i<p
2b9c0 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70  In2->u.i){.    p
2b9d0 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d  In1->u.i = pIn2-
2b9e0 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61  >u.i;.  }.  brea
2b9f0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2ba00 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
2ba10 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20  NCREMENT */../* 
2ba20 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31  Opcode: IfPos P1
2ba30 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2ba40 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e  opsis: if r[P1]>
2ba50 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  0 goto P2.**.** 
2ba60 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  If the value of 
2ba70 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 31  register P1 is 1
2ba80 20 6f 72 20 67 72 65 61 74 65 72 2c 20 6a 75 6d   or greater, jum
2ba90 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  p to P2..**.** I
2baa0 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20  t is illegal to 
2bab0 75 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63  use this instruc
2bac0 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74  tion on a regist
2bad0 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20  er that does.** 
2bae0 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  not contain an i
2baf0 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65  nteger.  An asse
2bb00 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c  rtion fault will
2bb10 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74   result if you t
2bb20 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ry..*/.case OP_I
2bb30 66 50 6f 73 3a 20 7b 20 20 20 20 20 20 20 20 2f  fPos: {        /
2bb40 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
2bb50 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2bb60 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2bb70 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
2bb80 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42  M_Int );.  VdbeB
2bb90 72 61 6e 63 68 54 61 6b 65 6e 28 20 70 49 6e 31  ranchTaken( pIn1
2bba0 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b 0a 20 20 69  ->u.i>0, 2);.  i
2bbb0 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29  f( pIn1->u.i>0 )
2bbc0 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  {.     pc = pOp-
2bbd0 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
2bbe0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2bbf0 64 65 3a 20 49 66 4e 65 67 20 50 31 20 50 32 20  de: IfNeg P1 P2 
2bc00 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2bc10 73 3a 20 69 66 20 72 5b 50 31 5d 3c 30 20 67 6f  s: if r[P1]<0 go
2bc20 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74  to P2.**.** If t
2bc30 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
2bc40 73 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20  ster P1 is less 
2bc50 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20  than zero, jump 
2bc60 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74  to P2. .**.** It
2bc70 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75   is illegal to u
2bc80 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  se this instruct
2bc90 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65  ion on a registe
2bca0 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e  r that does.** n
2bcb0 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  ot contain an in
2bcc0 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72  teger.  An asser
2bcd0 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20  tion fault will 
2bce0 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72  result if you tr
2bcf0 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  y..*/.case OP_If
2bd00 4e 65 67 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Neg: {        /*
2bd10 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
2bd20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2bd30 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2bd40 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
2bd50 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72  _Int );.  VdbeBr
2bd60 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e  anchTaken(pIn1->
2bd70 75 2e 69 3c 30 2c 20 32 29 3b 0a 20 20 69 66 28  u.i<0, 2);.  if(
2bd80 20 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a   pIn1->u.i<0 ){.
2bd90 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
2bda0 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
2bdb0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2bdc0 3a 20 49 66 5a 65 72 6f 20 50 31 20 50 32 20 50  : IfZero P1 P2 P
2bdd0 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
2bde0 73 3a 20 72 5b 50 31 5d 2b 3d 50 33 2c 20 69 66  s: r[P1]+=P3, if
2bdf0 20 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50   r[P1]==0 goto P
2be00 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69  2.**.** The regi
2be10 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e  ster P1 must con
2be20 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
2be30 20 20 41 64 64 20 6c 69 74 65 72 61 6c 20 50 33    Add literal P3
2be40 20 74 6f 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65   to the.** value
2be50 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
2be60 20 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 20    If the result 
2be70 69 73 20 65 78 61 63 74 6c 79 20 30 2c 20 6a 75  is exactly 0, ju
2be80 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a  mp to P2. .**.**
2be90 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74   It is illegal t
2bea0 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74 72  o use this instr
2beb0 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69  uction on a regi
2bec0 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a  ster that does.*
2bed0 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  * not contain an
2bee0 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73   integer.  An as
2bef0 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69  sertion fault wi
2bf00 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75  ll result if you
2bf10 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   try..*/.case OP
2bf20 5f 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  _IfZero: {      
2bf30 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
2bf40 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
2bf50 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2bf60 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
2bf70 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 49  &MEM_Int );.  pI
2bf80 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e  n1->u.i += pOp->
2bf90 70 33 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  p3;.  VdbeBranch
2bfa0 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d  Taken(pIn1->u.i=
2bfb0 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49  =0, 2);.  if( pI
2bfc0 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20  n1->u.i==0 ){.  
2bfd0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
2bfe0 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
2bff0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2c000 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20  AggStep * P2 P3 
2c010 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
2c020 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73  s: accum=r[P3] s
2c030 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a  tep(r[P2@P5]).**
2c040 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
2c050 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f  step function fo
2c060 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20  r an aggregate. 
2c070 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e   The.** function
2c080 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74   has P5 argument
2c090 73 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69  s.   P4 is a poi
2c0a0 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63  nter to the Func
2c0b0 44 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  Def.** structure
2c0c0 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20   that specifies 
2c0d0 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55  the function.  U
2c0e0 73 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50  se register.** P
2c0f0 33 20 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c  3 as the accumul
2c100 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ator..**.** The 
2c110 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  P5 arguments are
2c120 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
2c130 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a  ster P2 and its.
2c140 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a  ** successors..*
2c150 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65  /.case OP_AggSte
2c160 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20  p: {.  int n;.  
2c170 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d  int i;.  Mem *pM
2c180 65 6d 3b 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b  em;.  Mem *pRec;
2c190 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
2c1a0 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65  xt ctx;.  sqlite
2c1b0 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b  3_value **apVal;
2c1c0 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b  ..  n = pOp->p5;
2c1d0 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 3d 30 20  .  assert( n>=0 
2c1e0 29 3b 0a 20 20 70 52 65 63 20 3d 20 26 61 4d 65  );.  pRec = &aMe
2c1f0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70  m[pOp->p2];.  ap
2c200 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Val = p->apArg;.
2c210 20 20 61 73 73 65 72 74 28 20 61 70 56 61 6c 20    assert( apVal 
2c220 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f 72  || n==0 );.  for
2c230 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20  (i=0; i<n; i++, 
2c240 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73  pRec++){.    ass
2c250 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
2c260 70 52 65 63 29 20 29 3b 0a 20 20 20 20 61 70 56  pRec) );.    apV
2c270 61 6c 5b 69 5d 20 3d 20 70 52 65 63 3b 0a 20 20  al[i] = pRec;.  
2c280 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
2c290 67 65 28 70 2c 20 70 52 65 63 29 3b 0a 20 20 7d  ge(p, pRec);.  }
2c2a0 0a 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70  .  ctx.pFunc = p
2c2b0 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20  Op->p4.pFunc;.  
2c2c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
2c2d0 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
2c2e0 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
2c2f0 72 29 20 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d  r) );.  ctx.pMem
2c300 20 3d 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   = pMem = &aMem[
2c310 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d  pOp->p3];.  pMem
2c320 2d 3e 6e 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66  ->n++;.  ctx.s.f
2c330 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
2c340 0a 20 20 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a  .  ctx.s.z = 0;.
2c350 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20    ctx.s.zMalloc 
2c360 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65  = 0;.  ctx.s.xDe
2c370 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64  l = 0;.  ctx.s.d
2c380 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 69 73  b = db;.  ctx.is
2c390 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78  Error = 0;.  ctx
2c3a0 2e 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20 20 63 74  .pColl = 0;.  ct
2c3b0 78 2e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a  x.skipFlag = 0;.
2c3c0 20 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d    if( ctx.pFunc-
2c3d0 3e 66 75 6e 63 46 6c 61 67 73 20 26 20 53 51 4c  >funcFlags & SQL
2c3e0 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
2c3f0 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  L ){.    assert(
2c400 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20   pOp>p->aOp );. 
2c410 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
2c420 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  1].p4type==P4_CO
2c430 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73  LLSEQ );.    ass
2c440 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63  ert( pOp[-1].opc
2c450 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20  ode==OP_CollSeq 
2c460 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c  );.    ctx.pColl
2c470 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43   = pOp[-1].p4.pC
2c480 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63 74 78 2e  oll;.  }.  (ctx.
2c490 70 46 75 6e 63 2d 3e 78 53 74 65 70 29 28 26 63  pFunc->xStep)(&c
2c4a0 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f  tx, n, apVal); /
2c4b0 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32  * IMP: R-24505-2
2c4c0 33 32 33 30 20 2a 2f 0a 20 20 69 66 28 20 63 74  3230 */.  if( ct
2c4d0 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  x.isError ){.   
2c4e0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
2c4f0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
2c500 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
2c510 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78  _value_text(&ctx
2c520 2e 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63  .s));.    rc = c
2c530 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a  tx.isError;.  }.
2c540 20 20 69 66 28 20 63 74 78 2e 73 6b 69 70 46 6c    if( ctx.skipFl
2c550 61 67 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  ag ){.    assert
2c560 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65  ( pOp[-1].opcode
2c570 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a  ==OP_CollSeq );.
2c580 20 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e      i = pOp[-1].
2c590 70 31 3b 0a 20 20 20 20 69 66 28 20 69 20 29 20  p1;.    if( i ) 
2c5a0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2c5b0 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c  tInt64(&aMem[i],
2c5c0 20 31 29 3b 0a 20 20 7d 0a 0a 20 20 73 71 6c 69   1);.  }..  sqli
2c5d0 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
2c5e0 65 28 26 63 74 78 2e 73 29 3b 0a 0a 20 20 62 72  e(&ctx.s);..  br
2c5f0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2c600 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50  e: AggFinal P1 P
2c610 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
2c620 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 31  psis: accum=r[P1
2c630 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65  ] N=P2.**.** Exe
2c640 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a  cute the finaliz
2c650 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  er function for 
2c660 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 50  an aggregate.  P
2c670 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f  1 is.** the memo
2c680 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
2c690 20 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61   is the accumula
2c6a0 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67 72  tor for the aggr
2c6b0 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  egate..**.** P2 
2c6c0 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
2c6d0 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20   arguments that 
2c6e0 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
2c6f0 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50  n takes and.** P
2c700 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
2c710 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f  o the FuncDef fo
2c720 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e  r this function.
2c730 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75    The P2.** argu
2c740 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64  ment is not used
2c750 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   by this opcode.
2c760 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65    It is only the
2c770 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61  re to disambigua
2c780 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  te.** functions 
2c790 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61  that can take va
2c7a0 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66  rying numbers of
2c7b0 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65   arguments.  The
2c7c0 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20  .** P4 argument 
2c7d0 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66  is only needed f
2c7e0 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72 61 74  or the degenerat
2c7f0 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20  e case where.** 
2c800 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
2c810 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f  n was not previo
2c820 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a  usly called..*/.
2c830 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c  case OP_AggFinal
2c840 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  : {.  Mem *pMem;
2c850 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2c860 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
2c870 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
2c880 72 73 6f 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20  rsor) );.  pMem 
2c890 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2c8a0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65  ;.  assert( (pMe
2c8b0 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d  m->flags & ~(MEM
2c8c0 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d  _Null|MEM_Agg))=
2c8d0 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
2c8e0 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c  ite3VdbeMemFinal
2c8f0 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70  ize(pMem, pOp->p
2c900 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20  4.pFunc);.  if( 
2c910 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  rc ){.    sqlite
2c920 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2c930 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
2c940 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
2c950 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d  text(pMem));.  }
2c960 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
2c970 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65  angeEncoding(pMe
2c980 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  m, encoding);.  
2c990 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
2c9a0 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28  IZE(pMem);.  if(
2c9b0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
2c9c0 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20  ooBig(pMem) ){. 
2c9d0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
2c9e0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2c9f0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2ca00 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f  OMIT_WAL./* Opco
2ca10 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50  de: Checkpoint P
2ca20 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
2ca30 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74  * Checkpoint dat
2ca40 61 62 61 73 65 20 50 31 2e 20 54 68 69 73 20 69  abase P1. This i
2ca50 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20  s a no-op if P1 
2ca60 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79  is not currently
2ca70 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e   in.** WAL mode.
2ca80 20 50 61 72 61 6d 65 74 65 72 20 50 32 20 69 73   Parameter P2 is
2ca90 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43   one of SQLITE_C
2caa0 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56  HECKPOINT_PASSIV
2cab0 45 2c 20 46 55 4c 4c 0a 2a 2a 20 6f 72 20 52 45  E, FULL.** or RE
2cac0 53 54 41 52 54 2e 20 20 57 72 69 74 65 20 31 20  START.  Write 1 
2cad0 6f 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  or 0 into mem[P3
2cae0 5d 20 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f  ] if the checkpo
2caf0 69 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53  int returns.** S
2cb00 51 4c 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f  QLITE_BUSY or no
2cb10 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  t, respectively.
2cb20 20 20 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62    Write the numb
2cb30 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
2cb40 68 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20  he.** WAL after 
2cb50 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69  the checkpoint i
2cb60 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e  nto mem[P3+1] an
2cb70 64 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  d the number of 
2cb80 70 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  pages.** in the 
2cb90 57 41 4c 20 74 68 61 74 20 68 61 76 65 20 62 65  WAL that have be
2cba0 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20  en checkpointed 
2cbb0 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70  after the checkp
2cbc0 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65  oint.** complete
2cbd0 73 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d  s into mem[P3+2]
2cbe0 2e 20 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e  .  However on an
2cbf0 20 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31   error, mem[P3+1
2cc00 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b  ] and.** mem[P3+
2cc10 32 5d 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a  2] are initializ
2cc20 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73  ed to -1..*/.cas
2cc30 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a  e OP_Checkpoint:
2cc40 20 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20   {.  int i;     
2cc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc60 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
2cc70 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52  nter */.  int aR
2cc80 65 73 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20  es[3];          
2cc90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
2cca0 75 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ults */.  Mem *p
2ccb0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
2ccc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69            /* Wri
2ccd0 74 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 20  te results here 
2cce0 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
2ccf0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2cd00 20 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20    aRes[0] = 0;. 
2cd10 20 61 52 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b   aRes[1] = aRes[
2cd20 32 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72  2] = -1;.  asser
2cd30 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  t( pOp->p2==SQLI
2cd40 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41  TE_CHECKPOINT_PA
2cd50 53 53 49 56 45 0a 20 20 20 20 20 20 20 7c 7c 20  SSIVE.       || 
2cd60 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
2cd70 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a  CHECKPOINT_FULL.
2cd80 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
2cd90 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
2cda0 4f 49 4e 54 5f 52 45 53 54 41 52 54 0a 20 20 29  OINT_RESTART.  )
2cdb0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2cdc0 43 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70  Checkpoint(db, p
2cdd0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c  Op->p1, pOp->p2,
2cde0 20 26 61 52 65 73 5b 31 5d 2c 20 26 61 52 65 73   &aRes[1], &aRes
2cdf0 5b 32 5d 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  [2]);.  if( rc==
2ce00 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
2ce10 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
2ce20 4b 3b 0a 20 20 20 20 61 52 65 73 5b 30 5d 20 3d  K;.    aRes[0] =
2ce30 20 31 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d   1;.  }.  for(i=
2ce40 30 2c 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b  0, pMem = &aMem[
2ce50 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69  pOp->p3]; i<3; i
2ce60 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20  ++, pMem++){.   
2ce70 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2ce80 65 74 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69  etInt64(pMem, (i
2ce90 36 34 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d  64)aRes[i]);.  }
2cea0 20 20 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b      .  break;.};
2ceb0 20 20 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64    .#endif..#ifnd
2cec0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
2ced0 52 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a  RAGMA./* Opcode:
2cee0 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20   JournalMode P1 
2cef0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
2cf00 43 68 61 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e  Change the journ
2cf10 61 6c 20 6d 6f 64 65 20 6f 66 20 64 61 74 61 62  al mode of datab
2cf20 61 73 65 20 50 31 20 74 6f 20 50 33 2e 20 50 33  ase P1 to P3. P3
2cf30 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20   must be one of 
2cf40 74 68 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55  the.** PAGER_JOU
2cf50 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c  RNALMODE_XXX val
2cf60 75 65 73 2e 20 49 66 20 63 68 61 6e 67 69 6e 67  ues. If changing
2cf70 20 62 65 74 77 65 65 6e 20 74 68 65 20 76 61 72   between the var
2cf80 69 6f 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a  ious rollback.**
2cf90 20 6d 6f 64 65 73 20 28 64 65 6c 65 74 65 2c 20   modes (delete, 
2cfa0 74 72 75 6e 63 61 74 65 2c 20 70 65 72 73 69 73  truncate, persis
2cfb0 74 2c 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72  t, off and memor
2cfc0 79 29 2c 20 74 68 69 73 20 69 73 20 61 20 73 69  y), this is a si
2cfd0 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f  mple.** operatio
2cfe0 6e 2e 20 4e 6f 20 49 4f 20 69 73 20 72 65 71 75  n. No IO is requ
2cff0 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63  ired..**.** If c
2d000 68 61 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20  hanging into or 
2d010 6f 75 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20  out of WAL mode 
2d020 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 69 73  the procedure is
2d030 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65   more complicate
2d040 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61  d..**.** Write a
2d050 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69   string containi
2d060 6e 67 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75  ng the final jou
2d070 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67  rnal-mode to reg
2d080 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
2d090 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65  e OP_JournalMode
2d0a0 3a 20 7b 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70  : {    /* out2-p
2d0b0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42  rerelease */.  B
2d0c0 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20  tree *pBt;      
2d0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2d0e0 2a 20 42 74 72 65 65 20 74 6f 20 63 68 61 6e 67  * Btree to chang
2d0f0 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f  e journal mode o
2d100 66 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70 50  f */.  Pager *pP
2d110 61 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  ager;           
2d120 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 72 20         /* Pager 
2d130 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
2d140 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65  pBt */.  int eNe
2d150 77 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  w;              
2d160 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 77 20           /* New 
2d170 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a  journal mode */.
2d180 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20    int eOld;     
2d190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1a0 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75    /* The old jou
2d1b0 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69 66  rnal mode */.#if
2d1c0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2d1d0 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68 61  _WAL.  const cha
2d1e0 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20  r *zFilename;   
2d1f0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
2d200 66 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  f database file 
2d210 66 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 23 65  for pPager */.#e
2d220 6e 64 69 66 0a 0a 20 20 65 4e 65 77 20 3d 20 70  ndif..  eNew = p
2d230 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
2d240 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  ( eNew==PAGER_JO
2d250 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45  URNALMODE_DELETE
2d260 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77   .       || eNew
2d270 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2d280 4f 44 45 5f 54 52 55 4e 43 41 54 45 20 0a 20 20  ODE_TRUNCATE .  
2d290 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2d2a0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2d2b0 50 45 52 53 49 53 54 20 0a 20 20 20 20 20 20 20  PERSIST .       
2d2c0 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
2d2d0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20  OURNALMODE_OFF. 
2d2e0 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
2d2f0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2d300 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c  _MEMORY.       |
2d310 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2d320 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20  URNALMODE_WAL.  
2d330 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2d340 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2d350 51 55 45 52 59 0a 20 20 29 3b 0a 20 20 61 73 73  QUERY.  );.  ass
2d360 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2d370 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
2d380 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
2d390 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
2d3a0 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  ;..  pBt = db->a
2d3b0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
2d3c0 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69  .  pPager = sqli
2d3d0 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 42  te3BtreePager(pB
2d3e0 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c  t);.  eOld = sql
2d3f0 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f 75 72  ite3PagerGetJour
2d400 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 3b  nalMode(pPager);
2d410 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47  .  if( eNew==PAG
2d420 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
2d430 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20 65 4f  UERY ) eNew = eO
2d440 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74  ld;.  if( !sqlit
2d450 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67  e3PagerOkToChang
2d460 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  eJournalMode(pPa
2d470 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20 65 4f  ger) ) eNew = eO
2d480 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ld;..#ifndef SQL
2d490 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a  ITE_OMIT_WAL.  z
2d4a0 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74  Filename = sqlit
2d4b0 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d 65 28  e3PagerFilename(
2d4c0 70 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f  pPager, 1);..  /
2d4d0 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61  * Do not allow a
2d4e0 20 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a   transition to j
2d4f0 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20  ournal_mode=WAL 
2d500 66 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a 20  for a database. 
2d510 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72 79   ** in temporary
2d520 20 73 74 6f 72 61 67 65 20 6f 72 20 69 66 20 74   storage or if t
2d530 68 65 20 56 46 53 20 64 6f 65 73 20 6e 6f 74 20  he VFS does not 
2d540 73 75 70 70 6f 72 74 20 73 68 61 72 65 64 20 6d  support shared m
2d550 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66  emory .  */.  if
2d560 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  ( eNew==PAGER_JO
2d570 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20  URNALMODE_WAL.  
2d580 20 26 26 20 28 73 71 6c 69 74 65 33 53 74 72 6c   && (sqlite3Strl
2d590 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d  en30(zFilename)=
2d5a0 3d 30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  =0           /* 
2d5b0 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20  Temp file */.   
2d5c0 20 20 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50      || !sqlite3P
2d5d0 61 67 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64  agerWalSupported
2d5e0 28 70 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e  (pPager))   /* N
2d5f0 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20  o shared-memory 
2d600 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a  support */.  ){.
2d610 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b      eNew = eOld;
2d620 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65  .  }..  if( (eNe
2d630 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20 28  w!=eOld).   && (
2d640 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eOld==PAGER_JOUR
2d650 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65  NALMODE_WAL || e
2d660 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2d670 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b  ALMODE_WAL).  ){
2d680 0a 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75  .    if( !db->au
2d690 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e  toCommit || db->
2d6a0 6e 56 64 62 65 52 65 61 64 3e 31 20 29 7b 0a 20  nVdbeRead>1 ){. 
2d6b0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
2d6c0 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 73 71  _ERROR;.      sq
2d6d0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
2d6e0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
2d6f0 0a 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e  .          "cann
2d700 6f 74 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c  ot change %s wal
2d710 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69   mode from withi
2d720 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22  n a transaction"
2d730 2c 0a 20 20 20 20 20 20 20 20 20 20 28 65 4e 65  ,.          (eNe
2d740 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2d750 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f  MODE_WAL ? "into
2d760 22 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20  " : "out of").  
2d770 20 20 20 20 29 3b 0a 20 20 20 20 20 20 62 72 65      );.      bre
2d780 61 6b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ak;.    }else{. 
2d790 0a 20 20 20 20 20 20 69 66 28 20 65 4f 6c 64 3d  .      if( eOld=
2d7a0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2d7b0 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20 20  DE_WAL ){.      
2d7c0 20 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e 67 20    /* If leaving 
2d7d0 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20  WAL mode, close 
2d7e0 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66  the log file. If
2d7f0 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65   successful, the
2d800 20 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a   call.        **
2d810 20 74 6f 20 50 61 67 65 72 43 6c 6f 73 65 57 61   to PagerCloseWa
2d820 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e 74 73 20  l() checkpoints 
2d830 61 6e 64 20 64 65 6c 65 74 65 73 20 74 68 65 20  and deletes the 
2d840 77 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20  write-ahead-log 
2d850 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c 65  .        ** file
2d860 2e 20 41 6e 20 45 58 43 4c 55 53 49 56 45 20 6c  . An EXCLUSIVE l
2d870 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62 65  ock may still be
2d880 20 68 65 6c 64 20 6f 6e 20 74 68 65 20 64 61 74   held on the dat
2d890 61 62 61 73 65 20 66 69 6c 65 20 0a 20 20 20 20  abase file .    
2d8a0 20 20 20 20 2a 2a 20 61 66 74 65 72 20 61 20 73      ** after a s
2d8b0 75 63 63 65 73 73 66 75 6c 20 72 65 74 75 72 6e  uccessful return
2d8c0 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  . .        */.  
2d8d0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
2d8e0 65 33 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28  e3PagerCloseWal(
2d8f0 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20 20  pPager);.       
2d900 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2d910 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
2d920 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a  sqlite3PagerSetJ
2d930 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
2d940 72 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20 20 20  r, eNew);.      
2d950 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20    }.      }else 
2d960 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f  if( eOld==PAGER_
2d970 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f  JOURNALMODE_MEMO
2d980 52 59 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  RY ){.        /*
2d990 20 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69   Cannot transiti
2d9a0 6f 6e 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d  on directly from
2d9b0 20 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20   MEMORY to WAL. 
2d9c0 20 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20   Use mode OFF.  
2d9d0 20 20 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 69        ** as an i
2d9e0 6e 74 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20  ntermediate */. 
2d9f0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
2da00 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerSetJournalMod
2da10 65 28 70 50 61 67 65 72 2c 20 50 41 47 45 52 5f  e(pPager, PAGER_
2da20 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29  JOURNALMODE_OFF)
2da30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  ;.      }.  .   
2da40 20 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61     /* Open a tra
2da50 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20  nsaction on the 
2da60 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 52  database file. R
2da70 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65  egardless of the
2da80 20 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a   journal.      *
2da90 2a 20 6d 6f 64 65 2c 20 74 68 69 73 20 74 72 61  * mode, this tra
2daa0 6e 73 61 63 74 69 6f 6e 20 61 6c 77 61 79 73 20  nsaction always 
2dab0 75 73 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20  uses a rollback 
2dac0 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a  journal..      *
2dad0 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
2dae0 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e  sqlite3BtreeIsIn
2daf0 54 72 61 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b  Trans(pBt)==0 );
2db00 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
2db10 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2db20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2db30 42 74 72 65 65 53 65 74 56 65 72 73 69 6f 6e 28  BtreeSetVersion(
2db40 70 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45  pBt, (eNew==PAGE
2db50 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2db60 4c 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20 20  L ? 2 : 1));.   
2db70 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23     }.    }.  }.#
2db80 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65 66 20  endif /* ifndef 
2db90 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20  SQLITE_OMIT_WAL 
2dba0 2a 2f 0a 0a 20 20 69 66 28 20 72 63 20 29 7b 0a  */..  if( rc ){.
2dbb0 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b      eNew = eOld;
2dbc0 0a 20 20 7d 0a 20 20 65 4e 65 77 20 3d 20 73 71  .  }.  eNew = sq
2dbd0 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75  lite3PagerSetJou
2dbe0 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c  rnalMode(pPager,
2dbf0 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 20   eNew);..  pOut 
2dc00 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
2dc10 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
2dc20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74  = MEM_Str|MEM_St
2dc30 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20  atic|MEM_Term;. 
2dc40 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72   pOut->z = (char
2dc50 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61   *)sqlite3Journa
2dc60 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b  lModename(eNew);
2dc70 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c  .  pOut->n = sql
2dc80 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 75  ite3Strlen30(pOu
2dc90 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65  t->z);.  pOut->e
2dca0 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38  nc = SQLITE_UTF8
2dcb0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  ;.  sqlite3VdbeC
2dcc0 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f  hangeEncoding(pO
2dcd0 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ut, encoding);. 
2dce0 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69   break;.};.#endi
2dcf0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2dd00 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20  _PRAGMA */..#if 
2dd10 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2dd20 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26 20  OMIT_VACUUM) && 
2dd30 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2dd40 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20  OMIT_ATTACH)./* 
2dd50 4f 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a  Opcode: Vacuum *
2dd60 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56   * * * *.**.** V
2dd70 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65  acuum the entire
2dd80 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 69 73   database.  This
2dd90 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63 61 75   opcode will cau
2dda0 73 65 20 6f 74 68 65 72 20 76 69 72 74 75 61 6c  se other virtual
2ddb0 0a 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74 6f 20  .** machines to 
2ddc0 62 65 20 63 72 65 61 74 65 64 20 61 6e 64 20 72  be created and r
2ddd0 75 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f 74 20  un.  It may not 
2dde0 62 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77  be called from w
2ddf0 69 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73  ithin.** a trans
2de00 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  action..*/.case 
2de10 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 61  OP_Vacuum: {.  a
2de20 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2de30 6c 79 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  ly==0 );.  rc = 
2de40 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d  sqlite3RunVacuum
2de50 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2de60 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
2de70 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e  ndif..#if !defin
2de80 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
2de90 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70  UTOVACUUM)./* Op
2dea0 63 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75 6d  code: IncrVacuum
2deb0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
2dec0 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69 6e  ** Perform a sin
2ded0 67 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65 20  gle step of the 
2dee0 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75  incremental vacu
2def0 75 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a  um procedure on.
2df00 2a 2a 20 74 68 65 20 50 31 20 64 61 74 61 62 61  ** the P1 databa
2df10 73 65 2e 20 49 66 20 74 68 65 20 76 61 63 75 75  se. If the vacuu
2df20 6d 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20  m has finished, 
2df30 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
2df40 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72  ion.** P2. Other
2df50 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75  wise, fall throu
2df60 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
2df70 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
2df80 61 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75 75  ase OP_IncrVacuu
2df90 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  m: {        /* j
2dfa0 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a  ump */.  Btree *
2dfb0 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pBt;..  assert( 
2dfc0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2dfd0 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
2dfe0 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
2dff0 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44  treeMask & (((yD
2e000 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70  bMask)1)<<pOp->p
2e010 31 29 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  1))!=0 );.  asse
2e020 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
2e030 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62  =0 );.  pBt = db
2e040 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
2e050 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  Bt;.  rc = sqlit
2e060 65 33 42 74 72 65 65 49 6e 63 72 56 61 63 75 75  e3BtreeIncrVacuu
2e070 6d 28 70 42 74 29 3b 0a 20 20 56 64 62 65 42 72  m(pBt);.  VdbeBr
2e080 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51  anchTaken(rc==SQ
2e090 4c 49 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20  LITE_DONE,2);.  
2e0a0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44  if( rc==SQLITE_D
2e0b0 4f 4e 45 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  ONE ){.    pc = 
2e0c0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
2e0d0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
2e0e0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2e0f0 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
2e100 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a  e: Expire P1 * *
2e110 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65   * *.**.** Cause
2e120 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61   precompiled sta
2e130 74 65 6d 65 6e 74 73 20 74 6f 20 62 65 63 6f 6d  tements to becom
2e140 65 20 65 78 70 69 72 65 64 2e 20 41 6e 20 65 78  e expired. An ex
2e150 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a  pired statement.
2e160 2a 2a 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e  ** fails with an
2e170 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 53   error code of S
2e180 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 69 66 20  QLITE_SCHEMA if 
2e190 69 74 20 69 73 20 65 76 65 72 20 65 78 65 63 75  it is ever execu
2e1a0 74 65 64 20 0a 2a 2a 20 28 76 69 61 20 73 71 6c  ted .** (via sql
2e1b0 69 74 65 33 5f 73 74 65 70 28 29 29 2e 0a 2a 2a  ite3_step())..**
2e1c0 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c   .** If P1 is 0,
2e1d0 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74   then all SQL st
2e1e0 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20  atements become 
2e1f0 65 78 70 69 72 65 64 2e 20 49 66 20 50 31 20 69  expired. If P1 i
2e200 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74  s non-zero,.** t
2e210 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72  hen only the cur
2e220 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67  rently executing
2e230 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 66   statement is af
2e240 66 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61 73 65  fected. .*/.case
2e250 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20   OP_Expire: {.  
2e260 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a  if( !pOp->p1 ){.
2e270 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
2e280 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
2e290 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65  nts(db);.  }else
2e2a0 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  {.    p->expired
2e2b0 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 1;.  }.  brea
2e2c0 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
2e2d0 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
2e2e0 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65  _CACHE./* Opcode
2e2f0 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50  : TableLock P1 P
2e300 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
2e310 6f 70 73 69 73 3a 20 69 44 62 3d 50 31 20 72 6f  opsis: iDb=P1 ro
2e320 6f 74 3d 50 32 20 77 72 69 74 65 3d 50 33 0a 2a  ot=P2 write=P3.*
2e330 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f  *.** Obtain a lo
2e340 63 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c  ck on a particul
2e350 61 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69  ar table. This i
2e360 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e  nstruction is on
2e370 6c 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20  ly used when.** 
2e380 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65  the shared-cache
2e390 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62   feature is enab
2e3a0 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69  led. .**.** P1 i
2e3b0 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  s the index of t
2e3c0 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 73  he database in s
2e3d0 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20  qlite3.aDb[] of 
2e3e0 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
2e3f0 6f 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63  on which the loc
2e400 6b 20 69 73 20 61 63 71 75 69 72 65 64 2e 20 20  k is acquired.  
2e410 41 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62  A readlock is ob
2e420 74 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20  tained if P3==0 
2e430 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f  or.** a write lo
2e440 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a  ck if P3==1..**.
2e450 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74  ** P2 contains t
2e460 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20  he root-page of 
2e470 74 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63  the table to loc
2e480 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74  k..**.** P4 cont
2e490 61 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74  ains a pointer t
2e4a0 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  o the name of th
2e4b0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f  e table being lo
2e4c0 63 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e  cked. This is on
2e4d0 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65  ly.** used to ge
2e4e0 6e 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20  nerate an error 
2e4f0 6d 65 73 73 61 67 65 20 69 66 20 74 68 65 20 6c  message if the l
2e500 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62  ock cannot be ob
2e510 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  tained..*/.case 
2e520 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a  OP_TableLock: {.
2e530 20 20 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b    u8 isWriteLock
2e540 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a   = (u8)pOp->p3;.
2e550 20 20 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63    if( isWriteLoc
2e560 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61  k || 0==(db->fla
2e570 67 73 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e  gs&SQLITE_ReadUn
2e580 63 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20 20  committed) ){.  
2e590 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e    int p1 = pOp->
2e5a0 70 31 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28  p1; .    assert(
2e5b0 20 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d   p1>=0 && p1<db-
2e5c0 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65  >nDb );.    asse
2e5d0 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
2e5e0 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31  k & (((yDbMask)1
2e5f0 29 3c 3c 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  )<<p1))!=0 );.  
2e600 20 20 61 73 73 65 72 74 28 20 69 73 57 72 69 74    assert( isWrit
2e610 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72  eLock==0 || isWr
2e620 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20  iteLock==1 );.  
2e630 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2e640 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d  reeLockTable(db-
2e650 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f  >aDb[p1].pBt, pO
2e660 70 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f  p->p2, isWriteLo
2e670 63 6b 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63  ck);.    if( (rc
2e680 26 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c  &0xFF)==SQLITE_L
2e690 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 63  OCKED ){.      c
2e6a0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70  onst char *z = p
2e6b0 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20  Op->p4.z;.      
2e6c0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2e6d0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2e6e0 2c 20 22 64 61 74 61 62 61 73 65 20 74 61 62 6c  , "database tabl
2e6f0 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22  e is locked: %s"
2e700 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  , z);.    }.  }.
2e710 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2e720 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2e730 5f 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a 2f  _SHARED_CACHE */
2e740 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2e750 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2e760 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42  LE./* Opcode: VB
2e770 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  egin * * * P4 *.
2e780 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20  **.** P4 may be 
2e790 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20  a pointer to an 
2e7a0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
2e7b0 75 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20 63  ucture. If so, c
2e7c0 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65 67  all the .** xBeg
2e7d0 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68  in method for th
2e7e0 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  at table..**.** 
2e7f0 41 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f 72  Also, whether or
2e800 20 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c 20   not P4 is set, 
2e810 63 68 65 63 6b 20 74 68 61 74 20 74 68 69 73 20  check that this 
2e820 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c  is not being cal
2e830 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68  led from.** with
2e840 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f  in a callback to
2e850 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
2e860 20 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e   xSync() method.
2e870 20 49 66 20 69 74 20 69 73 2c 20 74 68 65 20 65   If it is, the e
2e880 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c  rror.** code wil
2e890 6c 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49  l be set to SQLI
2e8a0 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61  TE_LOCKED..*/.ca
2e8b0 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a  se OP_VBegin: {.
2e8c0 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 3b    VTable *pVTab;
2e8d0 0a 20 20 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e  .  pVTab = pOp->
2e8e0 70 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d  p4.pVtab;.  rc =
2e8f0 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
2e900 6e 28 64 62 2c 20 70 56 54 61 62 29 3b 0a 20 20  n(db, pVTab);.  
2e910 69 66 28 20 70 56 54 61 62 20 29 20 73 71 6c 69  if( pVTab ) sqli
2e920 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
2e930 6d 73 67 28 70 2c 20 70 56 54 61 62 2d 3e 70 56  msg(p, pVTab->pV
2e940 74 61 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  tab);.  break;.}
2e950 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2e960 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2e970 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
2e980 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2e990 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
2e9a0 64 65 3a 20 56 43 72 65 61 74 65 20 50 31 20 2a  de: VCreate P1 *
2e9b0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2e9c0 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
2e9d0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2e9e0 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
2e9f0 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65  Call the xCreate
2ea00 20 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20 74   method.** for t
2ea10 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  hat table..*/.ca
2ea20 73 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b  se OP_VCreate: {
2ea30 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2ea40 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62  tabCallCreate(db
2ea50 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
2ea60 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d 73  p4.z, &p->zErrMs
2ea70 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  g);.  break;.}.#
2ea80 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2ea90 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2eaa0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
2eab0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2eac0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
2ead0 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20  : VDestroy P1 * 
2eae0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
2eaf0 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
2eb00 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
2eb10 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
2eb20 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f  Call the xDestro
2eb30 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74  y method.** of t
2eb40 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  hat table..*/.ca
2eb50 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20  se OP_VDestroy: 
2eb60 7b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74  {.  p->inVtabMet
2eb70 68 6f 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d 20  hod = 2;.  rc = 
2eb80 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44  sqlite3VtabCallD
2eb90 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e  estroy(db, pOp->
2eba0 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
2ebb0 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
2ebc0 64 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  d = 0;.  break;.
2ebd0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2ebe0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2ebf0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2ec00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2ec10 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2ec20 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20  ode: VOpen P1 * 
2ec30 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
2ec40 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
2ec50 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2ec60 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74  object, an sqlit
2ec70 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
2ec80 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75  e..** P1 is a cu
2ec90 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68  rsor number.  Th
2eca0 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20  is opcode opens 
2ecb0 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20  a cursor to the 
2ecc0 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
2ecd0 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74   and stores that
2ece0 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a   cursor in P1..*
2ecf0 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a  /.case OP_VOpen:
2ed00 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
2ed10 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33  *pCur;.  sqlite3
2ed20 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56  _vtab_cursor *pV
2ed30 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c  tabCursor;.  sql
2ed40 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
2ed50 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  ;.  sqlite3_modu
2ed60 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20  le *pModule;..  
2ed70 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
2ed80 61 64 65 72 20 29 3b 0a 20 20 70 43 75 72 20 3d  ader );.  pCur =
2ed90 20 30 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f   0;.  pVtabCurso
2eda0 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d  r = 0;.  pVtab =
2edb0 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
2edc0 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
2edd0 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75   = (sqlite3_modu
2ede0 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64  le *)pVtab->pMod
2edf0 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 70 56  ule;.  assert(pV
2ee00 74 61 62 20 26 26 20 70 4d 6f 64 75 6c 65 29 3b  tab && pModule);
2ee10 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
2ee20 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70  >xOpen(pVtab, &p
2ee30 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 73  VtabCursor);.  s
2ee40 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
2ee50 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
2ee60 3b 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f  ;.  if( SQLITE_O
2ee70 4b 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20  K==rc ){.    /* 
2ee80 49 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74  Initialize sqlit
2ee90 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62  e3_vtab_cursor b
2eea0 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20  ase class */.   
2eeb0 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56   pVtabCursor->pV
2eec0 74 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20  tab = pVtab;..  
2eed0 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
2eee0 76 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65  vdbe cursor obje
2eef0 63 74 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d  ct */.    pCur =
2ef00 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
2ef10 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d  p, pOp->p1, 0, -
2ef20 31 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70  1, 0);.    if( p
2ef30 43 75 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75  Cur ){.      pCu
2ef40 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 3d  r->pVtabCursor =
2ef50 20 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20   pVtabCursor;.  
2ef60 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64    }else{.      d
2ef70 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
2ef80 3d 20 31 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75  = 1;.      pModu
2ef90 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56 74 61 62  le->xClose(pVtab
2efa0 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  Cursor);.    }. 
2efb0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2efc0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2efd0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2efe0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
2eff0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2f000 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
2f010 20 56 46 69 6c 74 65 72 20 50 31 20 50 32 20 50   VFilter P1 P2 P
2f020 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
2f030 69 73 3a 20 69 50 6c 61 6e 3d 72 5b 50 33 5d 20  is: iPlan=r[P3] 
2f040 7a 50 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a  zPlan='P4'.**.**
2f050 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20   P1 is a cursor 
2f060 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70  opened using VOp
2f070 65 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64  en.  P2 is an ad
2f080 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f  dress to jump to
2f090 20 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65   if.** the filte
2f0a0 72 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 69  red result set i
2f0b0 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50  s empty..**.** P
2f0c0 34 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c  4 is either NULL
2f0d0 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61   or a string tha
2f0e0 74 20 77 61 73 20 67 65 6e 65 72 61 74 65 64 20  t was generated 
2f0f0 62 79 20 74 68 65 20 78 42 65 73 74 49 6e 64 65  by the xBestInde
2f100 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74  x.** method of t
2f110 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20  he module.  The 
2f120 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f  interpretation o
2f130 66 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 20  f the P4 string 
2f140 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68  is left.** to th
2f150 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  e module impleme
2f160 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ntation..**.** T
2f170 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
2f180 65 73 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d  es the xFilter m
2f190 65 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72  ethod on the vir
2f1a0 74 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69  tual table speci
2f1b0 66 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20  fied.** by P1.  
2f1c0 54 68 65 20 69 6e 74 65 67 65 72 20 71 75 65 72  The integer quer
2f1d0 79 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72  y plan parameter
2f1e0 20 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73   to xFilter is s
2f1f0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
2f200 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65  r.** P3. Registe
2f210 72 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68  r P3+1 stores th
2f220 65 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72  e argc parameter
2f230 20 74 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f   to be passed to
2f240 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20   the.** xFilter 
2f250 6d 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72  method. Register
2f260 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67  s P3+2..P3+1+arg
2f270 63 20 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a  c are the argc.*
2f280 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72  * additional par
2f290 61 6d 65 74 65 72 73 20 77 68 69 63 68 20 61 72  ameters which ar
2f2a0 65 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78  e passed to.** x
2f2b0 46 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20  Filter as argv. 
2f2c0 52 65 67 69 73 74 65 72 20 50 33 2b 32 20 62 65  Register P3+2 be
2f2d0 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68  comes argv[0] wh
2f2e0 65 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46 69  en passed to xFi
2f2f0 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75  lter..**.** A ju
2f300 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
2f310 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 73   if the result s
2f320 65 74 20 61 66 74 65 72 20 66 69 6c 74 65 72 69  et after filteri
2f330 6e 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74  ng would be empt
2f340 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46  y..*/.case OP_VF
2f350 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75  ilter: {   /* ju
2f360 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67  mp */.  int nArg
2f370 3b 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a  ;.  int iQuery;.
2f380 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
2f390 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
2f3a0 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a  .  Mem *pQuery;.
2f3b0 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20    Mem *pArgc;.  
2f3c0 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
2f3d0 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72  sor *pVtabCursor
2f3e0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
2f3f0 20 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65 43   *pVtab;.  VdbeC
2f400 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69  ursor *pCur;.  i
2f410 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b  nt res;.  int i;
2f420 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a  .  Mem **apArg;.
2f430 0a 20 20 70 51 75 65 72 79 20 3d 20 26 61 4d 65  .  pQuery = &aMe
2f440 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41  m[pOp->p3];.  pA
2f450 72 67 63 20 3d 20 26 70 51 75 65 72 79 5b 31 5d  rgc = &pQuery[1]
2f460 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70  ;.  pCur = p->ap
2f470 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2f480 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
2f490 69 64 28 70 51 75 65 72 79 29 20 29 3b 0a 20 20  id(pQuery) );.  
2f4a0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
2f4b0 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b  Op->p3, pQuery);
2f4c0 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d  .  assert( pCur-
2f4d0 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a  >pVtabCursor );.
2f4e0 20 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20    pVtabCursor = 
2f4f0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2f500 72 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56 74  r;.  pVtab = pVt
2f510 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b  abCursor->pVtab;
2f520 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  .  pModule = pVt
2f530 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20  ab->pModule;..  
2f540 2f 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64 65  /* Grab the inde
2f550 78 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67  x number and arg
2f560 63 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a  c parameters */.
2f570 20 20 61 73 73 65 72 74 28 20 28 70 51 75 65 72    assert( (pQuer
2f580 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  y->flags&MEM_Int
2f590 29 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66  )!=0 && pArgc->f
2f5a0 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b  lags==MEM_Int );
2f5b0 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70  .  nArg = (int)p
2f5c0 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75  Argc->u.i;.  iQu
2f5d0 65 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72  ery = (int)pQuer
2f5e0 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e  y->u.i;..  /* In
2f5f0 76 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72  voke the xFilter
2f600 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20   method */.  {. 
2f610 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
2f620 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67  apArg = p->apArg
2f630 3b 0a 20 20 20 20 66 6f 72 28 69 20 3d 20 30 3b  ;.    for(i = 0;
2f640 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
2f650 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20       apArg[i] = 
2f660 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20  &pArgc[i+1];.   
2f670 20 7d 0a 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61   }..    p->inVta
2f680 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20  bMethod = 1;.   
2f690 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
2f6a0 46 69 6c 74 65 72 28 70 56 74 61 62 43 75 72 73  Filter(pVtabCurs
2f6b0 6f 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d  or, iQuery, pOp-
2f6c0 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41  >p4.z, nArg, apA
2f6d0 72 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74  rg);.    p->inVt
2f6e0 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20  abMethod = 0;.  
2f6f0 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
2f700 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
2f710 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  ab);.    if( rc=
2f720 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2f730 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c      res = pModul
2f740 65 2d 3e 78 45 6f 66 28 70 56 74 61 62 43 75 72  e->xEof(pVtabCur
2f750 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  sor);.    }.    
2f760 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2f770 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69  res!=0,2);.    i
2f780 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20  f( res ){.      
2f790 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
2f7a0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43  ;.    }.  }.  pC
2f7b0 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  ur->nullRow = 0;
2f7c0 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ..  break;.}.#en
2f7d0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2f7e0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
2f7f0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2f800 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2f810 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2f820 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33  VColumn P1 P2 P3
2f830 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2f840 3a 20 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e 28  : r[P3]=vcolumn(
2f850 50 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  P2).**.** Store 
2f860 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
2f870 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66   P2-th column of
2f880 0a 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74  .** the row of t
2f890 68 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  he virtual-table
2f8a0 20 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31   that the .** P1
2f8b0 20 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74   cursor is point
2f8c0 69 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69  ing to into regi
2f8d0 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65  ster P3..*/.case
2f8e0 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20   OP_VColumn: {. 
2f8f0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
2f900 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
2f910 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
2f920 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44  odule;.  Mem *pD
2f930 65 73 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  est;.  sqlite3_c
2f940 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b  ontext sContext;
2f950 0a 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ..  VdbeCursor *
2f960 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
2f970 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2f980 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43  rt( pCur->pVtabC
2f990 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
2f9a0 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
2f9b0 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
2f9c0 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
2f9d0 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d  .  pDest = &aMem
2f9e0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d  [pOp->p3];.  mem
2f9f0 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
2fa00 20 70 44 65 73 74 29 3b 0a 20 20 69 66 28 20 70   pDest);.  if( p
2fa10 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a  Cur->nullRow ){.
2fa20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2fa30 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29  emSetNull(pDest)
2fa40 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
2fa50 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d  .  pVtab = pCur-
2fa60 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56  >pVtabCursor->pV
2fa70 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
2fa80 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
2fa90 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75  .  assert( pModu
2faa0 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20  le->xColumn );. 
2fab0 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78   memset(&sContex
2fac0 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f  t, 0, sizeof(sCo
2fad0 6e 74 65 78 74 29 29 3b 0a 0a 20 20 2f 2a 20 54  ntext));..  /* T
2fae0 68 65 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d  he output cell m
2faf0 61 79 20 61 6c 72 65 61 64 79 20 68 61 76 65 20  ay already have 
2fb00 61 20 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74  a buffer allocat
2fb10 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68  ed. Move.  ** th
2fb20 65 20 63 75 72 72 65 6e 74 20 63 6f 6e 74 65 6e  e current conten
2fb30 74 73 20 74 6f 20 73 43 6f 6e 74 65 78 74 2e 73  ts to sContext.s
2fb40 20 73 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20   so in case the 
2fb50 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 0a 20  user-function . 
2fb60 20 2a 2a 20 63 61 6e 20 75 73 65 20 74 68 65 20   ** can use the 
2fb70 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65  already allocate
2fb80 64 20 62 75 66 66 65 72 20 69 6e 73 74 65 61 64  d buffer instead
2fb90 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61   of allocating a
2fba0 20 0a 20 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a   .  ** new one..
2fbb0 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64    */.  sqlite3Vd
2fbc0 62 65 4d 65 6d 4d 6f 76 65 28 26 73 43 6f 6e 74  beMemMove(&sCont
2fbd0 65 78 74 2e 73 2c 20 70 44 65 73 74 29 3b 0a 20  ext.s, pDest);. 
2fbe0 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
2fbf0 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 4d 45 4d  &sContext.s, MEM
2fc00 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 72 63 20 3d 20  _Null);..  rc = 
2fc10 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e  pModule->xColumn
2fc20 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73  (pCur->pVtabCurs
2fc30 6f 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70  or, &sContext, p
2fc40 4f 70 2d 3e 70 32 29 3b 0a 20 20 73 71 6c 69 74  Op->p2);.  sqlit
2fc50 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
2fc60 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
2fc70 69 66 28 20 73 43 6f 6e 74 65 78 74 2e 69 73 45  if( sContext.isE
2fc80 72 72 6f 72 20 29 7b 0a 20 20 20 20 72 63 20 3d  rror ){.    rc =
2fc90 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f   sContext.isErro
2fca0 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70  r;.  }..  /* Cop
2fcb0 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  y the result of 
2fcc0 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  the function to 
2fcd0 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72 2e  the P3 register.
2fce0 20 57 65 0a 20 20 2a 2a 20 64 6f 20 74 68 69 73   We.  ** do this
2fcf0 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   regardless of w
2fd00 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e  hether or not an
2fd10 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20   error occurred 
2fd20 74 6f 20 65 6e 73 75 72 65 20 61 6e 79 0a 20 20  to ensure any.  
2fd30 2a 2a 20 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63  ** dynamic alloc
2fd40 61 74 69 6f 6e 20 69 6e 20 73 43 6f 6e 74 65 78  ation in sContex
2fd50 74 2e 73 20 28 61 20 4d 65 6d 20 73 74 72 75 63  t.s (a Mem struc
2fd60 74 29 20 69 73 20 20 72 65 6c 65 61 73 65 64 2e  t) is  released.
2fd70 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  .  */.  sqlite3V
2fd80 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
2fd90 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65  g(&sContext.s, e
2fda0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69  ncoding);.  sqli
2fdb0 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70  te3VdbeMemMove(p
2fdc0 44 65 73 74 2c 20 26 73 43 6f 6e 74 65 78 74 2e  Dest, &sContext.
2fdd0 73 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  s);.  REGISTER_T
2fde0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44  RACE(pOp->p3, pD
2fdf0 65 73 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  est);.  UPDATE_M
2fe00 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73  AX_BLOBSIZE(pDes
2fe10 74 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74  t);..  if( sqlit
2fe20 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
2fe30 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20 67 6f  pDest) ){.    go
2fe40 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
2fe50 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2fe60 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2fe70 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2fe80 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2fe90 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2fea0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e  LE./* Opcode: VN
2feb0 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ext P1 P2 * * *.
2fec0 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69  **.** Advance vi
2fed0 72 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74  rtual table P1 t
2fee0 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69  o the next row i
2fef0 6e 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74  n its result set
2ff00 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20   and.** jump to 
2ff10 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20  instruction P2. 
2ff20 20 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72 74   Or, if the virt
2ff30 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65  ual table has re
2ff40 61 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64  ached.** the end
2ff50 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20 73   of its result s
2ff60 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  et, then fall th
2ff70 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2ff80 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2ff90 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a  /.case OP_VNext:
2ffa0 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a   {   /* jump */.
2ffb0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
2ffc0 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
2ffd0 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
2ffe0 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65  Module;.  int re
2fff0 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  s;.  VdbeCursor 
30000 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20  *pCur;..  res = 
30010 30 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61  0;.  pCur = p->a
30020 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
30030 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70   assert( pCur->p
30040 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20  VtabCursor );.  
30050 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  if( pCur->nullRo
30060 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  w ){.    break;.
30070 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43    }.  pVtab = pC
30080 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d  ur->pVtabCursor-
30090 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
300a0 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
300b0 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d  le;.  assert( pM
300c0 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a  odule->xNext );.
300d0 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
300e0 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f 64 20   xNext() method 
300f0 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54  of the module. T
30100 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79 20 66  here is no way f
30110 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65  or the.  ** unde
30120 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74  rlying implement
30130 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20  ation to return 
30140 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e 65 20  an error if one 
30150 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a 20 20  occurs during.  
30160 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e 73 74  ** xNext(). Inst
30170 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72 6f 72  ead, if an error
30180 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20 69 73   occurs, true is
30190 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64 69 63   returned (indic
301a0 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a  ating that .  **
301b0 20 64 61 74 61 20 69 73 20 61 76 61 69 6c 61 62   data is availab
301c0 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72 72 6f  le) and the erro
301d0 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20  r code returned 
301e0 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a  when xColumn or.
301f0 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20    ** some other 
30200 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74 20 69  method is next i
30210 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73 61  nvoked on the sa
30220 76 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ve virtual table
30230 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20   cursor..  */.  
30240 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
30250 3d 20 31 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64  = 1;.  rc = pMod
30260 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d  ule->xNext(pCur-
30270 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  >pVtabCursor);. 
30280 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
30290 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 56   = 0;.  sqlite3V
302a0 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
302b0 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
302c0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
302d0 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64  {.    res = pMod
302e0 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e  ule->xEof(pCur->
302f0 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
30300 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  }.  VdbeBranchTa
30310 6b 65 6e 28 21 72 65 73 2c 32 29 3b 0a 20 20 69  ken(!res,2);.  i
30320 66 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f  f( !res ){.    /
30330 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 64 61  * If there is da
30340 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a  ta, jump to P2 *
30350 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  /.    pc = pOp->
30360 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 67 6f  p2 - 1;.  }.  go
30370 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  to check_for_int
30380 65 72 72 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66  errupt;.}.#endif
30390 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
303a0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
303b0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
303c0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
303d0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65  E./* Opcode: VRe
303e0 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a  name P1 * * P4 *
303f0 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
30400 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74  ointer to a virt
30410 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  ual table object
30420 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  , an sqlite3_vta
30430 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20  b structure..** 
30440 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
30450 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f  kes the correspo
30460 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65  nding xRename me
30470 74 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a  thod. The value.
30480 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ** in register P
30490 31 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74  1 is passed as t
304a0 68 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e  he zName argumen
304b0 74 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65  t to the xRename
304c0 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65   method..*/.case
304d0 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20   OP_VRename: {. 
304e0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
304f0 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61  Vtab;.  Mem *pNa
30500 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70  me;..  pVtab = p
30510 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
30520 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26  tab;.  pName = &
30530 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
30540 20 61 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e   assert( pVtab->
30550 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65  pModule->xRename
30560 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65   );.  assert( me
30570 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d 65 29 20  mIsValid(pName) 
30580 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
30590 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
305a0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
305b0 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b  pOp->p1, pName);
305c0 0a 20 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65  .  assert( pName
305d0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
305e0 72 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  r );.  testcase(
305f0 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c   pName->enc==SQL
30600 49 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 74 65  ITE_UTF8 );.  te
30610 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65  stcase( pName->e
30620 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
30630 42 45 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  BE );.  testcase
30640 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51  ( pName->enc==SQ
30650 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a  LITE_UTF16LE );.
30660 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
30670 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
30680 28 70 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55  (pName, SQLITE_U
30690 54 46 38 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  TF8);.  if( rc==
306a0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
306b0 20 72 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f   rc = pVtab->pMo
306c0 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56  dule->xRename(pV
306d0 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a  tab, pName->z);.
306e0 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49      sqlite3VtabI
306f0 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
30700 56 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78  Vtab);.    p->ex
30710 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  pired = 0;.  }. 
30720 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
30730 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
30740 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
30750 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55  LE./* Opcode: VU
30760 70 64 61 74 65 20 50 31 20 50 32 20 50 33 20 50  pdate P1 P2 P3 P
30770 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
30780 3a 20 64 61 74 61 3d 72 5b 50 33 40 50 32 5d 0a  : data=r[P3@P2].
30790 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
307a0 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
307b0 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
307c0 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
307d0 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54   structure..** T
307e0 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
307f0 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  es the correspon
30800 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74  ding xUpdate met
30810 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a  hod. P2 values.*
30820 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73  * are contiguous
30830 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74   memory cells st
30840 61 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20  arting at P3 to 
30850 70 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64  pass to the xUpd
30860 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  ate .** invocati
30870 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e  on. The value in
30880 20 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32   register (P3+P2
30890 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  -1) corresponds 
308a0 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20  to the .** p2th 
308b0 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61  element of the a
308c0 72 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64  rgv array passed
308d0 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a   to xUpdate..**.
308e0 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d  ** The xUpdate m
308f0 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20  ethod will do a 
30900 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53  DELETE or an INS
30910 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20  ERT or both..** 
30920 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d  The argv[0] elem
30930 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65  ent (which corre
30940 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79  sponds to memory
30950 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20   cell P3).** is 
30960 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72  the rowid of a r
30970 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49  ow to delete.  I
30980 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c  f argv[0] is NUL
30990 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65  L then no .** de
309a0 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20  letion occurs.  
309b0 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d  The argv[1] elem
309c0 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64  ent is the rowid
309d0 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20   of the new .** 
309e0 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62  row.  This can b
309f0 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74  e NULL to have t
30a00 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
30a10 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20   select the new 
30a20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74  .** rowid for it
30a30 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65  self.  The subse
30a40 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69  quent elements i
30a50 6e 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20  n the array are 
30a60 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f  .** the values o
30a70 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
30a80 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20   new row..**.** 
30a90 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f  If P2==1 then no
30aa0 20 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f   insert is perfo
30ab0 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69  rmed.  argv[0] i
30ac0 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a  s the rowid of.*
30ad0 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74  * a row to delet
30ae0 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  e..**.** P1 is a
30af0 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49   boolean flag. I
30b00 66 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  f it is set to t
30b10 72 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64  rue and the xUpd
30b20 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73  ate call.** is s
30b30 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20  uccessful, then 
30b40 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  the value return
30b50 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61  ed by sqlite3_la
30b60 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
30b70 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20  ) .** is set to 
30b80 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
30b90 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72   rowid for the r
30ba0 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64  ow just inserted
30bb0 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 74 68  ..**.** P5 is th
30bc0 65 20 65 72 72 6f 72 20 61 63 74 69 6f 6e 73 20  e error actions 
30bd0 28 4f 45 5f 52 65 70 6c 61 63 65 2c 20 4f 45 5f  (OE_Replace, OE_
30be0 46 61 69 6c 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c  Fail, OE_Ignore,
30bf0 20 65 74 63 29 20 74 6f 0a 2a 2a 20 61 70 70 6c   etc) to.** appl
30c00 79 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66  y in the case of
30c10 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61   a constraint fa
30c20 69 6c 75 72 65 20 6f 6e 20 61 6e 20 69 6e 73 65  ilure on an inse
30c30 72 74 20 6f 72 20 75 70 64 61 74 65 2e 0a 2a 2f  rt or update..*/
30c40 0a 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74 65  .case OP_VUpdate
30c50 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  : {.  sqlite3_vt
30c60 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c  ab *pVtab;.  sql
30c70 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
30c80 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67  dule;.  int nArg
30c90 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c  ;.  int i;.  sql
30ca0 69 74 65 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b  ite_int64 rowid;
30cb0 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a  .  Mem **apArg;.
30cc0 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20 61 73    Mem *pX;..  as
30cd0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 31  sert( pOp->p2==1
30ce0 20 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e          || pOp->
30cf0 70 35 3d 3d 4f 45 5f 46 61 69 6c 20 20 20 7c 7c  p5==OE_Fail   ||
30d00 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 6f 6c   pOp->p5==OE_Rol
30d10 6c 62 61 63 6b 20 0a 20 20 20 20 20 20 20 7c 7c  lback .       ||
30d20 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 41 62 6f   pOp->p5==OE_Abo
30d30 72 74 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f  rt || pOp->p5==O
30d40 45 5f 49 67 6e 6f 72 65 20 7c 7c 20 70 4f 70 2d  E_Ignore || pOp-
30d50 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 0a  >p5==OE_Replace.
30d60 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70    );.  assert( p
30d70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
30d80 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
30d90 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b  p4.pVtab->pVtab;
30da0 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71  .  pModule = (sq
30db0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70  lite3_module *)p
30dc0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
30dd0 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b   nArg = pOp->p2;
30de0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
30df0 70 34 74 79 70 65 3d 3d 50 34 5f 56 54 41 42 20  p4type==P4_VTAB 
30e00 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  );.  if( ALWAYS(
30e10 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65  pModule->xUpdate
30e20 29 20 29 7b 0a 20 20 20 20 75 38 20 76 74 61 62  ) ){.    u8 vtab
30e30 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 64 62 2d  OnConflict = db-
30e40 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b  >vtabOnConflict;
30e50 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e  .    apArg = p->
30e60 61 70 41 72 67 3b 0a 20 20 20 20 70 58 20 3d 20  apArg;.    pX = 
30e70 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
30e80 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
30e90 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
30ea0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
30eb0 6c 69 64 28 70 58 29 20 29 3b 0a 20 20 20 20 20  lid(pX) );.     
30ec0 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
30ed0 65 28 70 2c 20 70 58 29 3b 0a 20 20 20 20 20 20  e(p, pX);.      
30ee0 61 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20  apArg[i] = pX;. 
30ef0 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d       pX++;.    }
30f00 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43  .    db->vtabOnC
30f10 6f 6e 66 6c 69 63 74 20 3d 20 70 4f 70 2d 3e 70  onflict = pOp->p
30f20 35 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64  5;.    rc = pMod
30f30 75 6c 65 2d 3e 78 55 70 64 61 74 65 28 70 56 74  ule->xUpdate(pVt
30f40 61 62 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 2c  ab, nArg, apArg,
30f50 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 64 62   &rowid);.    db
30f60 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  ->vtabOnConflict
30f70 20 3d 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63   = vtabOnConflic
30f80 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  t;.    sqlite3Vt
30f90 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
30fa0 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66  , pVtab);.    if
30fb0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
30fc0 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  && pOp->p1 ){.  
30fd0 20 20 20 20 61 73 73 65 72 74 28 20 6e 41 72 67      assert( nArg
30fe0 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d 20 26  >1 && apArg[0] &
30ff0 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61  & (apArg[0]->fla
31000 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a  gs&MEM_Null) );.
31010 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f        db->lastRo
31020 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 20  wid = lastRowid 
31030 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20  = rowid;.    }. 
31040 20 20 20 69 66 28 20 28 72 63 26 30 78 66 66 29     if( (rc&0xff)
31050 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  ==SQLITE_CONSTRA
31060 49 4e 54 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70  INT && pOp->p4.p
31070 56 74 61 62 2d 3e 62 43 6f 6e 73 74 72 61 69 6e  Vtab->bConstrain
31080 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  t ){.      if( p
31090 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72  Op->p5==OE_Ignor
310a0 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  e ){.        rc 
310b0 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
310c0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
310d0 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e    p->errorAction
310e0 20 3d 20 28 28 70 4f 70 2d 3e 70 35 3d 3d 4f 45   = ((pOp->p5==OE
310f0 5f 52 65 70 6c 61 63 65 29 20 3f 20 4f 45 5f 41  _Replace) ? OE_A
31100 62 6f 72 74 20 3a 20 70 4f 70 2d 3e 70 35 29 3b  bort : pOp->p5);
31110 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
31120 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 43 68  se{.      p->nCh
31130 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  ange++;.    }.  
31140 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
31150 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
31160 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
31170 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c  */..#ifndef  SQL
31180 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
31190 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65  RAGMAS./* Opcode
311a0 3a 20 50 61 67 65 63 6f 75 6e 74 20 50 31 20 50  : Pagecount P1 P
311b0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72  2 * * *.**.** Wr
311c0 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ite the current 
311d0 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
311e0 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 74  in database P1 t
311f0 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32  o memory cell P2
31200 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67  ..*/.case OP_Pag
31210 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20  ecount: {       
31220 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
31230 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75  release */.  pOu
31240 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33  t->u.i = sqlite3
31250 42 74 72 65 65 4c 61 73 74 50 61 67 65 28 64 62  BtreeLastPage(db
31260 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
31270 42 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  Bt);.  break;.}.
31280 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66  #endif...#ifndef
31290 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41    SQLITE_OMIT_PA
312a0 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f  GER_PRAGMAS./* O
312b0 70 63 6f 64 65 3a 20 4d 61 78 50 67 63 6e 74 20  pcode: MaxPgcnt 
312c0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
312d0 2a 2a 20 54 72 79 20 74 6f 20 73 65 74 20 74 68  ** Try to set th
312e0 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63  e maximum page c
312f0 6f 75 6e 74 20 66 6f 72 20 64 61 74 61 62 61 73  ount for databas
31300 65 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75  e P1 to the valu
31310 65 20 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e  e in P3..** Do n
31320 6f 74 20 6c 65 74 20 74 68 65 20 6d 61 78 69 6d  ot let the maxim
31330 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66 61  um page count fa
31340 6c 6c 20 62 65 6c 6f 77 20 74 68 65 20 63 75 72  ll below the cur
31350 72 65 6e 74 20 70 61 67 65 20 63 6f 75 6e 74 20  rent page count 
31360 61 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63 68  and.** do not ch
31370 61 6e 67 65 20 74 68 65 20 6d 61 78 69 6d 75 6d  ange the maximum
31380 20 70 61 67 65 20 63 6f 75 6e 74 20 76 61 6c 75   page count valu
31390 65 20 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a  e if P3==0..**.*
313a0 2a 20 53 74 6f 72 65 20 74 68 65 20 6d 61 78 69  * Store the maxi
313b0 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 61  mum page count a
313c0 66 74 65 72 20 74 68 65 20 63 68 61 6e 67 65 20  fter the change 
313d0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
313e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 78 50 67  */.case OP_MaxPg
313f0 63 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  cnt: {          
31400 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
31410 65 61 73 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ease */.  unsign
31420 65 64 20 69 6e 74 20 6e 65 77 4d 61 78 3b 0a 20  ed int newMax;. 
31430 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20   Btree *pBt;..  
31440 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
31450 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 6e 65  p->p1].pBt;.  ne
31460 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69 66 28 20  wMax = 0;.  if( 
31470 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 6e  pOp->p3 ){.    n
31480 65 77 4d 61 78 20 3d 20 73 71 6c 69 74 65 33 42  ewMax = sqlite3B
31490 74 72 65 65 4c 61 73 74 50 61 67 65 28 70 42 74  treeLastPage(pBt
314a0 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 77 4d 61  );.    if( newMa
314b0 78 20 3c 20 28 75 6e 73 69 67 6e 65 64 29 70 4f  x < (unsigned)pO
314c0 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61 78 20 3d  p->p3 ) newMax =
314d0 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e   (unsigned)pOp->
314e0 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  p3;.  }.  pOut->
314f0 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72  u.i = sqlite3Btr
31500 65 65 4d 61 78 50 61 67 65 43 6f 75 6e 74 28 70  eeMaxPageCount(p
31510 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a 20 20 62  Bt, newMax);.  b
31520 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
31530 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74  ./* Opcode: Init
31540 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20   * P2 * P4 *.** 
31550 53 79 6e 6f 70 73 69 73 3a 20 20 53 74 61 72 74  Synopsis:  Start
31560 20 61 74 20 50 32 0a 2a 2a 0a 2a 2a 20 50 72 6f   at P2.**.** Pro
31570 67 72 61 6d 73 20 63 6f 6e 74 61 69 6e 20 61 20  grams contain a 
31580 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e 63 65 20  single instance 
31590 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61  of this opcode a
315a0 73 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74  s the very first
315b0 0a 2a 2a 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  .** opcode..**.*
315c0 2a 20 49 66 20 74 72 61 63 69 6e 67 20 69 73 20  * If tracing is 
315d0 65 6e 61 62 6c 65 64 20 28 62 79 20 74 68 65 20  enabled (by the 
315e0 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 29  sqlite3_trace())
315f0 20 69 6e 74 65 72 66 61 63 65 2c 20 74 68 65 6e   interface, then
31600 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38 20 73 74  .** the UTF-8 st
31610 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20 69  ring contained i
31620 6e 20 50 34 20 69 73 20 65 6d 69 74 74 65 64 20  n P4 is emitted 
31630 6f 6e 20 74 68 65 20 74 72 61 63 65 20 63 61 6c  on the trace cal
31640 6c 62 61 63 6b 2e 0a 2a 2a 20 4f 72 20 69 66 20  lback..** Or if 
31650 50 34 20 69 73 20 62 6c 61 6e 6b 2c 20 75 73 65  P4 is blank, use
31660 20 74 68 65 20 73 74 72 69 6e 67 20 72 65 74 75   the string retu
31670 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
31680 73 71 6c 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  sql()..**.** If 
31690 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
316a0 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
316b0 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ion P2..*/.case 
316c0 4f 50 5f 49 6e 69 74 3a 20 7b 20 20 20 20 20 20  OP_Init: {      
316d0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
316e0 20 63 68 61 72 20 2a 7a 54 72 61 63 65 3b 0a 20   char *zTrace;. 
316f0 20 63 68 61 72 20 2a 7a 3b 0a 0a 20 20 69 66 28   char *z;..  if(
31700 20 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20   pOp->p2 ){.    
31710 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
31720 3b 0a 20 20 7d 0a 23 69 66 6e 64 65 66 20 53 51  ;.  }.#ifndef SQ
31730 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a  LITE_OMIT_TRACE.
31740 20 20 69 66 28 20 64 62 2d 3e 78 54 72 61 63 65    if( db->xTrace
31750 0a 20 20 20 26 26 20 21 70 2d 3e 64 6f 69 6e 67  .   && !p->doing
31760 52 65 72 75 6e 0a 20 20 20 26 26 20 28 7a 54 72  Rerun.   && (zTr
31770 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a  ace = (pOp->p4.z
31780 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70   ? pOp->p4.z : p
31790 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b  ->zSql))!=0.  ){
317a0 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  .    z = sqlite3
317b0 56 64 62 65 45 78 70 61 6e 64 53 71 6c 28 70 2c  VdbeExpandSql(p,
317c0 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 64 62   zTrace);.    db
317d0 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72  ->xTrace(db->pTr
317e0 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20 20 20 20  aceArg, z);.    
317f0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
31800 2c 20 7a 29 3b 0a 20 20 7d 0a 23 69 66 64 65 66  , z);.  }.#ifdef
31810 20 53 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54   SQLITE_USE_FCNT
31820 4c 5f 54 52 41 43 45 0a 20 20 7a 54 72 61 63 65  L_TRACE.  zTrace
31830 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20   = (pOp->p4.z ? 
31840 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a  pOp->p4.z : p->z
31850 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72 61  Sql);.  if( zTra
31860 63 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b  ce ){.    int i;
31870 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
31880 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20  db->nDb; i++){. 
31890 20 20 20 20 20 69 66 28 20 4d 41 53 4b 42 49 54       if( MASKBIT
318a0 28 69 29 20 26 20 70 2d 3e 62 74 72 65 65 4d 61  (i) & p->btreeMa
318b0 73 6b 29 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  sk)==0 ) continu
318c0 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
318d0 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62  _file_control(db
318e0 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  , db->aDb[i].zNa
318f0 6d 65 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c  me, SQLITE_FCNTL
31900 5f 54 52 41 43 45 2c 20 7a 54 72 61 63 65 29 3b  _TRACE, zTrace);
31910 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
31920 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 5f  f /* SQLITE_USE_
31930 46 43 4e 54 4c 5f 54 52 41 43 45 20 2a 2f 0a 23  FCNTL_TRACE */.#
31940 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
31950 55 47 0a 20 20 69 66 28 20 28 64 62 2d 3e 66 6c  UG.  if( (db->fl
31960 61 67 73 20 26 20 53 51 4c 49 54 45 5f 53 71 6c  ags & SQLITE_Sql
31970 54 72 61 63 65 29 21 3d 30 0a 20 20 20 26 26 20  Trace)!=0.   && 
31980 28 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e  (zTrace = (pOp->
31990 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a  p4.z ? pOp->p4.z
319a0 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a   : p->zSql))!=0.
319b0 20 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33    ){.    sqlite3
319c0 44 65 62 75 67 50 72 69 6e 74 66 28 22 53 51 4c  DebugPrintf("SQL
319d0 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a  -trace: %s\n", z
319e0 54 72 61 63 65 29 3b 0a 20 20 7d 0a 23 65 6e 64  Trace);.  }.#end
319f0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  if /* SQLITE_DEB
31a00 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20  UG */.#endif /* 
31a10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
31a20 45 20 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  E */.  break;.}.
31a30 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f  ../* Opcode: Noo
31a40 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  p * * * * *.**.*
31a50 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54  * Do nothing.  T
31a60 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
31a70 69 73 20 6f 66 74 65 6e 20 75 73 65 66 75 6c 20  is often useful 
31a80 61 73 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73  as a jump.** des
31a90 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a  tination..*/./*.
31aa0 2a 2a 20 54 68 65 20 6d 61 67 69 63 20 45 78 70  ** The magic Exp
31ab0 6c 61 69 6e 20 6f 70 63 6f 64 65 20 61 72 65 20  lain opcode are 
31ac0 6f 6e 6c 79 20 69 6e 73 65 72 74 65 64 20 77 68  only inserted wh
31ad0 65 6e 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77  en explain==2 (w
31ae0 68 69 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61  hich.** is to sa
31af0 79 20 77 68 65 6e 20 74 68 65 20 45 58 50 4c 41  y when the EXPLA
31b00 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73 79  IN QUERY PLAN sy
31b10 6e 74 61 78 20 69 73 20 75 73 65 64 2e 29 0a 2a  ntax is used.).*
31b20 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65  * This opcode re
31b30 63 6f 72 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f  cords informatio
31b40 6e 20 66 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d  n from the optim
31b50 69 7a 65 72 2e 20 20 49 74 20 69 73 20 74 68 65  izer.  It is the
31b60 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20  .** the same as 
31b70 61 20 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f  a no-op.  This o
31b80 70 63 6f 64 65 73 6e 65 76 65 72 20 61 70 70 65  pcodesnever appe
31b90 61 72 73 20 69 6e 20 61 20 72 65 61 6c 20 56 4d  ars in a real VM
31ba0 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66   program..*/.def
31bb0 61 75 6c 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ault: {         
31bc0 20 2f 2a 20 54 68 69 73 20 69 73 20 72 65 61 6c   /* This is real
31bd0 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f  ly OP_Noop and O
31be0 50 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 61  P_Explain */.  a
31bf0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
31c00 64 65 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70  de==OP_Noop || p
31c10 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  Op->opcode==OP_E
31c20 78 70 6c 61 69 6e 20 29 3b 0a 20 20 62 72 65 61  xplain );.  brea
31c30 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a  k;.}../*********
31c40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31c50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31c60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31c70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31c80 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65  ****.** The case
31c90 73 20 6f 66 20 74 68 65 20 73 77 69 74 63 68 20  s of the switch 
31ca0 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 20  statement above 
31cb0 74 68 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64  this line should
31cc0 20 61 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65 64   all be indented
31cd0 0a 2a 2a 20 62 79 20 36 20 73 70 61 63 65 73 2e  .** by 6 spaces.
31ce0 20 20 42 75 74 20 74 68 65 20 6c 65 66 74 2d 6d    But the left-m
31cf0 6f 73 74 20 36 20 73 70 61 63 65 73 20 68 61 76  ost 6 spaces hav
31d00 65 20 62 65 65 6e 20 72 65 6d 6f 76 65 64 20 74  e been removed t
31d10 6f 20 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a  o improve the.**
31d20 20 72 65 61 64 61 62 69 6c 69 74 79 2e 20 20 46   readability.  F
31d30 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 6f  rom this point o
31d40 6e 20 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d  n down, the norm
31d50 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72  al indentation r
31d60 75 6c 65 73 20 61 72 65 0a 2a 2a 20 72 65 73 74  ules are.** rest
31d70 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ored..**********
31d80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31d90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31da0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31db0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31dc0 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64  ***/.    }..#ifd
31dd0 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
31de0 20 20 20 20 7b 0a 20 20 20 20 20 20 75 36 34 20      {.      u64 
31df0 65 6c 61 70 73 65 64 20 3d 20 73 71 6c 69 74 65  elapsed = sqlite
31e00 33 48 77 74 69 6d 65 28 29 20 2d 20 73 74 61 72  3Hwtime() - star
31e10 74 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 79  t;.      pOp->cy
31e20 63 6c 65 73 20 2b 3d 20 65 6c 61 70 73 65 64 3b  cles += elapsed;
31e30 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 6e 74 2b  .      pOp->cnt+
31e40 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  +;.    }.#endif.
31e50 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  .    /* The foll
31e60 6f 77 69 6e 67 20 63 6f 64 65 20 61 64 64 73 20  owing code adds 
31e70 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 20 61  nothing to the a
31e80 63 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c  ctual functional
31e90 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68  ity.    ** of th
31ea0 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 74 20 69  e program.  It i
31eb0 73 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72 20  s only here for 
31ec0 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75  testing and debu
31ed0 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e  gging..    ** On
31ee0 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c   the other hand,
31ef0 20 69 74 20 64 6f 65 73 20 62 75 72 6e 20 43 50   it does burn CP
31f00 55 20 63 79 63 6c 65 73 20 65 76 65 72 79 20 74  U cycles every t
31f10 69 6d 65 20 74 68 72 6f 75 67 68 0a 20 20 20 20  ime through.    
31f20 2a 2a 20 74 68 65 20 65 76 61 6c 75 61 74 6f 72  ** the evaluator
31f30 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63 61   loop.  So we ca
31f40 6e 20 6c 65 61 76 65 20 69 74 20 6f 75 74 20 77  n leave it out w
31f50 68 65 6e 20 4e 44 45 42 55 47 20 69 73 20 64 65  hen NDEBUG is de
31f60 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69  fined..    */.#i
31f70 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 20  fndef NDEBUG.   
31f80 20 61 73 73 65 72 74 28 20 70 63 3e 3d 2d 31 20   assert( pc>=-1 
31f90 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  && pc<p->nOp );.
31fa0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
31fb0 45 42 55 47 0a 20 20 20 20 69 66 28 20 64 62 2d  EBUG.    if( db-
31fc0 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
31fd0 56 64 62 65 54 72 61 63 65 20 29 7b 0a 20 20 20  VdbeTrace ){.   
31fe0 20 20 20 69 66 28 20 72 63 21 3d 30 20 29 20 70     if( rc!=0 ) p
31ff0 72 69 6e 74 66 28 22 72 63 3d 25 64 5c 6e 22 2c  rintf("rc=%d\n",
32000 72 63 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  rc);.      if( p
32010 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 28 4f  Op->opflags & (O
32020 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c  PFLG_OUT2_PREREL
32030 45 41 53 45 7c 4f 50 46 4c 47 5f 4f 55 54 32 29  EASE|OPFLG_OUT2)
32040 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69   ){.        regi
32050 73 74 65 72 54 72 61 63 65 28 70 4f 70 2d 3e 70  sterTrace(pOp->p
32060 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  2, &aMem[pOp->p2
32070 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
32080 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61    if( pOp->opfla
32090 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20  gs & OPFLG_OUT3 
320a0 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73  ){.        regis
320b0 74 65 72 54 72 61 63 65 28 70 4f 70 2d 3e 70 33  terTrace(pOp->p3
320c0 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  , &aMem[pOp->p3]
320d0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
320e0 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49  .#endif  /* SQLI
320f0 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64  TE_DEBUG */.#end
32100 69 66 20 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f  if  /* NDEBUG */
32110 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64  .  }  /* The end
32120 20 6f 66 20 74 68 65 20 66 6f 72 28 3b 3b 29 20   of the for(;;) 
32130 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70 73 20 74  loop the loops t
32140 68 72 6f 75 67 68 20 6f 70 63 6f 64 65 73 20 2a  hrough opcodes *
32150 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 72 65  /..  /* If we re
32160 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c 20  ach this point, 
32170 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 65 78  it means that ex
32180 65 63 75 74 69 6f 6e 20 69 73 20 66 69 6e 69 73  ecution is finis
32190 68 65 64 20 77 69 74 68 0a 20 20 2a 2a 20 61 6e  hed with.  ** an
321a0 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b   error of some k
321b0 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f 65  ind..  */.vdbe_e
321c0 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20 61 73 73  rror_halt:.  ass
321d0 65 72 74 28 20 72 63 20 29 3b 0a 20 20 70 2d 3e  ert( rc );.  p->
321e0 72 63 20 3d 20 72 63 3b 0a 20 20 74 65 73 74 63  rc = rc;.  testc
321f0 61 73 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62  ase( sqlite3Glob
32200 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30  alConfig.xLog!=0
32210 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 6f   );.  sqlite3_lo
32220 67 28 72 63 2c 20 22 73 74 61 74 65 6d 65 6e 74  g(rc, "statement
32230 20 61 62 6f 72 74 73 20 61 74 20 25 64 3a 20 5b   aborts at %d: [
32240 25 73 5d 20 25 73 22 2c 20 0a 20 20 20 20 20 20  %s] %s", .      
32250 20 20 20 20 20 20 20 20 20 20 20 20 20 70 63 2c               pc,
32260 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72   p->zSql, p->zEr
32270 72 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74 65 33  rMsg);.  sqlite3
32280 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 69  VdbeHalt(p);.  i
32290 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f  f( rc==SQLITE_IO
322a0 45 52 52 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e  ERR_NOMEM ) db->
322b0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
322c0 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
322d0 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 65 73  ERROR;.  if( res
322e0 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3e  etSchemaOnFault>
322f0 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
32300 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64  ResetOneSchema(d
32310 62 2c 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  b, resetSchemaOn
32320 46 61 75 6c 74 2d 31 29 3b 0a 20 20 7d 0a 0a 20  Fault-1);.  }.. 
32330 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20   /* This is the 
32340 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f 66 20  only way out of 
32350 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e 20  this procedure. 
32360 20 57 65 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a   We have to.  **
32370 20 72 65 6c 65 61 73 65 20 74 68 65 20 6d 75 74   release the mut
32380 65 78 65 73 20 6f 6e 20 62 74 72 65 65 73 20 74  exes on btrees t
32390 68 61 74 20 77 65 72 65 20 61 63 71 75 69 72 65  hat were acquire
323a0 64 20 61 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f  d at the.  ** to
323b0 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72  p. */.vdbe_retur
323c0 6e 3a 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77  n:.  db->lastRow
323d0 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a  id = lastRowid;.
323e0 20 20 74 65 73 74 63 61 73 65 28 20 6e 56 6d 53    testcase( nVmS
323f0 74 65 70 3e 30 20 29 3b 0a 20 20 70 2d 3e 61 43  tep>0 );.  p->aC
32400 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54  ounter[SQLITE_ST
32410 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50  MTSTATUS_VM_STEP
32420 5d 20 2b 3d 20 28 69 6e 74 29 6e 56 6d 53 74 65  ] += (int)nVmSte
32430 70 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  p;.  sqlite3Vdbe
32440 4c 65 61 76 65 28 70 29 3b 0a 20 20 72 65 74 75  Leave(p);.  retu
32450 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d  rn rc;..  /* Jum
32460 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20 73  p to here if a s
32470 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6c 61  tring or blob la
32480 72 67 65 72 20 74 68 61 6e 20 53 51 4c 49 54 45  rger than SQLITE
32490 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a  _MAX_LENGTH.  **
324a0 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e   is encountered.
324b0 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20  .  */.too_big:. 
324c0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
324d0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
324e0 62 2c 20 22 73 74 72 69 6e 67 20 6f 72 20 62 6c  b, "string or bl
324f0 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a 20 20  ob too big");.  
32500 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f 42  rc = SQLITE_TOOB
32510 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  IG;.  goto vdbe_
32520 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f  error_halt;..  /
32530 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69  * Jump to here i
32540 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69  f a malloc() fai
32550 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a  ls..  */.no_mem:
32560 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  .  db->mallocFai
32570 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74  led = 1;.  sqlit
32580 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
32590 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6f 75  zErrMsg, db, "ou
325a0 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b 0a 20  t of memory");. 
325b0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
325c0 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  EM;.  goto vdbe_
325d0 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f  error_halt;..  /
325e0 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 66  * Jump to here f
325f0 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e  or any other kin
32600 64 20 6f 66 20 66 61 74 61 6c 20 65 72 72 6f 72  d of fatal error
32610 2e 20 20 54 68 65 20 22 72 63 22 20 76 61 72 69  .  The "rc" vari
32620 61 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64  able.  ** should
32630 20 68 6f 6c 64 20 74 68 65 20 65 72 72 6f 72 20   hold the error 
32640 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f  number..  */.abo
32650 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a  rt_due_to_error:
32660 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 7a 45  .  assert( p->zE
32670 72 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66  rrMsg==0 );.  if
32680 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
32690 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45  ed ) rc = SQLITE
326a0 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63  _NOMEM;.  if( rc
326b0 21 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  !=SQLITE_IOERR_N
326c0 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69  OMEM ){.    sqli
326d0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
326e0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
326f0 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74  s", sqlite3ErrSt
32700 72 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f  r(rc));.  }.  go
32710 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
32720 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  lt;..  /* Jump t
32730 6f 20 68 65 72 65 20 69 66 20 74 68 65 20 73 71  o here if the sq
32740 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
32750 29 20 41 50 49 20 73 65 74 73 20 74 68 65 20 69  ) API sets the i
32760 6e 74 65 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c  nterrupt.  ** fl
32770 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64  ag..  */.abort_d
32780 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a  ue_to_interrupt:
32790 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 75  .  assert( db->u
327a0 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
327b0 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  );.  rc = SQLITE
327c0 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 2d  _INTERRUPT;.  p-
327d0 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69  >rc = rc;.  sqli
327e0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
327f0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
32800 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74  s", sqlite3ErrSt
32810 72 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76  r(rc));.  goto v
32820 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
32830 7d 0a                                            }.