/ Hex Artifact Content
Login

Artifact 8697f15ad86604c5a8d598b1566e1594a7956469:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 79   like that every
0520: 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66   happens..*/.#if
0530: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
0540: 0a 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f  .# define memAbo
0550: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20  utToChange(P,M) 
0560: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62  sqlite3VdbeMemAb
0570: 6f 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29  outToChange(P,M)
0580: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
0590: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
05a0: 28 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (P,M).#endif../*
05b0: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
05c0: 67 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  g global variabl
05d0: 65 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  e is incremented
05e0: 20 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75   every time a cu
05f0: 72 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65  rsor.** moves, e
0600: 69 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f  ither by the OP_
0610: 53 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c  SeekXX, OP_Next,
0620: 20 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f   or OP_Prev opco
0630: 64 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a  des.  The test.*
0640: 2a 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  * procedures use
0650: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0660: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0670: 68 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a  hat indices are.
0680: 2a 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65  ** working corre
0690: 63 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69  ctly.  This vari
06a0: 61 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63  able has no func
06b0: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
06c0: 74 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66  to.** help verif
06d0: 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70  y the correct op
06e0: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c  eration of the l
06f0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0700: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0710: 74 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68  t sqlite3_search
0720: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0730: 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74  if../*.** When t
0740: 68 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  his global varia
0750: 62 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c  ble is positive,
0760: 20 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65   it gets decreme
0770: 6e 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65  nted once before
0780: 0a 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63  .** each instruc
0790: 74 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45  tion in the VDBE
07a0: 2e 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68  .  When it reach
07b0: 65 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e  es zero, the u1.
07c0: 69 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a  isInterrupted.**
07d0: 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71   field of the sq
07e0: 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20  lite3 structure 
07f0: 69 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20  is set in order 
0800: 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69  to simulate an i
0810: 6e 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20  nterrupt..**.** 
0820: 54 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73  This facility is
0830: 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e   used for testin
0840: 67 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e  g purposes only.
0850: 20 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75    It does not fu
0860: 6e 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20  nction.** in an 
0870: 6f 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a  ordinary build..
0880: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
0890: 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65  _TEST.int sqlite
08a0: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
08b0: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
08c0: 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c  *.** The next gl
08d0: 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73  obal variable is
08e0: 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63   incremented eac
08f0: 68 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f  h type the OP_So
0900: 72 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20  rt opcode.** is 
0910: 65 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74  executed.  The t
0920: 65 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75  est procedures u
0930: 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74  se this informat
0940: 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65  ion to make sure
0950: 20 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67   that.** sorting
0960: 20 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72   is occurring or
0970: 20 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61   not occurring a
0980: 74 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69  t appropriate ti
0990: 6d 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69  mes.   This vari
09a0: 61 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66  able.** has no f
09b0: 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68  unction other th
09c0: 61 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66  an to help verif
09d0: 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70  y the correct op
09e0: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  eration of the.*
09f0: 2a 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69  * library..*/.#i
0a00: 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
0a10: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72  .int sqlite3_sor
0a20: 74 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e  t_count = 0;.#en
0a30: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e  dif../*.** The n
0a40: 65 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  ext global varia
0a50: 62 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20  ble records the 
0a60: 73 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67  size of the larg
0a70: 65 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20  est MEM_Blob.** 
0a80: 6f 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20  or MEM_Str that 
0a90: 68 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79  has been used by
0aa0: 20 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20   a VDBE opcode. 
0ab0: 20 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64   The test proced
0ac0: 75 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73  ures.** use this
0ad0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20   information to 
0ae0: 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74  make sure that t
0af0: 68 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e  he zero-blob fun
0b00: 63 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73  ctionality.** is
0b10: 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74   working correct
0b20: 6c 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  ly.   This varia
0b30: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
0b40: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
0b50: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
0b60: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
0b70: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
0b80: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0b90: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0ba0: 20 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f   sqlite3_max_blo
0bb0: 62 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69  bsize = 0;.stati
0bc0: 63 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78  c void updateMax
0bd0: 42 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29  Blobsize(Mem *p)
0be0: 7b 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67  {.  if( (p->flag
0bf0: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
0c00: 5f 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d  _Blob))!=0 && p-
0c10: 3e 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62  >n>sqlite3_max_b
0c20: 6c 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73  lobsize ){.    s
0c30: 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73  qlite3_max_blobs
0c40: 69 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a  ize = p->n;.  }.
0c50: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
0c60: 54 68 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20  The next global 
0c70: 76 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72  variable is incr
0c80: 65 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d  emented each tim
0c90: 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f  e the OP_Found o
0ca0: 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63  pcode.** is exec
0cb0: 75 74 65 64 2e 20 54 68 69 73 20 69 73 20 75 73  uted. This is us
0cc0: 65 64 20 74 6f 20 74 65 73 74 20 77 68 65 74 68  ed to test wheth
0cd0: 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f  er or not the fo
0ce0: 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65  reign key.** ope
0cf0: 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  ration implement
0d00: 65 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73  ed using OP_FkIs
0d10: 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e  Zero is working.
0d20: 20 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a   This variable.*
0d30: 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f  * has no functio
0d40: 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20  n other than to 
0d50: 68 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20  help verify the 
0d60: 63 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f  correct operatio
0d70: 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72  n of the.** libr
0d80: 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ary..*/.#ifdef S
0d90: 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73  QLITE_TEST.int s
0da0: 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75  qlite3_found_cou
0db0: 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a  nt = 0;.#endif..
0dc0: 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67  /*.** Test a reg
0dd0: 69 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20  ister to see if 
0de0: 69 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63  it exceeds the c
0df0: 75 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62  urrent maximum b
0e00: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20  lob size..** If 
0e10: 69 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20  it does, record 
0e20: 74 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20  the new maximum 
0e30: 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69  blob size..*/.#i
0e40: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
0e50: 5f 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e  _TEST) && !defin
0e60: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ed(SQLITE_OMIT_B
0e70: 55 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64  UILTIN_TEST).# d
0e80: 65 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58  efine UPDATE_MAX
0e90: 5f 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70  _BLOBSIZE(P)  up
0ea0: 64 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28  dateMaxBlobsize(
0eb0: 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  P).#else.# defin
0ec0: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
0ed0: 42 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a  BSIZE(P).#endif.
0ee0: 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74  ./*.** Convert t
0ef0: 68 65 20 67 69 76 65 6e 20 72 65 67 69 73 74 65  he given registe
0f00: 72 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20  r into a string 
0f10: 69 66 20 69 74 20 69 73 6e 27 74 20 6f 6e 65 0a  if it isn't one.
0f20: 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52 65 74 75  ** already. Retu
0f30: 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61  rn non-zero if a
0f40: 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e   malloc() fails.
0f50: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74 72 69  .*/.#define Stri
0f60: 6e 67 69 66 79 28 50 2c 20 65 6e 63 29 20 5c 0a  ngify(P, enc) \.
0f70: 20 20 20 69 66 28 28 28 50 29 2d 3e 66 6c 61 67     if(((P)->flag
0f80: 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  s&(MEM_Str|MEM_B
0f90: 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73 71 6c 69  lob))==0 && sqli
0fa0: 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67  te3VdbeMemString
0fb0: 69 66 79 28 50 2c 65 6e 63 29 29 20 5c 0a 20 20  ify(P,enc)) \.  
0fc0: 20 20 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d     { goto no_mem
0fd0: 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70  ; }../*.** An ep
0fe0: 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67 20 76  hemeral string v
0ff0: 61 6c 75 65 20 28 73 69 67 6e 69 66 69 65 64 20  alue (signified 
1000: 62 79 20 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d  by the MEM_Ephem
1010: 20 66 6c 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a   flag) contains.
1020: 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ** a pointer to 
1030: 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  a dynamically al
1040: 6c 6f 63 61 74 65 64 20 73 74 72 69 6e 67 20 77  located string w
1050: 68 65 72 65 20 73 6f 6d 65 20 6f 74 68 65 72 20  here some other 
1060: 65 6e 74 69 74 79 0a 2a 2a 20 69 73 20 72 65 73  entity.** is res
1070: 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 61  ponsible for dea
1080: 6c 6c 6f 63 61 74 69 6e 67 20 74 68 61 74 20 73  llocating that s
1090: 74 72 69 6e 67 2e 20 20 42 65 63 61 75 73 65 20  tring.  Because 
10a0: 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  the register.** 
10b0: 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c  does not control
10c0: 20 74 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20   the string, it 
10d0: 6d 69 67 68 74 20 62 65 20 64 65 6c 65 74 65 64  might be deleted
10e0: 20 77 69 74 68 6f 75 74 20 74 68 65 20 72 65 67   without the reg
10f0: 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67  ister.** knowing
1100: 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   it..**.** This 
1110: 72 6f 75 74 69 6e 65 20 63 6f 6e 76 65 72 74 73  routine converts
1120: 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74   an ephemeral st
1130: 72 69 6e 67 20 69 6e 74 6f 20 61 20 64 79 6e 61  ring into a dyna
1140: 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  mically allocate
1150: 64 0a 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74  d.** string that
1160: 20 74 68 65 20 72 65 67 69 73 74 65 72 20 69 74   the register it
1170: 73 65 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20  self controls.  
1180: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1190: 69 74 0a 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61  it.** converts a
11a0: 6e 20 4d 45 4d 5f 45 70 68 65 6d 20 73 74 72 69  n MEM_Ephem stri
11b0: 6e 67 20 69 6e 74 6f 20 61 6e 20 4d 45 4d 5f 44  ng into an MEM_D
11c0: 79 6e 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64  yn string..*/.#d
11d0: 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61  efine Deephemera
11e0: 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28  lize(P) \.   if(
11f0: 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d   ((P)->flags&MEM
1200: 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20  _Ephem)!=0 \.   
1210: 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64      && sqlite3Vd
1220: 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62  beMemMakeWriteab
1230: 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f  le(P) ){ goto no
1240: 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72  _mem;}../* Retur
1250: 6e 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75  n true if the cu
1260: 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20  rsor was opened 
1270: 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65  using the OP_Ope
1280: 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20  nSorter opcode. 
1290: 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72  */.#define isSor
12a0: 74 65 72 28 78 29 20 28 28 78 29 2d 3e 70 53 6f  ter(x) ((x)->pSo
12b0: 72 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  rter!=0)../*.** 
12c0: 41 72 67 75 6d 65 6e 74 20 70 4d 65 6d 20 70 6f  Argument pMem po
12d0: 69 6e 74 73 20 61 74 20 61 20 72 65 67 69 73 74  ints at a regist
12e0: 65 72 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20  er that will be 
12f0: 70 61 73 73 65 64 20 74 6f 20 61 0a 2a 2a 20 75  passed to a.** u
1300: 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63  ser-defined func
1310: 74 69 6f 6e 20 6f 72 20 72 65 74 75 72 6e 65 64  tion or returned
1320: 20 74 6f 20 74 68 65 20 75 73 65 72 20 61 73 20   to the user as 
1330: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 20  the result of a 
1340: 71 75 65 72 79 2e 0a 2a 2a 20 54 68 69 73 20 72  query..** This r
1350: 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68 65 20  outine sets the 
1360: 70 4d 65 6d 2d 3e 74 79 70 65 20 76 61 72 69 61  pMem->type varia
1370: 62 6c 65 20 75 73 65 64 20 62 79 20 74 68 65 20  ble used by the 
1380: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 2a 28  sqlite3_value_*(
1390: 29 20 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 2e 0a  ) .** routines..
13a0: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
13b0: 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28  dbeMemStoreType(
13c0: 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 6e  Mem *pMem){.  in
13d0: 74 20 66 6c 61 67 73 20 3d 20 70 4d 65 6d 2d 3e  t flags = pMem->
13e0: 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 66 6c 61  flags;.  if( fla
13f0: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
1400: 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20  .    pMem->type 
1410: 3d 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3b 0a 20  = SQLITE_NULL;. 
1420: 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c   }.  else if( fl
1430: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b  ags & MEM_Int ){
1440: 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20  .    pMem->type 
1450: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52  = SQLITE_INTEGER
1460: 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28  ;.  }.  else if(
1470: 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61   flags & MEM_Rea
1480: 6c 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74  l ){.    pMem->t
1490: 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 46 4c 4f  ype = SQLITE_FLO
14a0: 41 54 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69  AT;.  }.  else i
14b0: 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  f( flags & MEM_S
14c0: 74 72 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e  tr ){.    pMem->
14d0: 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 54 45  type = SQLITE_TE
14e0: 58 54 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  XT;.  }else{.   
14f0: 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51   pMem->type = SQ
1500: 4c 49 54 45 5f 42 4c 4f 42 3b 0a 20 20 7d 0a 7d  LITE_BLOB;.  }.}
1510: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  ../*.** Allocate
1520: 20 56 64 62 65 43 75 72 73 6f 72 20 6e 75 6d 62   VdbeCursor numb
1530: 65 72 20 69 43 75 72 2e 20 20 52 65 74 75 72 6e  er iCur.  Return
1540: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74   a pointer to it
1550: 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 0a 2a  .  Return NULL.*
1560: 2a 20 69 66 20 77 65 20 72 75 6e 20 6f 75 74 20  * if we run out 
1570: 6f 66 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73 74  of memory..*/.st
1580: 61 74 69 63 20 56 64 62 65 43 75 72 73 6f 72 20  atic VdbeCursor 
1590: 2a 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28  *allocateCursor(
15a0: 0a 20 20 56 64 62 65 20 2a 70 2c 20 20 20 20 20  .  Vdbe *p,     
15b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
15c0: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
15d0: 2a 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c 20 20  */.  int iCur,  
15e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
15f0: 64 65 78 20 6f 66 20 74 68 65 20 6e 65 77 20 56  dex of the new V
1600: 64 62 65 43 75 72 73 6f 72 20 2a 2f 0a 20 20 69  dbeCursor */.  i
1610: 6e 74 20 6e 46 69 65 6c 64 2c 20 20 20 20 20 20  nt nField,      
1620: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1630: 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
1640: 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 2a  table or index *
1650: 2f 0a 20 20 69 6e 74 20 69 44 62 2c 20 20 20 20  /.  int iDb,    
1660: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
1670: 61 62 61 73 65 20 74 68 65 20 63 75 72 73 6f 72  abase the cursor
1680: 20 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72 20   belongs to, or 
1690: 2d 31 20 2a 2f 0a 20 20 69 6e 74 20 69 73 42 74  -1 */.  int isBt
16a0: 72 65 65 43 75 72 73 6f 72 20 20 20 20 20 2f 2a  reeCursor     /*
16b0: 20 54 72 75 65 20 66 6f 72 20 42 2d 54 72 65 65   True for B-Tree
16c0: 2e 20 20 46 61 6c 73 65 20 66 6f 72 20 70 73 65  .  False for pse
16d0: 75 64 6f 2d 74 61 62 6c 65 20 6f 72 20 76 74 61  udo-table or vta
16e0: 62 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e  b */.){.  /* Fin
16f0: 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  d the memory cel
1700: 6c 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75  l that will be u
1710: 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
1720: 20 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79 0a   blob of memory.
1730: 20 20 2a 2a 20 72 65 71 75 69 72 65 64 20 66 6f    ** required fo
1740: 72 20 74 68 69 73 20 56 64 62 65 43 75 72 73 6f  r this VdbeCurso
1750: 72 20 73 74 72 75 63 74 75 72 65 2e 20 49 74 20  r structure. It 
1760: 69 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74 6f  is convenient to
1770: 20 75 73 65 20 61 20 0a 20 20 2a 2a 20 76 64 62   use a .  ** vdb
1780: 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 6f  e memory cell to
1790: 20 6d 61 6e 61 67 65 20 74 68 65 20 6d 65 6d 6f   manage the memo
17a0: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65  ry allocation re
17b0: 71 75 69 72 65 64 20 66 6f 72 20 61 0a 20 20 2a  quired for a.  *
17c0: 2a 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  * VdbeCursor str
17d0: 75 63 74 75 72 65 20 66 6f 72 20 74 68 65 20 66  ucture for the f
17e0: 6f 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73  ollowing reasons
17f0: 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20  :.  **.  **   * 
1800: 53 6f 6d 65 74 69 6d 65 73 20 63 75 72 73 6f 72  Sometimes cursor
1810: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73 65   numbers are use
1820: 64 20 66 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f  d for a couple o
1830: 66 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a  f different.  **
1840: 20 20 20 20 20 70 75 72 70 6f 73 65 73 20 69 6e       purposes in
1850: 20 61 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e   a vdbe program.
1860: 20 54 68 65 20 64 69 66 66 65 72 65 6e 74 20 75   The different u
1870: 73 65 73 20 6d 69 67 68 74 20 72 65 71 75 69 72  ses might requir
1880: 65 0a 20 20 2a 2a 20 20 20 20 20 64 69 66 66 65  e.  **     diffe
1890: 72 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63  rent sized alloc
18a0: 61 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63  ations. Memory c
18b0: 65 6c 6c 73 20 70 72 6f 76 69 64 65 20 67 72 6f  ells provide gro
18c0: 77 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61  wable.  **     a
18d0: 6c 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a  llocations..  **
18e0: 0a 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75  .  **   * When u
18f0: 73 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f  sing ENABLE_MEMO
1900: 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d  RY_MANAGEMENT, m
1910: 65 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66 66 65  emory cell buffe
1920: 72 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20  rs can.  **     
1930: 62 65 20 66 72 65 65 64 20 6c 61 7a 69 6c 79 20  be freed lazily 
1940: 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 33 5f  via the sqlite3_
1950: 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29  release_memory()
1960: 20 41 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20   API. This.  ** 
1970: 20 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68      minimizes th
1980: 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c  e number of mall
1990: 6f 63 20 63 61 6c 6c 73 20 6d 61 64 65 20 62 79  oc calls made by
19a0: 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a   the system..  *
19b0: 2a 0a 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65  *.  ** Memory ce
19c0: 6c 6c 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20  lls for cursors 
19d0: 61 72 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 74  are allocated at
19e0: 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20   the top of the 
19f0: 61 64 64 72 65 73 73 0a 20 20 2a 2a 20 73 70 61  address.  ** spa
1a00: 63 65 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20  ce. Memory cell 
1a10: 28 70 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73  (p->nMem) corres
1a20: 70 6f 6e 64 73 20 74 6f 20 63 75 72 73 6f 72 20  ponds to cursor 
1a30: 30 2e 20 53 70 61 63 65 20 66 6f 72 0a 20 20 2a  0. Space for.  *
1a40: 2a 20 63 75 72 73 6f 72 20 31 20 69 73 20 6d 61  * cursor 1 is ma
1a50: 6e 61 67 65 64 20 62 79 20 6d 65 6d 6f 72 79 20  naged by memory 
1a60: 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29  cell (p->nMem-1)
1a70: 2c 20 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65  , etc..  */.  Me
1a80: 6d 20 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d  m *pMem = &p->aM
1a90: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d  em[p->nMem-iCur]
1aa0: 3b 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a  ;..  int nByte;.
1ab0: 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1ac0: 78 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d  x = 0;.  nByte =
1ad0: 20 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73   .      ROUND8(s
1ae0: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
1af0: 29 29 20 2b 20 32 2a 73 69 7a 65 6f 66 28 75 33  )) + 2*sizeof(u3
1b00: 32 29 2a 6e 46 69 65 6c 64 20 2b 20 0a 20 20 20  2)*nField + .   
1b10: 20 20 20 28 69 73 42 74 72 65 65 43 75 72 73 6f     (isBtreeCurso
1b20: 72 3f 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  r?sqlite3BtreeCu
1b30: 72 73 6f 72 53 69 7a 65 28 29 3a 30 29 3b 0a 0a  rsorSize():0);..
1b40: 20 20 61 73 73 65 72 74 28 20 69 43 75 72 3c 70    assert( iCur<p
1b50: 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69  ->nCursor );.  i
1b60: 66 28 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72  f( p->apCsr[iCur
1b70: 5d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ] ){.    sqlite3
1b80: 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70  VdbeFreeCursor(p
1b90: 2c 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d  , p->apCsr[iCur]
1ba0: 29 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72 5b  );.    p->apCsr[
1bb0: 69 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20  iCur] = 0;.  }. 
1bc0: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d   if( SQLITE_OK==
1bd0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
1be0: 6f 77 28 70 4d 65 6d 2c 20 6e 42 79 74 65 2c 20  ow(pMem, nByte, 
1bf0: 30 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43  0) ){.    p->apC
1c00: 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d  sr[iCur] = pCx =
1c10: 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d   (VdbeCursor*)pM
1c20: 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65  em->z;.    memse
1c30: 74 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f 66  t(pCx, 0, sizeof
1c40: 28 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a 20  (VdbeCursor));. 
1c50: 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69 44     pCx->iDb = iD
1c60: 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69 65  b;.    pCx->nFie
1c70: 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20 20  ld = nField;.   
1c80: 20 69 66 28 20 69 73 42 74 72 65 65 43 75 72 73   if( isBtreeCurs
1c90: 6f 72 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d  or ){.      pCx-
1ca0: 3e 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75  >pCursor = (BtCu
1cb0: 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20  rsor*).         
1cc0: 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38   &pMem->z[ROUND8
1cd0: 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73  (sizeof(VdbeCurs
1ce0: 6f 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28 75 33  or))+2*sizeof(u3
1cf0: 32 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20  2)*nField];.    
1d00: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75    sqlite3BtreeCu
1d10: 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 70 43  rsorZero(pCx->pC
1d20: 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  ursor);.    }.  
1d30: 7d 0a 20 20 72 65 74 75 72 6e 20 70 43 78 3b 0a  }.  return pCx;.
1d40: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20  }../*.** Try to 
1d50: 63 6f 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20  convert a value 
1d60: 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72  into a numeric r
1d70: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66  epresentation if
1d80: 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f   we can.** do so
1d90: 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66   without loss of
1da0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49   information.  I
1db0: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
1dc0: 66 20 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20  f the string.** 
1dd0: 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d  looks like a num
1de0: 62 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 20  ber, convert it 
1df0: 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20  into a number.  
1e00: 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a  If it does not.*
1e10: 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75  * look like a nu
1e20: 6d 62 65 72 2c 20 6c 65 61 76 65 20 69 74 20 61  mber, leave it a
1e30: 6c 6f 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  lone..*/.static 
1e40: 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69  void applyNumeri
1e50: 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70  cAffinity(Mem *p
1e60: 52 65 63 29 7b 0a 20 20 69 66 28 20 28 70 52 65  Rec){.  if( (pRe
1e70: 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  c->flags & (MEM_
1e80: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 3d 3d  Real|MEM_Int))==
1e90: 30 20 29 7b 0a 20 20 20 20 64 6f 75 62 6c 65 20  0 ){.    double 
1ea0: 72 56 61 6c 75 65 3b 0a 20 20 20 20 69 36 34 20  rValue;.    i64 
1eb0: 69 56 61 6c 75 65 3b 0a 20 20 20 20 75 38 20 65  iValue;.    u8 e
1ec0: 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b 0a  nc = pRec->enc;.
1ed0: 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66      if( (pRec->f
1ee0: 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 3d 3d 30  lags&MEM_Str)==0
1ef0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 69   ) return;.    i
1f00: 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70  f( sqlite3AtoF(p
1f10: 52 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c  Rec->z, &rValue,
1f20: 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d   pRec->n, enc)==
1f30: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20  0 ) return;.    
1f40: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74  if( 0==sqlite3At
1f50: 6f 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69  oi64(pRec->z, &i
1f60: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
1f70: 65 6e 63 29 20 29 7b 0a 20 20 20 20 20 20 70 52  enc) ){.      pR
1f80: 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c 75 65  ec->u.i = iValue
1f90: 3b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c  ;.      pRec->fl
1fa0: 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  ags |= MEM_Int;.
1fb0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1fc0: 20 70 52 65 63 2d 3e 72 20 3d 20 72 56 61 6c 75   pRec->r = rValu
1fd0: 65 3b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 66  e;.      pRec->f
1fe0: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c  lags |= MEM_Real
1ff0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f  ;.    }.  }.}../
2000: 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67 20  *.** Processing 
2010: 69 73 20 64 65 74 65 72 6d 69 6e 65 20 62 79 20  is determine by 
2020: 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 61 72  the affinity par
2030: 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51  ameter:.**.** SQ
2040: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
2050: 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  :.** SQLITE_AFF_
2060: 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f  REAL:.** SQLITE_
2070: 41 46 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20  AFF_NUMERIC:.** 
2080: 20 20 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72     Try to conver
2090: 74 20 70 52 65 63 20 74 6f 20 61 6e 20 69 6e 74  t pRec to an int
20a0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
20b0: 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20  ion or a .**    
20c0: 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72  floating-point r
20d0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66  epresentation if
20e0: 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72   an integer repr
20f0: 65 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20  esentation.**   
2100: 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
2110: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
2120: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2130: 6e 74 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20  ntation is.**   
2140: 20 61 6c 77 61 79 73 20 70 72 65 66 65 72 72 65   always preferre
2150: 64 2c 20 65 76 65 6e 20 69 66 20 74 68 65 20 61  d, even if the a
2160: 66 66 69 6e 69 74 79 20 69 73 20 52 45 41 4c 2c  ffinity is REAL,
2170: 20 62 65 63 61 75 73 65 0a 2a 2a 20 20 20 20 61   because.**    a
2180: 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  n integer repres
2190: 65 6e 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65  entation is more
21a0: 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 74   space efficient
21b0: 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20   on disk..**.** 
21c0: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 3a  SQLITE_AFF_TEXT:
21d0: 0a 2a 2a 20 20 20 20 43 6f 6e 76 65 72 74 20 70  .**    Convert p
21e0: 52 65 63 20 74 6f 20 61 20 74 65 78 74 20 72 65  Rec to a text re
21f0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a  presentation..**
2200: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  .** SQLITE_AFF_N
2210: 4f 4e 45 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70  ONE:.**    No-op
2220: 2e 20 20 70 52 65 63 20 69 73 20 75 6e 63 68 61  .  pRec is uncha
2230: 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  nged..*/.static 
2240: 76 6f 69 64 20 61 70 70 6c 79 41 66 66 69 6e 69  void applyAffini
2250: 74 79 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c  ty(.  Mem *pRec,
2260: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
2270: 20 76 61 6c 75 65 20 74 6f 20 61 70 70 6c 79 20   value to apply 
2280: 61 66 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20  affinity to */. 
2290: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 2c 20   char affinity, 
22a0: 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69       /* The affi
22b0: 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69  nity to be appli
22c0: 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20  ed */.  u8 enc  
22d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
22e0: 73 65 20 74 68 69 73 20 74 65 78 74 20 65 6e 63  se this text enc
22f0: 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66  oding */.){.  if
2300: 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49  ( affinity==SQLI
2310: 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20  TE_AFF_TEXT ){. 
2320: 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65 6d     /* Only attem
2330: 70 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f  pt the conversio
2340: 6e 20 74 6f 20 54 45 58 54 20 69 66 20 74 68 65  n to TEXT if the
2350: 72 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  re is an integer
2360: 20 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a 20   or real.    ** 
2370: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 28  representation (
2380: 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64 6f  blob and NULL do
2390: 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65 72 74   not get convert
23a0: 65 64 29 20 62 75 74 20 6e 6f 20 73 74 72 69 6e  ed) but no strin
23b0: 67 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65  g.    ** represe
23c0: 6e 74 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a  ntation..    */.
23d0: 20 20 20 20 69 66 28 20 30 3d 3d 28 70 52 65 63      if( 0==(pRec
23e0: 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29  ->flags&MEM_Str)
23f0: 20 26 26 20 28 70 52 65 63 2d 3e 66 6c 61 67 73   && (pRec->flags
2400: 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49  &(MEM_Real|MEM_I
2410: 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20 73 71  nt)) ){.      sq
2420: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
2430: 6e 67 69 66 79 28 70 52 65 63 2c 20 65 6e 63 29  ngify(pRec, enc)
2440: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63  ;.    }.    pRec
2450: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d  ->flags &= ~(MEM
2460: 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a  _Real|MEM_Int);.
2470: 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69    }else if( affi
2480: 6e 69 74 79 21 3d 53 51 4c 49 54 45 5f 41 46 46  nity!=SQLITE_AFF
2490: 5f 4e 4f 4e 45 20 29 7b 0a 20 20 20 20 61 73 73  _NONE ){.    ass
24a0: 65 72 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53  ert( affinity==S
24b0: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
24c0: 52 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53  R || affinity==S
24d0: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20  QLITE_AFF_REAL. 
24e0: 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61              || a
24f0: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
2500: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20  AFF_NUMERIC );. 
2510: 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
2520: 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20  ffinity(pRec);. 
2530: 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
2540: 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b  gs & MEM_Real ){
2550: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
2560: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
2570: 79 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20  y(pRec);.    }. 
2580: 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20   }.}../*.** Try 
2590: 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74  to convert the t
25a0: 79 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ype of a functio
25b0: 6e 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20  n argument or a 
25c0: 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a  result column.**
25d0: 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20   into a numeric 
25e0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20  representation. 
25f0: 20 55 73 65 20 65 69 74 68 65 72 20 49 4e 54 45   Use either INTE
2600: 47 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63  GER or REAL whic
2610: 68 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72  hever.** is appr
2620: 6f 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e  opriate.  But on
2630: 6c 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72  ly do the conver
2640: 73 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f  sion if it is po
2650: 73 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a  ssible without.*
2660: 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  * loss of inform
2670: 61 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e  ation and return
2680: 20 74 68 65 20 72 65 76 69 73 65 64 20 74 79 70   the revised typ
2690: 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e  e of the argumen
26a0: 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
26b0: 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f  3_value_numeric_
26c0: 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  type(sqlite3_val
26d0: 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d  ue *pVal){.  Mem
26e0: 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70   *pMem = (Mem*)p
26f0: 56 61 6c 3b 0a 20 20 69 66 28 20 70 4d 65 6d 2d  Val;.  if( pMem-
2700: 3e 74 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45  >type==SQLITE_TE
2710: 58 54 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 4e  XT ){.    applyN
2720: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
2730: 4d 65 6d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Mem);.    sqlite
2740: 33 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70  3VdbeMemStoreTyp
2750: 65 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72  e(pMem);.  }.  r
2760: 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 74 79 70 65  eturn pMem->type
2770: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72  ;.}../*.** Expor
2780: 74 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61  ted version of a
2790: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20  pplyAffinity(). 
27a0: 54 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f  This one works o
27b0: 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  n sqlite3_value*
27c0: 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e  , .** not the in
27d0: 74 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65  ternal Mem* type
27e0: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
27f0: 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
2800: 69 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76  ity(.  sqlite3_v
2810: 61 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75  alue *pVal, .  u
2820: 38 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75  8 affinity, .  u
2830: 38 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79  8 enc.){.  apply
2840: 41 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29  Affinity((Mem *)
2850: 70 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20  pVal, affinity, 
2860: 65 6e 63 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20  enc);.}..#ifdef 
2870: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
2880: 2a 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20  ** Write a nice 
2890: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
28a0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e  ation of the con
28b0: 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d  tents of cell pM
28c0: 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65  em.** into buffe
28d0: 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e  r zBuf, length n
28e0: 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  Buf..*/.void sql
28f0: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
2900: 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d  yPrint(Mem *pMem
2910: 2c 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20  , char *zBuf){. 
2920: 20 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42   char *zCsr = zB
2930: 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d  uf;.  int f = pM
2940: 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74  em->flags;..  st
2950: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
2960: 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b  *const encnames[
2970: 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29  ] = {"(X)", "(8)
2980: 22 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31  ", "(16LE)", "(1
2990: 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66  6BE)"};..  if( f
29a0: 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20  &MEM_Blob ){.   
29b0: 20 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72   int i;.    char
29c0: 20 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20   c;.    if( f & 
29d0: 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20  MEM_Dyn ){.     
29e0: 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20   c = 'z';.      
29f0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
2a00: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
2a10: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
2a20: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
2a30: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
2a40: 20 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20   c = 't';.      
2a50: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
2a60: 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29  M_Dyn|MEM_Ephem)
2a70: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
2a80: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70  e if( f & MEM_Ep
2a90: 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d  hem ){.      c =
2aa0: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
2ab0: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
2ac0: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
2ad0: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
2ae0: 20 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20        c = 's';. 
2af0: 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65     }..    sqlite
2b00: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
2b10: 7a 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a  zCsr, "%c", c);.
2b20: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
2b30: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
2b40: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  );.    sqlite3_s
2b50: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
2b60: 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e  r, "%d[", pMem->
2b70: 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20  n);.    zCsr += 
2b80: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
2b90: 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69  zCsr);.    for(i
2ba0: 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d  =0; i<16 && i<pM
2bb0: 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  em->n; i++){.   
2bc0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
2bd0: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22  ntf(100, zCsr, "
2be0: 25 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65  %02X", ((int)pMe
2bf0: 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29  m->z[i] & 0xFF))
2c00: 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20  ;.      zCsr += 
2c10: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
2c20: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
2c30: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26   for(i=0; i<16 &
2c40: 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b  & i<pMem->n; i++
2c50: 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20  ){.      char z 
2c60: 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20  = pMem->z[i];.  
2c70: 20 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20      if( z<32 || 
2c80: 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20  z>126 ) *zCsr++ 
2c90: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73  = '.';.      els
2ca0: 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20  e *zCsr++ = z;. 
2cb0: 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65     }..    sqlite
2cc0: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
2cd0: 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63  zCsr, "]%s", enc
2ce0: 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d  names[pMem->enc]
2cf0: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
2d00: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
2d10: 43 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20  Csr);.    if( f 
2d20: 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
2d30: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
2d40: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22  intf(100, zCsr,"
2d50: 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a  +%dz",pMem->u.nZ
2d60: 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72  ero);.      zCsr
2d70: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
2d80: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d  n30(zCsr);.    }
2d90: 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30  .    *zCsr = '\0
2da0: 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66  ';.  }else if( f
2db0: 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20   & MEM_Str ){.  
2dc0: 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20    int j, k;.    
2dd0: 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20  zBuf[0] = ' ';. 
2de0: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44     if( f & MEM_D
2df0: 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66  yn ){.      zBuf
2e00: 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20  [1] = 'z';.     
2e10: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
2e20: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70  EM_Static|MEM_Ep
2e30: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
2e40: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
2e50: 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20  M_Static ){.    
2e60: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b    zBuf[1] = 't';
2e70: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
2e80: 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d  f & (MEM_Dyn|MEM
2e90: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
2ea0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
2eb0: 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20   MEM_Ephem ){.  
2ec0: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65      zBuf[1] = 'e
2ed0: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
2ee0: 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69   (f & (MEM_Stati
2ef0: 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29  c|MEM_Dyn))==0 )
2f00: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
2f10: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27     zBuf[1] = 's'
2f20: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20  ;.    }.    k = 
2f30: 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  2;.    sqlite3_s
2f40: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42  nprintf(100, &zB
2f50: 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65  uf[k], "%d", pMe
2f60: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20  m->n);.    k += 
2f70: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
2f80: 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a  &zBuf[k]);.    z
2f90: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a  Buf[k++] = '[';.
2fa0: 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31      for(j=0; j<1
2fb0: 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20  5 && j<pMem->n; 
2fc0: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63  j++){.      u8 c
2fd0: 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20   = pMem->z[j];. 
2fe0: 20 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30       if( c>=0x20
2ff0: 20 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20   && c<0x7f ){.  
3000: 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20        zBuf[k++] 
3010: 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = c;.      }else
3020: 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b  {.        zBuf[k
3030: 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20  ++] = '.';.     
3040: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75   }.    }.    zBu
3050: 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20  f[k++] = ']';.  
3060: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3070: 74 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c  tf(100,&zBuf[k],
3080: 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e   encnames[pMem->
3090: 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20  enc]);.    k += 
30a0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
30b0: 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a  &zBuf[k]);.    z
30c0: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20  Buf[k++] = 0;.  
30d0: 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  }.}.#endif..#ifd
30e0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
30f0: 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20  /*.** Print the 
3100: 76 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73  value of a regis
3110: 74 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20  ter for tracing 
3120: 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61  purposes:.*/.sta
3130: 74 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63  tic void memTrac
3140: 65 50 72 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a  ePrint(Mem *p){.
3150: 20 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26    if( p->flags &
3160: 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29   MEM_Undefined )
3170: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 75  {.    printf(" u
3180: 6e 64 65 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65  ndefined");.  }e
3190: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
31a0: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
31b0: 20 20 20 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c     printf(" NULL
31c0: 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ");.  }else if( 
31d0: 28 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  (p->flags & (MEM
31e0: 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d  _Int|MEM_Str))==
31f0: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72  (MEM_Int|MEM_Str
3200: 29 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  ) ){.    printf(
3210: 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75  " si:%lld", p->u
3220: 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  .i);.  }else if(
3230: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
3240: 49 6e 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74  Int ){.    print
3250: 66 28 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e  f(" i:%lld", p->
3260: 75 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  u.i);.#ifndef SQ
3270: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
3280: 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65  NG_POINT.  }else
3290: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
32a0: 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20  MEM_Real ){.    
32b0: 70 72 69 6e 74 66 28 22 20 72 3a 25 67 22 2c 20  printf(" r:%g", 
32c0: 70 2d 3e 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20  p->r);.#endif.  
32d0: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61  }else if( p->fla
32e0: 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20  gs & MEM_RowSet 
32f0: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
3300: 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65  (rowset)");.  }e
3310: 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42  lse{.    char zB
3320: 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c  uf[200];.    sql
3330: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
3340: 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b  yPrint(p, zBuf);
3350: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 25 73  .    printf(" %s
3360: 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a  ", zBuf);.  }.}.
3370: 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 67 69  static void regi
3380: 73 74 65 72 54 72 61 63 65 28 69 6e 74 20 69 52  sterTrace(int iR
3390: 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 70  eg, Mem *p){.  p
33a0: 72 69 6e 74 66 28 22 52 45 47 5b 25 64 5d 20 3d  rintf("REG[%d] =
33b0: 20 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d   ", iReg);.  mem
33c0: 54 72 61 63 65 50 72 69 6e 74 28 70 29 3b 0a 20  TracePrint(p);. 
33d0: 20 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 7d   printf("\n");.}
33e0: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
33f0: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 20  SQLITE_DEBUG.#  
3400: 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f  define REGISTER_
3410: 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 64 62  TRACE(R,M) if(db
3420: 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 56  ->flags&SQLITE_V
3430: 64 62 65 54 72 61 63 65 29 72 65 67 69 73 74 65  dbeTrace)registe
3440: 72 54 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c 73  rTrace(R,M).#els
3450: 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47 49  e.#  define REGI
3460: 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 0a  STER_TRACE(R,M).
3470: 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66 20  #endif...#ifdef 
3480: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a  VDBE_PROFILE../*
3490: 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63 6f   .** hwtime.h co
34a0: 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61 73  ntains inline as
34b0: 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f 72  sembler code for
34c0: 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a   implementing .*
34d0: 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e  * high-performan
34e0: 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69 6e  ce timing routin
34f0: 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  es..*/.#include 
3500: 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e 64  "hwtime.h"..#end
3510: 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42  if..#ifndef NDEB
3520: 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75  UG./*.** This fu
3530: 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 63  nction is only c
3540: 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69  alled from withi
3550: 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20 65 78  n an assert() ex
3560: 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20  pression. It.** 
3570: 63 68 65 63 6b 73 20 74 68 61 74 20 74 68 65 20  checks that the 
3580: 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61 63  sqlite3.nTransac
3590: 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69 73  tion variable is
35a0: 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20 74   correctly set t
35b0: 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20  o.** the number 
35c0: 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69  of non-transacti
35d0: 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63 75  on savepoints cu
35e0: 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20 0a  rrently in the .
35f0: 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73  ** linked list s
3600: 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69 74  tarting at sqlit
3610: 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a 2a  e3.pSavepoint..*
3620: 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a  * .** Usage:.**.
3630: 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 63  **     assert( c
3640: 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75  heckSavepointCou
3650: 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74 61  nt(db) );.*/.sta
3660: 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61 76  tic int checkSav
3670: 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c 69  epointCount(sqli
3680: 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20  te3 *db){.  int 
3690: 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f 69  n = 0;.  Savepoi
36a0: 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d 64  nt *p;.  for(p=d
36b0: 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 70  b->pSavepoint; p
36c0: 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e 2b  ; p=p->pNext) n+
36d0: 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d  +;.  assert( n==
36e0: 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20  (db->nSavepoint 
36f0: 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  + db->isTransact
3700: 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29 3b  ionSavepoint) );
3710: 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23  .  return 1;.}.#
3720: 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78  endif.../*.** Ex
3730: 65 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66  ecute as much of
3740: 20 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20   a VDBE program 
3750: 61 73 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68  as we can..** Th
3760: 69 73 20 69 73 20 74 68 65 20 63 6f 72 65 20 6f  is is the core o
3770: 66 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  f sqlite3_step()
3780: 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  .  .*/.int sqlit
3790: 65 33 56 64 62 65 45 78 65 63 28 0a 20 20 56 64  e3VdbeExec(.  Vd
37a0: 62 65 20 2a 70 20 20 20 20 20 20 20 20 20 20 20  be *p           
37b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
37c0: 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  VDBE */.){.  int
37d0: 20 70 63 3d 30 3b 20 20 20 20 20 20 20 20 20 20   pc=0;          
37e0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70          /* The p
37f0: 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a  rogram counter *
3800: 2f 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d  /.  Op *aOp = p-
3810: 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 2f  >aOp;          /
3820: 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70  * Copy of p->aOp
3830: 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20   */.  Op *pOp;  
3840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3850: 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72   /* Current oper
3860: 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72  ation */.  int r
3870: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20  c = SQLITE_OK;  
3880: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
3890: 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71  o return */.  sq
38a0: 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64  lite3 *db = p->d
38b0: 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  b;       /* The 
38c0: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38  database */.  u8
38d0: 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
38e0: 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65  ult = 0; /* Rese
38f0: 74 20 73 63 68 65 6d 61 20 61 66 74 65 72 20 61  t schema after a
3900: 6e 20 65 72 72 6f 72 20 69 66 20 70 6f 73 69 74  n error if posit
3910: 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f  ive */.  u8 enco
3920: 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20  ding = ENC(db); 
3930: 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
3940: 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a  ase encoding */.
3950: 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d    int iCompare =
3960: 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20   0;          /* 
3970: 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20 4f  Result of last O
3980: 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74  P_Compare operat
3990: 69 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ion */.  unsigne
39a0: 64 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20 20  d nVmStep = 0;  
39b0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
39c0: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
39d0: 20 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65   steps */.#ifnde
39e0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
39f0: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
3a00: 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67    unsigned nProg
3a10: 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 3b 2f 2a  ressLimit = 0;/*
3a20: 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65 73   Invoke xProgres
3a30: 73 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65 70  s() when nVmStep
3a40: 20 72 65 61 63 68 65 73 20 74 68 69 73 20 2a 2f   reaches this */
3a50: 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61  .#endif.  Mem *a
3a60: 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20  Mem = p->aMem;  
3a70: 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
3a80: 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d  p->aMem */.  Mem
3a90: 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20   *pIn1 = 0;     
3aa0: 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69          /* 1st i
3ab0: 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  nput operand */.
3ac0: 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b    Mem *pIn2 = 0;
3ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3ae0: 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e  2nd input operan
3af0: 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33  d */.  Mem *pIn3
3b00: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
3b10: 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f    /* 3rd input o
3b20: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20  perand */.  Mem 
3b30: 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20  *pOut = 0;      
3b40: 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74         /* Output
3b50: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 6e   operand */.  in
3b60: 74 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30 3b  t *aPermute = 0;
3b70: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72 6d           /* Perm
3b80: 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d  utation of colum
3b90: 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72  ns for OP_Compar
3ba0: 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52  e */.  i64 lastR
3bb0: 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52  owid = db->lastR
3bc0: 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76 65 64 20  owid;  /* Saved 
3bd0: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 61 73  value of the las
3be0: 74 20 69 6e 73 65 72 74 20 52 4f 57 49 44 20 2a  t insert ROWID *
3bf0: 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  /.#ifdef VDBE_PR
3c00: 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61 72  OFILE.  u64 star
3c10: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
3c20: 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20     /* CPU clock 
3c30: 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20 6f  count at start o
3c40: 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e  f opcode */.  in
3c50: 74 20 6f 72 69 67 50 63 3b 20 20 20 20 20 20 20  t origPc;       
3c60: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72 6f 67           /* Prog
3c70: 72 61 6d 20 63 6f 75 6e 74 65 72 20 61 74 20 73  ram counter at s
3c80: 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a  tart of opcode *
3c90: 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20  /.#endif.  /*** 
3ca0: 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55 4e 49  INSERT STACK UNI
3cb0: 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20  ON HERE ***/..  
3cc0: 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67 69 63  assert( p->magic
3cd0: 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e  ==VDBE_MAGIC_RUN
3ce0: 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f   );  /* sqlite3_
3cf0: 73 74 65 70 28 29 20 76 65 72 69 66 69 65 73 20  step() verifies 
3d00: 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65  this */.  sqlite
3d10: 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b 0a 20  3VdbeEnter(p);. 
3d20: 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49   if( p->rc==SQLI
3d30: 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  TE_NOMEM ){.    
3d40: 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20  /* This happens 
3d50: 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e  if a malloc() in
3d60: 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f 20 73  side a call to s
3d70: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
3d80: 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73  xt() or.    ** s
3d90: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
3da0: 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e 20 20  xt16() failed.  
3db0: 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  */.    goto no_m
3dc0: 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  em;.  }.  assert
3dd0: 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
3de0: 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51 4c  OK || p->rc==SQL
3df0: 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20 61 73  ITE_BUSY );.  as
3e00: 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
3e10: 65 72 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c  er || p->readOnl
3e20: 79 21 3d 30 20 29 3b 0a 20 20 70 2d 3e 72 63 20  y!=0 );.  p->rc 
3e30: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70  = SQLITE_OK;.  p
3e40: 2d 3e 69 43 75 72 72 65 6e 74 54 69 6d 65 20 3d  ->iCurrentTime =
3e50: 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   0;.  assert( p-
3e60: 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20  >explain==0 );. 
3e70: 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d   p->pResultSet =
3e80: 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61   0;.  db->busyHa
3e90: 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b  ndler.nBusy = 0;
3ea0: 0a 20 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73  .  if( db->u1.is
3eb0: 49 6e 74 65 72 72 75 70 74 65 64 20 29 20 67 6f  Interrupted ) go
3ec0: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
3ed0: 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 73 71 6c  interrupt;.  sql
3ee0: 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53  ite3VdbeIOTraceS
3ef0: 71 6c 28 70 29 3b 0a 23 69 66 6e 64 65 66 20 53  ql(p);.#ifndef S
3f00: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
3f10: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69  ESS_CALLBACK.  i
3f20: 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  f( db->xProgress
3f30: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
3f40: 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73  0 < db->nProgres
3f50: 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e 50 72 6f  sOps );.    nPro
3f60: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 28 75 6e  gressLimit = (un
3f70: 73 69 67 6e 65 64 29 70 2d 3e 61 43 6f 75 6e 74  signed)p->aCount
3f80: 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  er[SQLITE_STMTST
3f90: 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 3b 0a 20  ATUS_VM_STEP];. 
3fa0: 20 20 20 69 66 28 20 6e 50 72 6f 67 72 65 73 73     if( nProgress
3fb0: 4c 69 6d 69 74 3d 3d 30 20 29 7b 0a 20 20 20 20  Limit==0 ){.    
3fc0: 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74    nProgressLimit
3fd0: 20 3d 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73   = db->nProgress
3fe0: 4f 70 73 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  Ops;.    }else{.
3ff0: 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c        nProgressL
4000: 69 6d 69 74 20 25 3d 20 28 75 6e 73 69 67 6e 65  imit %= (unsigne
4010: 64 29 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  d)db->nProgressO
4020: 70 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  ps;.    }.  }.#e
4030: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
4040: 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74  TE_DEBUG.  sqlit
4050: 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
4060: 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e  loc();.  if( p->
4070: 70 63 3d 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e  pc==0.   && (p->
4080: 64 62 2d 3e 66 6c 61 67 73 20 26 20 28 53 51 4c  db->flags & (SQL
4090: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c  ITE_VdbeListing|
40a0: 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 7c 53  SQLITE_VdbeEQP|S
40b0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 29  QLITE_VdbeTrace)
40c0: 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e  )!=0.  ){.    in
40d0: 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63  t i;.    int onc
40e0: 65 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74  e = 1;.    sqlit
40f0: 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70  e3VdbePrintSql(p
4100: 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62  );.    if( p->db
4110: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
4120: 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a  _VdbeListing ){.
4130: 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 56 44        printf("VD
4140: 42 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69  BE Program Listi
4150: 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66  ng:\n");.      f
4160: 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70  or(i=0; i<p->nOp
4170: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
4180: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
4190: 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 61  Op(stdout, i, &a
41a0: 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  Op[i]);.      }.
41b0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d      }.    if( p-
41c0: 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  >db->flags & SQL
41d0: 49 54 45 5f 56 64 62 65 45 51 50 20 29 7b 0a 20  ITE_VdbeEQP ){. 
41e0: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
41f0: 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20  p->nOp; i++){.  
4200: 20 20 20 20 20 20 69 66 28 20 61 4f 70 5b 69 5d        if( aOp[i]
4210: 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c  .opcode==OP_Expl
4220: 61 69 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ain ){.         
4230: 20 69 66 28 20 6f 6e 63 65 20 29 20 70 72 69 6e   if( once ) prin
4240: 74 66 28 22 56 44 42 45 20 51 75 65 72 79 20 50  tf("VDBE Query P
4250: 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20  lan:\n");.      
4260: 20 20 20 20 70 72 69 6e 74 66 28 22 25 73 5c 6e      printf("%s\n
4270: 22 2c 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b  ", aOp[i].p4.z);
4280: 0a 20 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20  .          once 
4290: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  = 0;.        }. 
42a0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
42b0: 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67   if( p->db->flag
42c0: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54  s & SQLITE_VdbeT
42d0: 72 61 63 65 20 29 20 20 70 72 69 6e 74 66 28 22  race )  printf("
42e0: 56 44 42 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b  VDBE Trace:\n");
42f0: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e  .  }.  sqlite3En
4300: 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  dBenignMalloc();
4310: 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 63  .#endif.  for(pc
4320: 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d 53 51 4c 49  =p->pc; rc==SQLI
4330: 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20 20  TE_OK; pc++){.  
4340: 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d 30 20    assert( pc>=0 
4350: 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  && pc<p->nOp );.
4360: 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c      if( db->mall
4370: 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20  ocFailed ) goto 
4380: 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66 20 56  no_mem;.#ifdef V
4390: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20  DBE_PROFILE.    
43a0: 6f 72 69 67 50 63 20 3d 20 70 63 3b 0a 20 20 20  origPc = pc;.   
43b0: 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33   start = sqlite3
43c0: 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66  Hwtime();.#endif
43d0: 0a 20 20 20 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a  .    nVmStep++;.
43e0: 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70      pOp = &aOp[p
43f0: 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79  c];..    /* Only
4400: 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20 69   allow tracing i
4410: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69  f SQLITE_DEBUG i
4420: 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a  s defined..    *
4430: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4440: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 64 62  DEBUG.    if( db
4450: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
4460: 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a 20 20  _VdbeTrace ){.  
4470: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
4480: 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 70  rintOp(stdout, p
4490: 63 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23  c, pOp);.    }.#
44a0: 65 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a 20 20  endif.      ..  
44b0: 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73 65    /* Check to se
44c0: 65 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f 20  e if we need to 
44d0: 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74 65  simulate an inte
44e0: 72 72 75 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c  rrupt.  This onl
44f0: 79 20 68 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a  y happens.    **
4500: 20 69 66 20 77 65 20 68 61 76 65 20 61 20 73 70   if we have a sp
4510: 65 63 69 61 6c 20 74 65 73 74 20 62 75 69 6c 64  ecial test build
4520: 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20  ..    */.#ifdef 
4530: 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
4540: 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  if( sqlite3_inte
4550: 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b  rrupt_count>0 ){
4560: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69  .      sqlite3_i
4570: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d  nterrupt_count--
4580: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ;.      if( sqli
4590: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
45a0: 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  unt==0 ){.      
45b0: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
45c0: 75 70 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  upt(db);.      }
45d0: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  .    }.#endif.. 
45e0: 20 20 20 2f 2a 20 4f 6e 20 61 6e 79 20 6f 70 63     /* On any opc
45f0: 6f 64 65 20 77 69 74 68 20 74 68 65 20 22 6f 75  ode with the "ou
4600: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 22 20 74  t2-prerelease" t
4610: 61 67 2c 20 66 72 65 65 20 61 6e 79 0a 20 20 20  ag, free any.   
4620: 20 2a 2a 20 65 78 74 65 72 6e 61 6c 20 61 6c 6c   ** external all
4630: 6f 63 61 74 69 6f 6e 73 20 6f 75 74 20 6f 66 20  ocations out of 
4640: 6d 65 6d 5b 70 32 5d 20 61 6e 64 20 73 65 74 20  mem[p2] and set 
4650: 6d 65 6d 5b 70 32 5d 20 74 6f 20 62 65 0a 20 20  mem[p2] to be.  
4660: 20 20 2a 2a 20 61 6e 20 75 6e 64 65 66 69 6e 65    ** an undefine
4670: 64 20 69 6e 74 65 67 65 72 2e 20 20 4f 70 63 6f  d integer.  Opco
4680: 64 65 73 20 77 69 6c 6c 20 65 69 74 68 65 72 20  des will either 
4690: 66 69 6c 6c 20 69 6e 20 74 68 65 20 69 6e 74 65  fill in the inte
46a0: 67 65 72 0a 20 20 20 20 2a 2a 20 76 61 6c 75 65  ger.    ** value
46b0: 20 6f 72 20 63 6f 6e 76 65 72 74 20 6d 65 6d 5b   or convert mem[
46c0: 70 32 5d 20 74 6f 20 61 20 64 69 66 66 65 72 65  p2] to a differe
46d0: 6e 74 20 74 79 70 65 2e 0a 20 20 20 20 2a 2f 0a  nt type..    */.
46e0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
46f0: 3e 6f 70 66 6c 61 67 73 3d 3d 73 71 6c 69 74 65  >opflags==sqlite
4700: 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b  3OpcodeProperty[
4710: 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 20 29 3b 0a  pOp->opcode] );.
4720: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66      if( pOp->opf
4730: 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54  lags & OPFLG_OUT
4740: 32 5f 50 52 45 52 45 4c 45 41 53 45 20 29 7b 0a  2_PRERELEASE ){.
4750: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
4760: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20  p->p2>0 );.     
4770: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
4780: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
4790: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
47a0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
47b0: 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 6d 65 6d  ->p2];.      mem
47c0: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
47d0: 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 56 64   pOut);.      Vd
47e0: 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 4f 75  beMemRelease(pOu
47f0: 74 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e  t);.      pOut->
4800: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
4810: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 53  .    }..    /* S
4820: 61 6e 69 74 79 20 63 68 65 63 6b 69 6e 67 20 6f  anity checking o
4830: 6e 20 6f 74 68 65 72 20 6f 70 65 72 61 6e 64 73  n other operands
4840: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
4850: 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
4860: 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  (pOp->opflags & 
4870: 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b  OPFLG_IN1)!=0 ){
4880: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
4890: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20  Op->p1>0 );.    
48a0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
48b0: 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  1<=(p->nMem-p->n
48c0: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
48d0: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
48e0: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
48f0: 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47  1]) );.      REG
4900: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
4910: 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p1, &aMem[pOp->
4920: 70 31 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p1]);.    }.    
4930: 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67  if( (pOp->opflag
4940: 73 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d  s & OPFLG_IN2)!=
4950: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
4960: 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
4970: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
4980: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p2<=(p->nMem-
4990: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
49a0: 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
49b0: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
49c0: 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20  p->p2]) );.     
49d0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
49e0: 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70  pOp->p2, &aMem[p
49f0: 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a  Op->p2]);.    }.
4a00: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
4a10: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e  flags & OPFLG_IN
4a20: 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  3)!=0 ){.      a
4a30: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
4a40: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
4a50: 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
4a60: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
4a70: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
4a80: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
4a90: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20  m[pOp->p3]) );. 
4aa0: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
4ab0: 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d  ACE(pOp->p3, &aM
4ac0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20  em[pOp->p3]);.  
4ad0: 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70    }.    if( (pOp
4ae0: 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ->opflags & OPFL
4af0: 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20 20  G_OUT2)!=0 ){.  
4b00: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
4b10: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p2>0 );.      a
4b20: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
4b30: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
4b40: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d 65  sor) );.      me
4b50: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
4b60: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  , &aMem[pOp->p2]
4b70: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
4b80: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
4b90: 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20   OPFLG_OUT3)!=0 
4ba0: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
4bb0: 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
4bc0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
4bd0: 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
4be0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
4bf0: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
4c00: 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
4c10: 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 23 65  ->p3]);.    }.#e
4c20: 6e 64 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74  ndif.  .    swit
4c30: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
4c40: 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ){../***********
4c50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4c60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4c70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4c80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4c90: 2a 2a 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f  **.** What follo
4ca0: 77 73 20 69 73 20 61 20 6d 61 73 73 69 76 65 20  ws is a massive 
4cb0: 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
4cc0: 20 77 68 65 72 65 20 65 61 63 68 20 63 61 73 65   where each case
4cd0: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a   implements a.**
4ce0: 20 73 65 70 61 72 61 74 65 20 69 6e 73 74 72 75   separate instru
4cf0: 63 74 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72  ction in the vir
4d00: 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49  tual machine.  I
4d10: 66 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20  f we follow the 
4d20: 75 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61  usual.** indenta
4d30: 74 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73  tion conventions
4d40: 2c 20 65 61 63 68 20 63 61 73 65 20 73 68 6f 75  , each case shou
4d50: 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62  ld be indented b
4d60: 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74  y 6 spaces.  But
4d70: 0a 2a 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f  .** that is a lo
4d80: 74 20 6f 66 20 77 61 73 74 65 64 20 73 70 61 63  t of wasted spac
4d90: 65 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61  e on the left ma
4da0: 72 67 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f  rgin.  So the co
4db0: 64 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65  de within.** the
4dc0: 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
4dd0: 74 20 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74  t will break wit
4de0: 68 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64  h convention and
4df0: 20 62 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20   be flush-left. 
4e00: 41 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63  Another.** big c
4e10: 6f 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20  omment (similar 
4e20: 74 6f 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c  to this one) wil
4e30: 6c 20 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74  l mark the point
4e40: 20 69 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65   in the code whe
4e50: 72 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74  re.** we transit
4e60: 69 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d  ion back to norm
4e70: 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a  al indentation..
4e80: 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74  **.** The format
4e90: 74 69 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73  ting of each cas
4ea0: 65 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20  e is important. 
4eb0: 20 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f   The makefile fo
4ec0: 72 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65  r SQLite.** gene
4ed0: 72 61 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65  rates two C file
4ee0: 73 20 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e  s "opcodes.h" an
4ef0: 64 20 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79  d "opcodes.c" by
4f00: 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a   scanning this.*
4f10: 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66  * file looking f
4f20: 6f 72 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65  or lines that be
4f30: 67 69 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f  gin with "case O
4f40: 50 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65  P_".  The opcode
4f50: 73 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c  s.h files.** wil
4f60: 6c 20 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68  l be filled with
4f70: 20 23 64 65 66 69 6e 65 73 20 74 68 61 74 20 67   #defines that g
4f80: 69 76 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67  ive unique integ
4f90: 65 72 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63  er values to eac
4fa0: 68 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20  h.** opcode and 
4fb0: 74 68 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69  the opcodes.c fi
4fc0: 6c 65 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74  le is filled wit
4fd0: 68 20 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74  h an array of st
4fe0: 72 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65  rings where.** e
4ff0: 61 63 68 20 73 74 72 69 6e 67 20 69 73 20 74 68  ach string is th
5000: 65 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20  e symbolic name 
5010: 66 6f 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f  for the correspo
5020: 6e 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49  nding opcode.  I
5030: 66 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74  f the.** case st
5040: 61 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f  atement is follo
5050: 77 65 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74  wed by a comment
5060: 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23   of the form "/#
5070: 20 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22   same as ... #/"
5080: 0a 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74  .** that comment
5090: 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
50a0: 72 6d 69 6e 65 20 74 68 65 20 70 61 72 74 69 63  rmine the partic
50b0: 75 6c 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68  ular value of th
50c0: 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  e opcode..**.** 
50d0: 4f 74 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69  Other keywords i
50e0: 6e 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68  n the comment th
50f0: 61 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20  at follows each 
5100: 63 61 73 65 20 61 72 65 20 75 73 65 64 20 74 6f  case are used to
5110: 0a 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68  .** construct th
5120: 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49  e OPFLG_INITIALI
5130: 5a 45 52 20 76 61 6c 75 65 20 74 68 61 74 20 69  ZER value that i
5140: 6e 69 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64  nitializes opcod
5150: 65 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20  eProperty[]..** 
5160: 4b 65 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65  Keywords include
5170: 3a 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c  : in1, in2, in3,
5180: 20 6f 75 74 32 5f 70 72 65 72 65 6c 65 61 73 65   out2_prerelease
5190: 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53  , out2, out3.  S
51a0: 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f  ee.** the mkopco
51b0: 64 65 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66  deh.awk script f
51c0: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
51d0: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  formation..**.**
51e0: 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61   Documentation a
51f0: 62 6f 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65  bout VDBE opcode
5200: 73 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 62  s is generated b
5210: 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20  y scanning this 
5220: 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65  file.** for line
5230: 73 20 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69  s of that contai
5240: 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68  n "Opcode:".  Th
5250: 61 74 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20  at line and all 
5260: 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f  subsequent.** co
5270: 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20  mment lines are 
5280: 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65  used in the gene
5290: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70  ration of the op
52a0: 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65  code.html docume
52b0: 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e  ntation.** file.
52c0: 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a  .**.** SUMMARY:.
52d0: 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74  **.**     Format
52e0: 74 69 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e  ting is importan
52f0: 74 20 74 6f 20 73 63 72 69 70 74 73 20 74 68 61  t to scripts tha
5300: 74 20 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65  t scan this file
5310: 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20  ..**     Do not 
5320: 64 65 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65  deviate from the
5330: 20 66 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c   formatting styl
5340: 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75  e currently in u
5350: 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a  se..**.*********
5360: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5370: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5380: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5390: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
53a0: 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ****/../* Opcode
53b0: 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a  :  Goto * P2 * *
53c0: 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f   *.**.** An unco
53d0: 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74  nditional jump t
53e0: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a  o address P2..**
53f0: 20 54 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   The next instru
5400: 63 74 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77  ction executed w
5410: 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f  ill be .** the o
5420: 6e 65 20 61 74 20 69 6e 64 65 78 20 50 32 20 66  ne at index P2 f
5430: 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
5440: 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67  g of.** the prog
5450: 72 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ram..*/.case OP_
5460: 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20  Goto: {         
5470: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
5480: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
5490: 31 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73  1;..  /* Opcodes
54a0: 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
54b0: 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20  s the bottom of 
54c0: 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c  a loop (OP_Next,
54d0: 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f   OP_Prev,.  ** O
54e0: 50 5f 56 4e 65 78 74 2c 20 4f 50 5f 52 6f 77 53  P_VNext, OP_RowS
54f0: 65 74 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f  etNext, or OP_So
5500: 72 74 65 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75  rterNext) all ju
5510: 6d 70 20 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a  mp here upon.  *
5520: 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43  * completion.  C
5530: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 73  heck to see if s
5540: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
5550: 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  () has been call
5560: 65 64 0a 20 20 2a 2a 20 6f 72 20 69 66 20 74 68  ed.  ** or if th
5570: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
5580: 61 63 6b 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ack needs to be 
5590: 69 6e 76 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20  invoked. .  **. 
55a0: 20 2a 2a 20 54 68 69 73 20 63 6f 64 65 20 75 73   ** This code us
55b0: 65 73 20 75 6e 73 74 72 75 63 74 75 72 65 64 20  es unstructured 
55c0: 22 67 6f 74 6f 22 20 73 74 61 74 65 6d 65 6e 74  "goto" statement
55d0: 73 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c  s and does not l
55e0: 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20  ook clean..  ** 
55f0: 42 75 74 20 74 68 61 74 20 69 73 20 6e 6f 74 20  But that is not 
5600: 64 75 65 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f  due to sloppy co
5610: 64 69 6e 67 20 68 61 62 69 74 73 2e 20 54 68 65  ding habits. The
5620: 20 63 6f 64 65 20 69 73 20 77 72 69 74 74 65 6e   code is written
5630: 20 74 68 69 73 0a 20 20 2a 2a 20 77 61 79 20 66   this.  ** way f
5640: 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20  or performance, 
5650: 74 6f 20 61 76 6f 69 64 20 68 61 76 69 6e 67 20  to avoid having 
5660: 74 6f 20 72 75 6e 20 74 68 65 20 69 6e 74 65 72  to run the inter
5670: 72 75 70 74 20 61 6e 64 20 70 72 6f 67 72 65 73  rupt and progres
5680: 73 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e  s.  ** checks on
5690: 20 65 76 65 72 79 20 6f 70 63 6f 64 65 2e 20 20   every opcode.  
56a0: 54 68 69 73 20 68 65 6c 70 73 20 73 71 6c 69 74  This helps sqlit
56b0: 65 33 5f 73 74 65 70 28 29 20 74 6f 20 72 75 6e  e3_step() to run
56c0: 20 61 62 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a   about 1.5%.  **
56d0: 20 66 61 73 74 65 72 20 61 63 63 6f 72 64 69 6e   faster accordin
56e0: 67 20 74 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d  g to "valgrind -
56f0: 2d 74 6f 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64  -tool=cachegrind
5700: 22 20 2a 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69  " */.check_for_i
5710: 6e 74 65 72 72 75 70 74 3a 0a 20 20 69 66 28 20  nterrupt:.  if( 
5720: 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
5730: 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72  pted ) goto abor
5740: 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75  t_due_to_interru
5750: 70 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  pt;.#ifndef SQLI
5760: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
5770: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 43  _CALLBACK.  /* C
5780: 61 6c 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73  all the progress
5790: 20 63 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20   callback if it 
57a0: 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e  is configured an
57b0: 64 20 74 68 65 20 72 65 71 75 69 72 65 64 20 6e  d the required n
57c0: 75 6d 62 65 72 0a 20 20 2a 2a 20 6f 66 20 56 44  umber.  ** of VD
57d0: 42 45 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e  BE ops have been
57e0: 20 65 78 65 63 75 74 65 64 20 28 65 69 74 68 65   executed (eithe
57f0: 72 20 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76  r since this inv
5800: 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20  ocation of.  ** 
5810: 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63 28  sqlite3VdbeExec(
5820: 29 20 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20  ) or since last 
5830: 74 69 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73  time the progres
5840: 73 20 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63  s callback was c
5850: 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a 20 49 66 20  alled)..  ** If 
5860: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
5870: 6c 62 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f  lback returns no
5880: 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65  n-zero, exit the
5890: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
58a0: 20 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 74   with.  ** a ret
58b0: 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f  urn code SQLITE_
58c0: 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20 69 66  ABORT..  */.  if
58d0: 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21  ( db->xProgress!
58e0: 3d 30 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e  =0 && nVmStep>=n
58f0: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 29 7b  ProgressLimit ){
5900: 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
5910: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 21 3d 30  >nProgressOps!=0
5920: 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73   );.    nProgres
5930: 73 4c 69 6d 69 74 20 3d 20 6e 56 6d 53 74 65 70  sLimit = nVmStep
5940: 20 2b 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73   + db->nProgress
5950: 4f 70 73 20 2d 20 28 6e 56 6d 53 74 65 70 25 64  Ops - (nVmStep%d
5960: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29  b->nProgressOps)
5970: 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50  ;.    if( db->xP
5980: 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f  rogress(db->pPro
5990: 67 72 65 73 73 41 72 67 29 20 29 7b 0a 20 20 20  gressArg) ){.   
59a0: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49     rc = SQLITE_I
59b0: 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20  NTERRUPT;.      
59c0: 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
59d0: 68 61 6c 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  halt;.    }.  }.
59e0: 23 65 6e 64 69 66 0a 20 20 0a 20 20 62 72 65 61  #endif.  .  brea
59f0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
5a00: 20 20 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20    Gosub P1 P2 * 
5a10: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
5a20: 74 68 65 20 63 75 72 72 65 6e 74 20 61 64 64 72  the current addr
5a30: 65 73 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65  ess onto registe
5a40: 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e  r P1.** and then
5a50: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
5a60: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
5a70: 47 6f 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20  Gosub: {        
5a80: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
5a90: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
5aa0: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28  >0 && pOp->p1<=(
5ab0: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
5ac0: 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  or) );.  pIn1 = 
5ad0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
5ae0: 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d    assert( (pIn1-
5af0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e  >flags & MEM_Dyn
5b00: 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f  )==0 );.  memAbo
5b10: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
5b20: 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  n1);.  pIn1->fla
5b30: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
5b40: 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a  pIn1->u.i = pc;.
5b50: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
5b60: 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b  (pOp->p1, pIn1);
5b70: 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20  .  pc = pOp->p2 
5b80: 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  - 1;.  break;.}.
5b90: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65 74  ./* Opcode:  Ret
5ba0: 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  urn P1 * * * *.*
5bb0: 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65  *.** Jump to the
5bc0: 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
5bd0: 6e 20 61 66 74 65 72 20 74 68 65 20 61 64 64 72  n after the addr
5be0: 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ess in register 
5bf0: 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P1..*/.case OP_R
5c00: 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20  eturn: {        
5c10: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70     /* in1 */.  p
5c20: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
5c30: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
5c40: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
5c50: 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 63 20 3d 20  M_Int );.  pc = 
5c60: 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a  (int)pIn1->u.i;.
5c70: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
5c80: 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20 50 31  pcode:  Yield P1
5c90: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53   * * * *.**.** S
5ca0: 77 61 70 20 74 68 65 20 70 72 6f 67 72 61 6d 20  wap the program 
5cb0: 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74 68 65  counter with the
5cc0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
5cd0: 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P1..*/.case O
5ce0: 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20 20 20  P_Yield: {      
5cf0: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
5d00: 20 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20    int pcDest;.  
5d10: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
5d20: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
5d30: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
5d40: 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20  MEM_Dyn)==0 );. 
5d50: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
5d60: 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73 74  EM_Int;.  pcDest
5d70: 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e   = (int)pIn1->u.
5d80: 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d  i;.  pIn1->u.i =
5d90: 20 70 63 3b 0a 20 20 52 45 47 49 53 54 45 52 5f   pc;.  REGISTER_
5da0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70  TRACE(pOp->p1, p
5db0: 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70 63 44  In1);.  pc = pcD
5dc0: 65 73 74 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  est;.  break;.}.
5dd0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c  ./* Opcode:  Hal
5de0: 74 49 66 4e 75 6c 6c 20 20 50 31 20 50 32 20 50  tIfNull  P1 P2 P
5df0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
5e00: 73 69 73 3a 20 20 69 66 20 72 5b 50 33 5d 3d 6e  sis:  if r[P3]=n
5e10: 75 6c 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43  ull halt.**.** C
5e20: 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69  heck the value i
5e30: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20  n register P3.  
5e40: 49 66 20 69 74 20 69 73 20 4e 55 4c 4c 20 74 68  If it is NULL th
5e50: 65 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a  en Halt using.**
5e60: 20 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50   parameter P1, P
5e70: 32 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66 20  2, and P4 as if 
5e80: 74 68 69 73 20 77 65 72 65 20 61 20 48 61 6c 74  this were a Halt
5e90: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49   instruction.  I
5ea0: 66 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  f the.** value i
5eb0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
5ec0: 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   not NULL, then 
5ed0: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  this routine is 
5ee0: 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20  a no-op..** The 
5ef0: 50 35 20 70 61 72 61 6d 65 74 65 72 20 73 68 6f  P5 parameter sho
5f00: 75 6c 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61 73  uld be 1..*/.cas
5f10: 65 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a  e OP_HaltIfNull:
5f20: 20 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a   {      /* in3 *
5f30: 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  /.  pIn3 = &aMem
5f40: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
5f50: 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
5f60: 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62  MEM_Null)==0 ) b
5f70: 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  reak;.  /* Fall 
5f80: 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
5f90: 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70  Halt */.}../* Op
5fa0: 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50  code:  Halt P1 P
5fb0: 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20  2 * P4 P5.**.** 
5fc0: 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79  Exit immediately
5fd0: 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73  .  All open curs
5fe0: 6f 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f  ors, etc are clo
5ff0: 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63  sed.** automatic
6000: 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  ally..**.** P1 i
6010: 73 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64  s the result cod
6020: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
6030: 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71  lite3_exec(), sq
6040: 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a  lite3_reset(),.*
6050: 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e  * or sqlite3_fin
6060: 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20  alize().  For a 
6070: 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69  normal halt, thi
6080: 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49  s should be SQLI
6090: 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f  TE_OK (0)..** Fo
60a0: 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e  r errors, it can
60b0: 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76   be some other v
60c0: 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20  alue.  If P1!=0 
60d0: 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74  then P2 will det
60e0: 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65  ermine.** whethe
60f0: 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c  r or not to roll
6100: 62 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74  back the current
6110: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44   transaction.  D
6120: 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a  o not rollback.*
6130: 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c  * if P2==OE_Fail
6140: 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63  . Do the rollbac
6150: 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c  k if P2==OE_Roll
6160: 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45  back.  If P2==OE
6170: 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20  _Abort,.** then 
6180: 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61  back out all cha
6190: 6e 67 65 73 20 74 68 61 74 20 68 61 76 65 20 6f  nges that have o
61a0: 63 63 75 72 72 65 64 20 64 75 72 69 6e 67 20 74  ccurred during t
61b0: 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66  his execution of
61c0: 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75   the.** VDBE, bu
61d0: 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63  t do not rollbac
61e0: 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  k the transactio
61f0: 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  n. .**.** If P4 
6200: 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e  is not null then
6210: 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   it is an error 
6220: 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a  message string..
6230: 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20 76 61  **.** P5 is a va
6240: 6c 75 65 20 62 65 74 77 65 65 6e 20 30 20 61 6e  lue between 0 an
6250: 64 20 34 2c 20 69 6e 63 6c 75 73 69 76 65 2c 20  d 4, inclusive, 
6260: 74 68 61 74 20 6d 6f 64 69 66 69 65 73 20 74 68  that modifies th
6270: 65 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a  e P4 string..**.
6280: 2a 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20 63 68  **    0:  (no ch
6290: 61 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a 20 20  ange).**    1:  
62a0: 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72 61 69  NOT NULL contrai
62b0: 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a  nt failed: P4.**
62c0: 20 20 20 20 32 3a 20 20 55 4e 49 51 55 45 20 63      2:  UNIQUE c
62d0: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
62e0: 3a 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20 20 43  : P4.**    3:  C
62f0: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
6300: 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20  failed: P4.**   
6310: 20 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b 45 59   4:  FOREIGN KEY
6320: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
6330: 65 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66 20  ed: P4.**.** If 
6340: 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61  P5 is not zero a
6350: 6e 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c 20 74  nd P4 is NULL, t
6360: 68 65 6e 20 65 76 65 72 79 74 68 69 6e 67 20 61  hen everything a
6370: 66 74 65 72 20 74 68 65 20 22 3a 22 20 69 73 0a  fter the ":" is.
6380: 2a 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a 2a  ** omitted..**.*
6390: 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d  * There is an im
63a0: 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30 20  plied "Halt 0 0 
63b0: 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  0" instruction i
63c0: 6e 73 65 72 74 65 64 20 61 74 20 74 68 65 20 76  nserted at the v
63d0: 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76  ery end of.** ev
63e0: 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f  ery program.  So
63f0: 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68 65   a jump past the
6400: 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69 6f   last instructio
6410: 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d  n of the program
6420: 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65 20  .** is the same 
6430: 61 73 20 65 78 65 63 75 74 69 6e 67 20 48 61 6c  as executing Hal
6440: 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61  t..*/.case OP_Ha
6450: 6c 74 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  lt: {.  const ch
6460: 61 72 20 2a 7a 54 79 70 65 3b 0a 20 20 63 6f 6e  ar *zType;.  con
6470: 73 74 20 63 68 61 72 20 2a 7a 4c 6f 67 46 6d 74  st char *zLogFmt
6480: 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  ;..  if( pOp->p1
6490: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70  ==SQLITE_OK && p
64a0: 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20  ->pFrame ){.    
64b0: 2f 2a 20 48 61 6c 74 20 74 68 65 20 73 75 62 2d  /* Halt the sub-
64c0: 70 72 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e 20  program. Return 
64d0: 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 70  control to the p
64e0: 61 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a  arent frame. */.
64f0: 20 20 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70      VdbeFrame *p
6500: 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d  Frame = p->pFram
6510: 65 3b 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65  e;.    p->pFrame
6520: 20 3d 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65   = pFrame->pPare
6530: 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d  nt;.    p->nFram
6540: 65 2d 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  e--;.    sqlite3
6550: 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 64  VdbeSetChanges(d
6560: 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a  b, p->nChange);.
6570: 20 20 20 20 70 63 20 3d 20 73 71 6c 69 74 65 33      pc = sqlite3
6580: 56 64 62 65 46 72 61 6d 65 52 65 73 74 6f 72 65  VdbeFrameRestore
6590: 28 70 46 72 61 6d 65 29 3b 0a 20 20 20 20 6c 61  (pFrame);.    la
65a0: 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61  stRowid = db->la
65b0: 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 69 66 28  stRowid;.    if(
65c0: 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e   pOp->p2==OE_Ign
65d0: 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ore ){.      /* 
65e0: 49 6e 73 74 72 75 63 74 69 6f 6e 20 70 63 20 69  Instruction pc i
65f0: 73 20 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d  s the OP_Program
6600: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
6610: 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20  e sub-program . 
6620: 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c       ** currentl
6630: 79 20 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20  y being halted. 
6640: 49 66 20 74 68 65 20 70 32 20 69 6e 73 74 72 75  If the p2 instru
6650: 63 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50  ction of this OP
6660: 5f 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69  _Halt.      ** i
6670: 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65  nstruction is se
6680: 74 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  t to OE_Ignore, 
6690: 74 68 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f  then the sub-pro
66a0: 67 72 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67  gram is throwing
66b0: 0a 20 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e  .      ** an IGN
66c0: 4f 52 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49  ORE exception. I
66d0: 6e 20 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70  n this case jump
66e0: 20 74 6f 20 74 68 65 20 61 64 64 72 65 73 73 20   to the address 
66f0: 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20  specified.      
6700: 2a 2a 20 61 73 20 74 68 65 20 70 32 20 6f 66 20  ** as the p2 of 
6710: 74 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50  the calling OP_P
6720: 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20  rogram.  */.    
6730: 20 20 70 63 20 3d 20 70 2d 3e 61 4f 70 5b 70 63    pc = p->aOp[pc
6740: 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20  ].p2-1;.    }.  
6750: 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a    aOp = p->aOp;.
6760: 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d      aMem = p->aM
6770: 65 6d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  em;.    break;. 
6780: 20 7d 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70   }.  p->rc = pOp
6790: 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72  ->p1;.  p->error
67a0: 41 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70  Action = (u8)pOp
67b0: 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20  ->p2;.  p->pc = 
67c0: 70 63 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 20  pc;.  if( p->rc 
67d0: 29 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  ){.    if( pOp->
67e0: 70 35 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74  p5 ){.      stat
67f0: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20  ic const char * 
6800: 63 6f 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20 3d  const azType[] =
6810: 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22   { "NOT NULL", "
6820: 55 4e 49 51 55 45 22 2c 20 22 43 48 45 43 4b 22  UNIQUE", "CHECK"
6830: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
6840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
6860: 46 4f 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b 0a  FOREIGN KEY" };.
6870: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
6880: 70 2d 3e 70 35 3e 3d 31 20 26 26 20 70 4f 70 2d  p->p5>=1 && pOp-
6890: 3e 70 35 3c 3d 34 20 29 3b 0a 20 20 20 20 20 20  >p5<=4 );.      
68a0: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
68b0: 35 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 74 65  5==1 );.      te
68c0: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
68d0: 3d 32 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  =2 );.      test
68e0: 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 33  case( pOp->p5==3
68f0: 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
6900: 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 34 20 29  se( pOp->p5==4 )
6910: 3b 0a 20 20 20 20 20 20 7a 54 79 70 65 20 3d 20  ;.      zType = 
6920: 61 7a 54 79 70 65 5b 70 4f 70 2d 3e 70 35 2d 31  azType[pOp->p5-1
6930: 5d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  ];.    }else{.  
6940: 20 20 20 20 7a 54 79 70 65 20 3d 20 30 3b 0a 20      zType = 0;. 
6950: 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28     }.    assert(
6960: 20 7a 54 79 70 65 21 3d 30 20 7c 7c 20 70 4f 70   zType!=0 || pOp
6970: 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 20  ->p4.z!=0 );.   
6980: 20 7a 4c 6f 67 46 6d 74 20 3d 20 22 61 62 6f 72   zLogFmt = "abor
6990: 74 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a  t at %d in [%s]:
69a0: 20 25 73 22 3b 0a 20 20 20 20 69 66 28 20 7a 54   %s";.    if( zT
69b0: 79 70 65 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a  ype && pOp->p4.z
69c0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
69d0: 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
69e0: 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 20  ErrMsg, db, "%s 
69f0: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
6a00: 64 3a 20 25 73 22 2c 20 0a 20 20 20 20 20 20 20  d: %s", .       
6a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a20: 7a 54 79 70 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a  zType, pOp->p4.z
6a30: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
6a40: 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20   pOp->p4.z ){.  
6a50: 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
6a60: 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
6a70: 2c 20 64 62 2c 20 22 25 73 22 2c 20 70 4f 70 2d  , db, "%s", pOp-
6a80: 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 65 6c 73  >p4.z);.    }els
6a90: 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e{.      sqlite3
6aa0: 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
6ab0: 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 20 63  rrMsg, db, "%s c
6ac0: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
6ad0: 22 2c 20 7a 54 79 70 65 29 3b 0a 20 20 20 20 7d  ", zType);.    }
6ae0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67  .    sqlite3_log
6af0: 28 70 4f 70 2d 3e 70 31 2c 20 7a 4c 6f 67 46 6d  (pOp->p1, zLogFm
6b00: 74 2c 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20  t, pc, p->zSql, 
6b10: 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d  p->zErrMsg);.  }
6b20: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
6b30: 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73  dbeHalt(p);.  as
6b40: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
6b50: 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c  _BUSY || rc==SQL
6b60: 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51  ITE_OK || rc==SQ
6b70: 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20  LITE_ERROR );.  
6b80: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  if( rc==SQLITE_B
6b90: 55 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63  USY ){.    p->rc
6ba0: 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
6bb0: 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  USY;.  }else{.  
6bc0: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
6bd0: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72  LITE_OK || (p->r
6be0: 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f  c&0xff)==SQLITE_
6bf0: 43 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20  CONSTRAINT );.  
6c00: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
6c10: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e  LITE_OK || db->n
6c20: 44 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 7c  DeferredCons>0 |
6c30: 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  | db->nDeferredI
6c40: 6d 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20  mmCons>0 );.    
6c50: 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c  rc = p->rc ? SQL
6c60: 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49  ITE_ERROR : SQLI
6c70: 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67  TE_DONE;.  }.  g
6c80: 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
6c90: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
6ca0: 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a  nteger P1 P2 * *
6cb0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
6cc0: 72 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54  r[P2]=P1.**.** T
6cd0: 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65  he 32-bit intege
6ce0: 72 20 76 61 6c 75 65 20 50 31 20 69 73 20 77 72  r value P1 is wr
6cf0: 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73  itten into regis
6d00: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
6d10: 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20  OP_Integer: {   
6d20: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
6d30: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f  erelease */.  pO
6d40: 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70  ut->u.i = pOp->p
6d50: 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  1;.  break;.}../
6d60: 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20  * Opcode: Int64 
6d70: 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  * P2 * P4 *.** S
6d80: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50  ynopsis: r[P2]=P
6d90: 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  4.**.** P4 is a 
6da0: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d  pointer to a 64-
6db0: 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75  bit integer valu
6dc0: 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74  e..** Write that
6dd0: 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69   value into regi
6de0: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
6df0: 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20   OP_Int64: {    
6e00: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
6e10: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
6e20: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70  ssert( pOp->p4.p
6e30: 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  I64!=0 );.  pOut
6e40: 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34  ->u.i = *pOp->p4
6e50: 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a  .pI64;.  break;.
6e60: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
6e70: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
6e80: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
6e90: 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34 20   Real * P2 * P4 
6ea0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
6eb0: 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34  [P2]=P4.**.** P4
6ec0: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
6ed0: 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69   a 64-bit floati
6ee0: 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a  ng point value..
6ef0: 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61  ** Write that va
6f00: 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
6f10: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
6f20: 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20  _Real: {        
6f30: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
6f40: 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 2d 70 72  K_FLOAT, out2-pr
6f50: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f  erelease */.  pO
6f60: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
6f70: 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20  Real;.  assert( 
6f80: 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70  !sqlite3IsNaN(*p
6f90: 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b  Op->p4.pReal) );
6fa0: 0a 20 20 70 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f  .  pOut->r = *pO
6fb0: 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62  p->p4.pReal;.  b
6fc0: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
6fd0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e  /* Opcode: Strin
6fe0: 67 38 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a  g8 * P2 * P4 *.*
6ff0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
7000: 5d 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 34 20  ]='P4'.**.** P4 
7010: 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20  points to a nul 
7020: 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38  terminated UTF-8
7030: 20 73 74 72 69 6e 67 2e 20 54 68 69 73 20 6f 70   string. This op
7040: 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72  code is transfor
7050: 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 6e 20  med .** into an 
7060: 4f 50 5f 53 74 72 69 6e 67 20 62 65 66 6f 72 65  OP_String before
7070: 20 69 74 20 69 73 20 65 78 65 63 75 74 65 64 20   it is executed 
7080: 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 74 69  for the first ti
7090: 6d 65 2e 20 20 44 75 72 69 6e 67 0a 2a 2a 20 74  me.  During.** t
70a0: 68 69 73 20 74 72 61 6e 73 66 6f 72 6d 61 74 69  his transformati
70b0: 6f 6e 2c 20 74 68 65 20 6c 65 6e 67 74 68 20 6f  on, the length o
70c0: 66 20 73 74 72 69 6e 67 20 50 34 20 69 73 20 63  f string P4 is c
70d0: 6f 6d 70 75 74 65 64 20 61 6e 64 20 73 74 6f 72  omputed and stor
70e0: 65 64 0a 2a 2a 20 61 73 20 74 68 65 20 50 31 20  ed.** as the P1 
70f0: 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61  parameter..*/.ca
7100: 73 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b  se OP_String8: {
7110: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
7120: 20 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f   as TK_STRING, o
7130: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
7140: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
7150: 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f  >p4.z!=0 );.  pO
7160: 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53  p->opcode = OP_S
7170: 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31  tring;.  pOp->p1
7180: 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
7190: 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a  30(pOp->p4.z);..
71a0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
71b0: 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20  MIT_UTF16.  if( 
71c0: 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45  encoding!=SQLITE
71d0: 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20  _UTF8 ){.    rc 
71e0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
71f0: 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70  SetStr(pOut, pOp
7200: 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49  ->p4.z, -1, SQLI
7210: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
7220: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 69 66 28  STATIC);.    if(
7230: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42   rc==SQLITE_TOOB
7240: 49 47 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  IG ) goto too_bi
7250: 67 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54  g;.    if( SQLIT
7260: 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62  E_OK!=sqlite3Vdb
7270: 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
7280: 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20  pOut, encoding) 
7290: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
72a0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d     assert( pOut-
72b0: 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e  >zMalloc==pOut->
72c0: 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  z );.    assert(
72d0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d   pOut->flags & M
72e0: 45 4d 5f 44 79 6e 20 29 3b 0a 20 20 20 20 70 4f  EM_Dyn );.    pO
72f0: 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b  ut->zMalloc = 0;
7300: 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
7310: 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a   |= MEM_Static;.
7320: 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
7330: 26 3d 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20  &= ~MEM_Dyn;.   
7340: 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
7350: 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a  ==P4_DYNAMIC ){.
7360: 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
7370: 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e  ree(db, pOp->p4.
7380: 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f  z);.    }.    pO
7390: 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44  p->p4type = P4_D
73a0: 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d  YNAMIC;.    pOp-
73b0: 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b  >p4.z = pOut->z;
73c0: 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70  .    pOp->p1 = p
73d0: 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64  Out->n;.  }.#end
73e0: 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  if.  if( pOp->p1
73f0: 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
7400: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
7410: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
7420: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46  _big;.  }.  /* F
7430: 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
7440: 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50  he next case, OP
7450: 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a  _String */.}.  .
7460: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e  /* Opcode: Strin
7470: 67 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  g P1 P2 * P4 *.*
7480: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
7490: 5d 3d 27 50 34 27 20 28 6c 65 6e 3d 50 31 29 0a  ]='P4' (len=P1).
74a0: 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67  **.** The string
74b0: 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e   value P4 of len
74c0: 67 74 68 20 50 31 20 28 62 79 74 65 73 29 20 69  gth P1 (bytes) i
74d0: 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
74e0: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
74f0: 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20   OP_String: {   
7500: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
7510: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
7520: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
7530: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66  !=0 );.  pOut->f
7540: 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d  lags = MEM_Str|M
7550: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65  EM_Static|MEM_Te
7560: 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20  rm;.  pOut->z = 
7570: 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75  pOp->p4.z;.  pOu
7580: 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  t->n = pOp->p1;.
7590: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
75a0: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
75b0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
75c0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
75d0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c  ./* Opcode: Null
75e0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
75f0: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32   Synopsis:  r[P2
7600: 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a  ..P3]=NULL.**.**
7610: 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e   Write a NULL in
7620: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e  to registers P2.
7630: 20 20 49 66 20 50 33 20 67 72 65 61 74 65 72 20    If P3 greater 
7640: 74 68 61 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c  than P2, then al
7650: 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c  so write.** NULL
7660: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
7670: 33 20 61 6e 64 20 65 76 65 72 79 20 72 65 67 69  3 and every regi
7680: 73 74 65 72 20 69 6e 20 62 65 74 77 65 65 6e 20  ster in between 
7690: 50 32 20 61 6e 64 20 50 33 2e 20 20 49 66 20 50  P2 and P3.  If P
76a0: 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61  3.** is less tha
76b0: 6e 20 50 32 20 28 74 79 70 69 63 61 6c 6c 79 20  n P2 (typically 
76c0: 50 33 20 69 73 20 7a 65 72 6f 29 20 74 68 65 6e  P3 is zero) then
76d0: 20 6f 6e 6c 79 20 72 65 67 69 73 74 65 72 20 50   only register P
76e0: 32 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e  2 is.** set to N
76f0: 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ULL..**.** If th
7700: 65 20 50 31 20 76 61 6c 75 65 20 69 73 20 6e 6f  e P1 value is no
7710: 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73  n-zero, then als
7720: 6f 20 73 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c  o set the MEM_Cl
7730: 65 61 72 65 64 20 66 6c 61 67 20 73 6f 20 74 68  eared flag so th
7740: 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65  at.** NULL value
7750: 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61  s will not compa
7760: 72 65 20 65 71 75 61 6c 20 65 76 65 6e 20 69 66  re equal even if
7770: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
7780: 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e  s set on.** OP_N
7790: 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63  e or OP_Eq..*/.c
77a0: 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20  ase OP_Null: {  
77b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
77c0: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
77d0: 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36 20   int cnt;.  u16 
77e0: 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 63 6e 74 20  nullFlag;.  cnt 
77f0: 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70  = pOp->p3-pOp->p
7800: 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
7810: 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
7820: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
7830: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75  pOut->flags = nu
7840: 6c 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31  llFlag = pOp->p1
7850: 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d   ? (MEM_Null|MEM
7860: 5f 43 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f  _Cleared) : MEM_
7870: 4e 75 6c 6c 3b 0a 20 20 77 68 69 6c 65 28 20 63  Null;.  while( c
7880: 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75 74  nt>0 ){.    pOut
7890: 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74  ++;.    memAbout
78a0: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
78b0: 29 3b 0a 20 20 20 20 56 64 62 65 4d 65 6d 52 65  );.    VdbeMemRe
78c0: 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a 20 20 20  lease(pOut);.   
78d0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e   pOut->flags = n
78e0: 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 63 6e 74  ullFlag;.    cnt
78f0: 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  --;.  }.  break;
7900: 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
7910: 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34 20  Blob P1 P2 * P4 
7920: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
7930: 5b 50 32 5d 3d 50 34 20 28 6c 65 6e 3d 50 31 29  [P2]=P4 (len=P1)
7940: 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73  .**.** P4 points
7950: 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61   to a blob of da
7960: 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67  ta P1 bytes long
7970: 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a  .  Store this.**
7980: 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65   blob in registe
7990: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
79a0: 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20  _Blob: {        
79b0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
79c0: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
79d0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20  assert( pOp->p1 
79e0: 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  <= SQLITE_MAX_LE
79f0: 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c 69 74 65  NGTH );.  sqlite
7a00: 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
7a10: 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  Out, pOp->p4.z, 
7a20: 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a  pOp->p1, 0, 0);.
7a30: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
7a40: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
7a50: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
7a60: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
7a70: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 55 6e 64 65  ./* Opcode: Unde
7a80: 66 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 20  f P1 * * * *.** 
7a90: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d  Synopsis: r[P1]=
7aa0: 75 6e 64 65 66 0a 2a 2a 0a 2a 2a 20 4d 61 72 6b  undef.**.** Mark
7ab0: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20   register P1 as 
7ac0: 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63 61  undefined..*/.ca
7ad0: 73 65 20 4f 50 5f 55 6e 64 65 66 3a 20 7b 0a 20  se OP_Undef: {. 
7ae0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
7af0: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
7b00: 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
7b10: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
7b20: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
7b30: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41  pOp->p1];.  memA
7b40: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
7b50: 70 4f 75 74 29 3b 0a 20 20 56 64 62 65 4d 65 6d  pOut);.  VdbeMem
7b60: 52 65 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a 20  Release(pOut);. 
7b70: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
7b80: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20  EM_Undefined;.  
7b90: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
7ba0: 6f 64 65 3a 20 56 61 72 69 61 62 6c 65 20 50 31  ode: Variable P1
7bb0: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
7bc0: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 70 61  nopsis: r[P2]=pa
7bd0: 72 61 6d 65 74 65 72 28 50 31 2c 50 34 29 0a 2a  rameter(P1,P4).*
7be0: 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74 68  *.** Transfer th
7bf0: 65 20 76 61 6c 75 65 73 20 6f 66 20 62 6f 75 6e  e values of boun
7c00: 64 20 70 61 72 61 6d 65 74 65 72 20 50 31 20 69  d parameter P1 i
7c10: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 0a  nto register P2.
7c20: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70 61 72  **.** If the par
7c30: 61 6d 65 74 65 72 20 69 73 20 6e 61 6d 65 64 2c  ameter is named,
7c40: 20 74 68 65 6e 20 69 74 73 20 6e 61 6d 65 20 61   then its name a
7c50: 70 70 65 61 72 73 20 69 6e 20 50 34 2e 0a 2a 2a  ppears in P4..**
7c60: 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 69 73   The P4 value is
7c70: 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
7c80: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
7c90: 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20  name()..*/.case 
7ca0: 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20 20  OP_Variable: {  
7cb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
7cc0: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7cd0: 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20 20    Mem *pVar;    
7ce0: 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e     /* Value bein
7cf0: 67 20 74 72 61 6e 73 66 65 72 72 65 64 20 2a 2f  g transferred */
7d00: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
7d10: 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
7d20: 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61  <=p->nVar );.  a
7d30: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
7d40: 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a  ==0 || pOp->p4.z
7d50: 3d 3d 70 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e  ==p->azVar[pOp->
7d60: 70 31 2d 31 5d 20 29 3b 0a 20 20 70 56 61 72 20  p1-1] );.  pVar 
7d70: 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e  = &p->aVar[pOp->
7d80: 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73  p1 - 1];.  if( s
7d90: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
7da0: 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20 20  Big(pVar) ){.   
7db0: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
7dc0: 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   }.  sqlite3Vdbe
7dd0: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
7de0: 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53  Out, pVar, MEM_S
7df0: 74 61 74 69 63 29 3b 0a 20 20 55 50 44 41 54 45  tatic);.  UPDATE
7e00: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
7e10: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
7e20: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65  ./* Opcode: Move
7e30: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
7e40: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32   Synopsis:  r[P2
7e50: 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a  @P3]=r[P1@P3].**
7e60: 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 76 61 6c  .** Move the val
7e70: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
7e80: 50 31 2e 2e 50 31 2b 50 33 20 6f 76 65 72 20 69  P1..P1+P3 over i
7e90: 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73  nto.** registers
7ea0: 20 50 32 2e 2e 50 32 2b 50 33 2e 20 20 52 65 67   P2..P2+P3.  Reg
7eb0: 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33  isters P1..P1+P3
7ec0: 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c   are.** left hol
7ed0: 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74  ding a NULL.  It
7ee0: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72   is an error for
7ef0: 20 72 65 67 69 73 74 65 72 20 72 61 6e 67 65 73   register ranges
7f00: 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 20 61 6e  .** P1..P1+P3 an
7f10: 64 20 50 32 2e 2e 50 32 2b 50 33 20 74 6f 20 6f  d P2..P2+P3 to o
7f20: 76 65 72 6c 61 70 2e 0a 2a 2f 0a 63 61 73 65 20  verlap..*/.case 
7f30: 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 63 68 61  OP_Move: {.  cha
7f40: 72 20 2a 7a 4d 61 6c 6c 6f 63 3b 20 20 20 2f 2a  r *zMalloc;   /*
7f50: 20 48 6f 6c 64 69 6e 67 20 76 61 72 69 61 62 6c   Holding variabl
7f60: 65 20 66 6f 72 20 61 6c 6c 6f 63 61 74 65 64 20  e for allocated 
7f70: 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20  memory */.  int 
7f80: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
7f90: 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74  Number of regist
7fa0: 65 72 73 20 6c 65 66 74 20 74 6f 20 63 6f 70 79  ers left to copy
7fb0: 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20   */.  int p1;   
7fc0: 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
7fd0: 65 72 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20  er to copy from 
7fe0: 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20  */.  int p2;    
7ff0: 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
8000: 72 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a  r to copy to */.
8010: 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  .  n = pOp->p3;.
8020: 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
8030: 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
8040: 20 20 61 73 73 65 72 74 28 20 6e 3e 3d 30 20 26    assert( n>=0 &
8050: 26 20 70 31 3e 30 20 26 26 20 70 32 3e 30 20 29  & p1>0 && p2>0 )
8060: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e  ;.  assert( p1+n
8070: 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31  <=p2 || p2+n<=p1
8080: 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   );..  pIn1 = &a
8090: 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Mem[p1];.  pOut 
80a0: 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 64  = &aMem[p2];.  d
80b0: 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  o{.    assert( p
80c0: 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e  Out<=&aMem[(p->n
80d0: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d  Mem-p->nCursor)]
80e0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
80f0: 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e  pIn1<=&aMem[(p->
8100: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
8110: 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ] );.    assert(
8120: 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31   memIsValid(pIn1
8130: 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  ) );.    memAbou
8140: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
8150: 74 29 3b 0a 20 20 20 20 7a 4d 61 6c 6c 6f 63 20  t);.    zMalloc 
8160: 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b  = pOut->zMalloc;
8170: 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c  .    pOut->zMall
8180: 6f 63 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69  oc = 0;.    sqli
8190: 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70  te3VdbeMemMove(p
81a0: 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64  Out, pIn1);.#ifd
81b0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
81c0: 20 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53      if( pOut->pS
81d0: 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b  copyFrom>=&aMem[
81e0: 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53 63  p1] && pOut->pSc
81f0: 6f 70 79 46 72 6f 6d 3c 26 61 4d 65 6d 5b 70 31  opyFrom<&aMem[p1
8200: 2b 70 4f 70 2d 3e 70 33 5d 20 29 7b 0a 20 20 20  +pOp->p3] ){.   
8210: 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46     pOut->pScopyF
8220: 72 6f 6d 20 2b 3d 20 70 31 20 2d 20 70 4f 70 2d  rom += p1 - pOp-
8230: 3e 70 32 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  >p2;.    }.#endi
8240: 66 0a 20 20 20 20 70 49 6e 31 2d 3e 7a 4d 61 6c  f.    pIn1->zMal
8250: 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63 3b 0a 20  loc = zMalloc;. 
8260: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
8270: 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20  E(p2++, pOut);. 
8280: 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70     pIn1++;.    p
8290: 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65 28  Out++;.  }while(
82a0: 20 6e 2d 2d 20 29 3b 0a 20 20 62 72 65 61 6b 3b   n-- );.  break;
82b0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
82c0: 6f 70 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a  opy P1 P2 P3 * *
82d0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
82e0: 50 32 40 50 33 2b 31 5d 3d 72 5b 50 31 40 50 33  P2@P3+1]=r[P1@P3
82f0: 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61  +1].**.** Make a
8300: 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65   copy of registe
8310: 72 73 20 50 31 2e 2e 50 31 2b 50 33 20 69 6e 74  rs P1..P1+P3 int
8320: 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e  o registers P2..
8330: 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  P2+P3..**.** Thi
8340: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61  s instruction ma
8350: 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70 79 20  kes a deep copy 
8360: 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41  of the value.  A
8370: 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73   duplicate.** is
8380: 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72   made of any str
8390: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73  ing or blob cons
83a0: 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20  tant.  See also 
83b0: 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73  OP_SCopy..*/.cas
83c0: 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20 20 69  e OP_Copy: {.  i
83d0: 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70  nt n;..  n = pOp
83e0: 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20 3d 20 26  ->p3;.  pIn1 = &
83f0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
8400: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
8410: 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
8420: 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a  ( pOut!=pIn1 );.
8430: 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a 20 20    while( 1 ){.  
8440: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
8450: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
8460: 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65  , pIn1, MEM_Ephe
8470: 6d 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65  m);.    Deepheme
8480: 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69  ralize(pOut);.#i
8490: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
84a0: 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f  G.    pOut->pSco
84b0: 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64  pyFrom = 0;.#end
84c0: 69 66 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  if.    REGISTER_
84d0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 70 4f  TRACE(pOp->p2+pO
84e0: 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a  p->p3-n, pOut);.
84f0: 20 20 20 20 69 66 28 20 28 6e 2d 2d 29 3d 3d 30      if( (n--)==0
8500: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 4f   ) break;.    pO
8510: 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  ut++;.    pIn1++
8520: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
8530: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f  ../* Opcode: SCo
8540: 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  py P1 P2 * * *.*
8550: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
8560: 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61  ]=r[P1].**.** Ma
8570: 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  ke a shallow cop
8580: 79 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  y of register P1
8590: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
85a0: 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  2..**.** This in
85b0: 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20  struction makes 
85c0: 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f  a shallow copy o
85d0: 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66  f the value.  If
85e0: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   the value.** is
85f0: 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
8600: 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79  b, then the copy
8610: 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74   is only a point
8620: 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69  er to the.** ori
8630: 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20  ginal and hence 
8640: 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  if the original 
8650: 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20  changes so will 
8660: 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72  the copy..** Wor
8670: 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69  se, if the origi
8680: 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74  nal is deallocat
8690: 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63  ed, the copy bec
86a0: 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a  omes invalid..**
86b0: 20 54 68 75 73 20 74 68 65 20 70 72 6f 67 72 61   Thus the progra
86c0: 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65  m must guarantee
86d0: 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e   that the origin
86e0: 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e  al will not chan
86f0: 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65  ge.** during the
8700: 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65   lifetime of the
8710: 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43   copy.  Use OP_C
8720: 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f  opy to make a co
8730: 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a  mplete.** copy..
8740: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79  */.case OP_SCopy
8750: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
8760: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  * out2 */.  pIn1
8770: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
8780: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
8790: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
87a0: 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31  sert( pOut!=pIn1
87b0: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
87c0: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
87d0: 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f  pOut, pIn1, MEM_
87e0: 45 70 68 65 6d 29 3b 0a 23 69 66 64 65 66 20 53  Ephem);.#ifdef S
87f0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
8800: 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72  ( pOut->pScopyFr
8810: 6f 6d 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53  om==0 ) pOut->pS
8820: 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b  copyFrom = pIn1;
8830: 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b  .#endif.  break;
8840: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
8850: 65 73 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a  esultRow P1 P2 *
8860: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
8870: 3a 20 20 6f 75 74 70 75 74 3d 72 5b 50 31 40 50  :  output=r[P1@P
8880: 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67  2].**.** The reg
8890: 69 73 74 65 72 73 20 50 31 20 74 68 72 6f 75 67  isters P1 throug
88a0: 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69  h P1+P2-1 contai
88b0: 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f  n a single row o
88c0: 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54 68  f.** results. Th
88d0: 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73  is opcode causes
88e0: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65   the sqlite3_ste
88f0: 70 28 29 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d  p() call to term
8900: 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e  inate.** with an
8910: 20 53 51 4c 49 54 45 5f 52 4f 57 20 72 65 74 75   SQLITE_ROW retu
8920: 72 6e 20 63 6f 64 65 20 61 6e 64 20 69 74 20 73  rn code and it s
8930: 65 74 73 20 75 70 20 74 68 65 20 73 71 6c 69 74  ets up the sqlit
8940: 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63  e3_stmt.** struc
8950: 74 75 72 65 20 74 6f 20 70 72 6f 76 69 64 65 20  ture to provide 
8960: 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 72 5b  access to the r[
8970: 50 31 5d 2e 2e 72 5b 50 31 2b 50 32 2d 31 5d 20  P1]..r[P1+P2-1] 
8980: 76 61 6c 75 65 73 20 61 73 0a 2a 2a 20 74 68 65  values as.** the
8990: 20 72 65 73 75 6c 74 20 72 6f 77 2e 0a 2a 2f 0a   result row..*/.
89a0: 63 61 73 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f  case OP_ResultRo
89b0: 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  w: {.  Mem *pMem
89c0: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61 73 73  ;.  int i;.  ass
89d0: 65 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75  ert( p->nResColu
89e0: 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20  mn==pOp->p2 );. 
89f0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
8a00: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
8a10: 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c  pOp->p1+pOp->p2<
8a20: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
8a30: 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23 69 66 6e  rsor)+1 );..#ifn
8a40: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
8a50: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
8a60: 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68 65 20 70  K.  /* Run the p
8a70: 72 6f 67 72 65 73 73 20 63 6f 75 6e 74 65 72 20  rogress counter 
8a80: 6a 75 73 74 20 62 65 66 6f 72 65 20 72 65 74 75  just before retu
8a90: 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20 20 69 66  rning..  */.  if
8aa0: 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21  ( db->xProgress!
8ab0: 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53 74 65 70  =0.   && nVmStep
8ac0: 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74  >=nProgressLimit
8ad0: 0a 20 20 20 26 26 20 64 62 2d 3e 78 50 72 6f 67  .   && db->xProg
8ae0: 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65  ress(db->pProgre
8af0: 73 73 41 72 67 29 21 3d 30 0a 20 20 29 7b 0a 20  ssArg)!=0.  ){. 
8b00: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49     rc = SQLITE_I
8b10: 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20 67 6f  NTERRUPT;.    go
8b20: 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
8b30: 6c 74 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  lt;.  }.#endif..
8b40: 20 20 2f 2a 20 49 66 20 74 68 69 73 20 73 74 61    /* If this sta
8b50: 74 65 6d 65 6e 74 20 68 61 73 20 76 69 6f 6c 61  tement has viola
8b60: 74 65 64 20 69 6d 6d 65 64 69 61 74 65 20 66 6f  ted immediate fo
8b70: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
8b80: 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e  aints, do.  ** n
8b90: 6f 74 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75  ot return the nu
8ba0: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64  mber of rows mod
8bb0: 69 66 69 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f  ified. And do no
8bc0: 74 20 52 45 4c 45 41 53 45 20 74 68 65 20 73 74  t RELEASE the st
8bd0: 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61  atement.  ** tra
8be0: 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65  nsaction. It nee
8bf0: 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  ds to be rolled 
8c00: 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20  back.  */.  if( 
8c10: 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d  SQLITE_OK!=(rc =
8c20: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
8c30: 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a 20 20  kFk(p, 0)) ){.  
8c40: 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 66 6c    assert( db->fl
8c50: 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ags&SQLITE_Count
8c60: 52 6f 77 73 20 29 3b 0a 20 20 20 20 61 73 73 65  Rows );.    asse
8c70: 72 74 28 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a  rt( p->usesStmtJ
8c80: 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20 62 72  ournal );.    br
8c90: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  eak;.  }..  /* I
8ca0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75  f the SQLITE_Cou
8cb0: 6e 74 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73  ntRows flag is s
8cc0: 65 74 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c  et in sqlite3.fl
8cd0: 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a  ags mask, then .
8ce0: 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65    ** DML stateme
8cf0: 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20  nts invoke this 
8d00: 6f 70 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e  opcode to return
8d10: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
8d20: 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69  ows .  ** modifi
8d30: 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20  ed to the user. 
8d40: 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79  This is the only
8d50: 20 77 61 79 20 74 68 61 74 20 61 20 56 4d 20 74   way that a VM t
8d60: 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61  hat.  ** opens a
8d70: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
8d80: 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b  action may invok
8d90: 65 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20  e this opcode.. 
8da0: 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65   **.  ** In case
8db0: 20 74 68 69 73 20 69 73 20 73 75 63 68 20 61 20   this is such a 
8dc0: 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65  statement, close
8dd0: 20 61 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74   any statement t
8de0: 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20  ransaction.  ** 
8df0: 6f 70 65 6e 65 64 20 62 79 20 74 68 69 73 20 56  opened by this V
8e00: 4d 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  M before returni
8e10: 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68  ng control to th
8e20: 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20  e user. This is 
8e30: 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74  to.  ** ensure t
8e40: 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72  hat statement-tr
8e50: 61 6e 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61  ansactions are a
8e60: 6c 77 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f  lways nested, no
8e70: 74 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20  t overlapping.. 
8e80: 20 2a 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20   ** If the open 
8e90: 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61  statement-transa
8ea0: 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f  ction is not clo
8eb0: 73 65 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74  sed here, then t
8ec0: 68 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79  he user.  ** may
8ed0: 20 73 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d   step another VM
8ee0: 20 74 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20   that opens its 
8ef0: 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72  own statement tr
8f00: 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a  ansaction. This.
8f10: 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f    ** may lead to
8f20: 20 6f 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61   overlapping sta
8f30: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
8f40: 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ons..  **.  ** T
8f50: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
8f60: 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 65 76 65  nsaction is neve
8f70: 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72  r a top-level tr
8f80: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63  ansaction.  Henc
8f90: 65 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c 45 41  e.  ** the RELEA
8fa0: 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61  SE call below ca
8fb0: 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20 20  n never fail..  
8fc0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  */.  assert( p->
8fd0: 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c  iStatement==0 ||
8fe0: 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54   db->flags&SQLIT
8ff0: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20  E_CountRows );. 
9000: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
9010: 65 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28  eCloseStatement(
9020: 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  p, SAVEPOINT_REL
9030: 45 41 53 45 29 3b 0a 20 20 69 66 28 20 4e 45 56  EASE);.  if( NEV
9040: 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  ER(rc!=SQLITE_OK
9050: 29 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ) ){.    break;.
9060: 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69    }..  /* Invali
9070: 64 61 74 65 20 61 6c 6c 20 65 70 68 65 6d 65 72  date all ephemer
9080: 61 6c 20 63 75 72 73 6f 72 20 72 6f 77 20 63 61  al cursor row ca
9090: 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63  ches */.  p->cac
90a0: 68 65 43 74 72 20 3d 20 28 70 2d 3e 63 61 63 68  heCtr = (p->cach
90b0: 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20  eCtr + 2)|1;..  
90c0: 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  /* Make sure the
90d0: 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
90e0: 63 75 72 72 65 6e 74 20 72 6f 77 20 61 72 65 20  current row are 
90f0: 5c 30 30 30 20 74 65 72 6d 69 6e 61 74 65 64 0a  \000 terminated.
9100: 20 20 2a 2a 20 61 6e 64 20 68 61 76 65 20 61 6e    ** and have an
9110: 20 61 73 73 69 67 6e 65 64 20 74 79 70 65 2e 20   assigned type. 
9120: 20 54 68 65 20 72 65 73 75 6c 74 73 20 61 72 65   The results are
9130: 20 64 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65   de-ephemeralize
9140: 64 20 61 73 0a 20 20 2a 2a 20 61 20 73 69 64 65  d as.  ** a side
9150: 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20   effect..  */.  
9160: 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c  pMem = p->pResul
9170: 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  tSet = &aMem[pOp
9180: 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30  ->p1];.  for(i=0
9190: 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b  ; i<pOp->p2; i++
91a0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ){.    assert( m
91b0: 65 6d 49 73 56 61 6c 69 64 28 26 70 4d 65 6d 5b  emIsValid(&pMem[
91c0: 69 5d 29 20 29 3b 0a 20 20 20 20 44 65 65 70 68  i]) );.    Deeph
91d0: 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65 6d 5b  emeralize(&pMem[
91e0: 69 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  i]);.    assert(
91f0: 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20   (pMem[i].flags 
9200: 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a  & MEM_Ephem)==0.
9210: 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 28              || (
9220: 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20  pMem[i].flags & 
9230: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
9240: 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71  b))==0 );.    sq
9250: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54  lite3VdbeMemNulT
9260: 65 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69  erminate(&pMem[i
9270: 5d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  ]);.    sqlite3V
9280: 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28  dbeMemStoreType(
9290: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52  &pMem[i]);.    R
92a0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
92b0: 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69  p->p1+i, &pMem[i
92c0: 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62  ]);.  }.  if( db
92d0: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
92e0: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20   goto no_mem;.. 
92f0: 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54   /* Return SQLIT
9300: 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e  E_ROW.  */.  p->
9310: 70 63 20 3d 20 70 63 20 2b 20 31 3b 0a 20 20 72  pc = pc + 1;.  r
9320: 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a  c = SQLITE_ROW;.
9330: 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
9340: 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  rn;.}../* Opcode
9350: 3a 20 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50  : Concat P1 P2 P
9360: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
9370: 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72  s: r[P3]=r[P2]+r
9380: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74  [P1].**.** Add t
9390: 68 65 20 74 65 78 74 20 69 6e 20 72 65 67 69 73  he text in regis
93a0: 74 65 72 20 50 31 20 6f 6e 74 6f 20 74 68 65 20  ter P1 onto the 
93b0: 65 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74 20  end of the text 
93c0: 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  in.** register P
93d0: 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  2 and store the 
93e0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
93f0: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
9400: 68 65 72 20 74 68 65 20 50 31 20 6f 72 20 50 32  her the P1 or P2
9410: 20 74 65 78 74 20 61 72 65 20 4e 55 4c 4c 20 74   text are NULL t
9420: 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69  hen store NULL i
9430: 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33  n P3..**.**   P3
9440: 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a   = P2 || P1.**.*
9450: 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20  * It is illegal 
9460: 66 6f 72 20 50 31 20 61 6e 64 20 50 33 20 74 6f  for P1 and P3 to
9470: 20 62 65 20 74 68 65 20 73 61 6d 65 20 72 65 67   be the same reg
9480: 69 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73  ister. Sometimes
9490: 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73 20 74 68  ,.** if P3 is th
94a0: 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 20  e same register 
94b0: 61 73 20 50 32 2c 20 74 68 65 20 69 6d 70 6c 65  as P2, the imple
94c0: 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 62 6c  mentation is abl
94d0: 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61 20  e.** to avoid a 
94e0: 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73  memcpy()..*/.cas
94f0: 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20  e OP_Concat: {  
9500: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
9510: 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69   as TK_CONCAT, i
9520: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
9530: 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20  .  i64 nByte;.. 
9540: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
9550: 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d  p->p1];.  pIn2 =
9560: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
9570: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
9580: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
9590: 72 74 28 20 70 49 6e 31 21 3d 70 4f 75 74 20 29  rt( pIn1!=pOut )
95a0: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
95b0: 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61  lags | pIn2->fla
95c0: 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  gs) & MEM_Null )
95d0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
95e0: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
95f0: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
9600: 7d 0a 20 20 69 66 28 20 45 78 70 61 6e 64 42 6c  }.  if( ExpandBl
9610: 6f 62 28 70 49 6e 31 29 20 7c 7c 20 45 78 70 61  ob(pIn1) || Expa
9620: 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20 29 20 67  ndBlob(pIn2) ) g
9630: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74  oto no_mem;.  St
9640: 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e  ringify(pIn1, en
9650: 63 6f 64 69 6e 67 29 3b 0a 20 20 53 74 72 69 6e  coding);.  Strin
9660: 67 69 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64  gify(pIn2, encod
9670: 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20  ing);.  nByte = 
9680: 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e  pIn1->n + pIn2->
9690: 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64  n;.  if( nByte>d
96a0: 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
96b0: 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
96c0: 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
96d0: 69 67 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74  ig;.  }.  MemSet
96e0: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
96f0: 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28 20 73  EM_Str);.  if( s
9700: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
9710: 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79  w(pOut, (int)nBy
9720: 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32  te+2, pOut==pIn2
9730: 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  ) ){.    goto no
9740: 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 69 66 28 20  _mem;.  }.  if( 
9750: 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20 20  pOut!=pIn2 ){.  
9760: 20 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e 7a    memcpy(pOut->z
9770: 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d  , pIn2->z, pIn2-
9780: 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70  >n);.  }.  memcp
9790: 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d  y(&pOut->z[pIn2-
97a0: 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70 49  >n], pIn1->z, pI
97b0: 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e  n1->n);.  pOut->
97c0: 7a 5b 6e 42 79 74 65 5d 3d 30 3b 0a 20 20 70 4f  z[nByte]=0;.  pO
97d0: 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d  ut->z[nByte+1] =
97e0: 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   0;.  pOut->flag
97f0: 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20  s |= MEM_Term;. 
9800: 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29   pOut->n = (int)
9810: 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 65  nByte;.  pOut->e
9820: 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20  nc = encoding;. 
9830: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
9840: 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
9850: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
9860: 65 3a 20 41 64 64 20 50 31 20 50 32 20 50 33 20  e: Add P1 P2 P3 
9870: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
9880: 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b    r[P3]=r[P1]+r[
9890: 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68  P2].**.** Add th
98a0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
98b0: 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 76 61  ter P1 to the va
98c0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
98d0: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
98e0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
98f0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
9900: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
9910: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
9920: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
9930: 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c   Opcode: Multipl
9940: 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
9950: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
9960: 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a  3]=r[P1]*r[P2].*
9970: 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79  *.**.** Multiply
9980: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
9990: 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65  gister P1 by the
99a0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
99b0: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
99c0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
99d0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
99e0: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
99f0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
9a00: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
9a10: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62 74  ./* Opcode: Subt
9a20: 72 61 63 74 20 50 31 20 50 32 20 50 33 20 2a 20  ract P1 P2 P3 * 
9a30: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
9a40: 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31  r[P3]=r[P2]-r[P1
9a50: 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74  ].**.** Subtract
9a60: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
9a70: 67 69 73 74 65 72 20 50 31 20 66 72 6f 6d 20 74  gister P1 from t
9a80: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
9a90: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
9aa0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
9ab0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
9ac0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
9ad0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
9ae0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
9af0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69  */./* Opcode: Di
9b00: 76 69 64 65 20 50 31 20 50 32 20 50 33 20 2a 20  vide P1 P2 P3 * 
9b10: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
9b20: 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31  r[P3]=r[P2]/r[P1
9b30: 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74  ].**.** Divide t
9b40: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
9b50: 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76  ster P1 by the v
9b60: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
9b70: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
9b80: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
9b90: 65 67 69 73 74 65 72 20 50 33 20 28 50 33 3d 50  egister P3 (P3=P
9ba0: 32 2f 50 31 29 2e 20 49 66 20 74 68 65 20 76 61  2/P1). If the va
9bb0: 6c 75 65 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73  lue in .** regis
9bc0: 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f 2c 20  ter P1 is zero, 
9bd0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
9be0: 69 73 20 4e 55 4c 4c 2e 20 49 66 20 65 69 74 68  is NULL. If eith
9bf0: 65 72 20 69 6e 70 75 74 20 69 73 20 0a 2a 2a 20  er input is .** 
9c00: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
9c10: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
9c20: 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65  Opcode: Remainde
9c30: 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  r P1 P2 P3 * *.*
9c40: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
9c50: 33 5d 3d 72 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a  3]=r[P2]%r[P1].*
9c60: 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68 65  *.** Compute the
9c70: 20 72 65 6d 61 69 6e 64 65 72 20 61 66 74 65 72   remainder after
9c80: 20 69 6e 74 65 67 65 72 20 72 65 67 69 73 74 65   integer registe
9c90: 72 20 50 32 20 69 73 20 64 69 76 69 64 65 64 20  r P2 is divided 
9ca0: 62 79 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  by .** register 
9cb0: 50 31 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  P1 and store the
9cc0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
9cd0: 74 65 72 20 50 33 2e 20 0a 2a 2a 20 49 66 20 74  ter P3. .** If t
9ce0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
9cf0: 73 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f 20  ster P1 is zero 
9d00: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
9d10: 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  LL..** If either
9d20: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
9d30: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
9d40: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
9d50: 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 20 20  _Add:           
9d60: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
9d70: 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c  as TK_PLUS, in1,
9d80: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
9d90: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
9da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9db0: 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55 53  same as TK_MINUS
9dc0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
9dd0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c 74   */.case OP_Mult
9de0: 69 70 6c 79 3a 20 20 20 20 20 20 20 20 20 20 20  iply:           
9df0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
9e00: 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  _STAR, in1, in2,
9e10: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
9e20: 5f 44 69 76 69 64 65 3a 20 20 20 20 20 20 20 20  _Divide:        
9e30: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
9e40: 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e 31  as TK_SLASH, in1
9e50: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
9e60: 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65 72  ase OP_Remainder
9e70: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
9e80: 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d 2c   same as TK_REM,
9e90: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
9ea0: 2a 2f 0a 20 20 63 68 61 72 20 62 49 6e 74 69 6e  */.  char bIntin
9eb0: 74 3b 20 20 20 2f 2a 20 53 74 61 72 74 65 64 20  t;   /* Started 
9ec0: 6f 75 74 20 61 73 20 74 77 6f 20 69 6e 74 65 67  out as two integ
9ed0: 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 20  er operands */. 
9ee0: 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20   int flags;     
9ef0: 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d   /* Combined MEM
9f00: 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f  _* flags from bo
9f10: 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 69  th inputs */.  i
9f20: 36 34 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f  64 iA;         /
9f30: 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
9f40: 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20  of left operand 
9f50: 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20  */.  i64 iB;    
9f60: 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20       /* Integer 
9f70: 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f  value of right o
9f80: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62  perand */.  doub
9f90: 6c 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52  le rA;      /* R
9fa0: 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66  eal value of lef
9fb0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64  t operand */.  d
9fc0: 6f 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f  ouble rB;      /
9fd0: 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20  * Real value of 
9fe0: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
9ff0: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
a000: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 70 70  [pOp->p1];.  app
a010: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
a020: 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20  y(pIn1);.  pIn2 
a030: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
a040: 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  ;.  applyNumeric
a050: 41 66 66 69 6e 69 74 79 28 70 49 6e 32 29 3b 0a  Affinity(pIn2);.
a060: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
a070: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73  Op->p3];.  flags
a080: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c   = pIn1->flags |
a090: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn2->flags;.  
a0a0: 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d  if( (flags & MEM
a0b0: 5f 4e 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f  _Null)!=0 ) goto
a0c0: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
a0d0: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66  lt_is_null;.  if
a0e0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
a0f0: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn2->flags & M
a100: 45 4d 5f 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74  EM_Int)==MEM_Int
a110: 20 29 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e   ){.    iA = pIn
a120: 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d  1->u.i;.    iB =
a130: 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20   pIn2->u.i;.    
a140: 62 49 6e 74 69 6e 74 20 3d 20 31 3b 0a 20 20 20  bIntint = 1;.   
a150: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
a160: 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61  code ){.      ca
a170: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
a180: 20 69 66 28 20 73 71 6c 69 74 65 33 41 64 64 49   if( sqlite3AddI
a190: 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67  nt64(&iB,iA) ) g
a1a0: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72  oto fp_math;  br
a1b0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
a1c0: 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 69 66  OP_Subtract:  if
a1d0: 28 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36  ( sqlite3SubInt6
a1e0: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
a1f0: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
a200: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
a210: 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66 28 20 73  Multiply:  if( s
a220: 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 26  qlite3MulInt64(&
a230: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
a240: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
a250: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76       case OP_Div
a260: 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ide: {.        i
a270: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
a280: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
a290: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
a2a0: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 26 26     if( iA==-1 &&
a2b0: 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e   iB==SMALLEST_IN
a2c0: 54 36 34 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  T64 ) goto fp_ma
a2d0: 74 68 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f  th;.        iB /
a2e0: 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = iA;.        br
a2f0: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
a300: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
a310: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20        if( iA==0 
a320: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
a330: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
a340: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  ;.        if( iA
a350: 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20  ==-1 ) iA = 1;. 
a360: 20 20 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b         iB %= iA;
a370: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
a380: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
a390: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42    pOut->u.i = iB
a3a0: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
a3b0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
a3c0: 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  nt);.  }else{.  
a3d0: 20 20 62 49 6e 74 69 6e 74 20 3d 20 30 3b 0a 66    bIntint = 0;.f
a3e0: 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72 41 20 3d  p_math:.    rA =
a3f0: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
a400: 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20  Value(pIn1);.   
a410: 20 72 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rB = sqlite3Vdb
a420: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 32 29  eRealValue(pIn2)
a430: 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f  ;.    switch( pO
a440: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
a450: 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20     case OP_Add: 
a460: 20 20 20 20 20 20 20 20 72 42 20 2b 3d 20 72 41          rB += rA
a470: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
a480: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62       case OP_Sub
a490: 74 72 61 63 74 3a 20 20 20 20 72 42 20 2d 3d 20  tract:    rB -= 
a4a0: 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  rA;       break;
a4b0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d  .      case OP_M
a4c0: 75 6c 74 69 70 6c 79 3a 20 20 20 20 72 42 20 2a  ultiply:    rB *
a4d0: 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61  = rA;       brea
a4e0: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
a4f0: 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20  _Divide: {.     
a500: 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20     /* (double)0 
a510: 49 6e 20 63 61 73 65 20 6f 66 20 53 51 4c 49 54  In case of SQLIT
a520: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
a530: 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20  POINT... */.    
a540: 20 20 20 20 69 66 28 20 72 41 3d 3d 28 64 6f 75      if( rA==(dou
a550: 62 6c 65 29 30 20 29 20 67 6f 74 6f 20 61 72 69  ble)0 ) goto ari
a560: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
a570: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
a580: 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20  rB /= rA;.      
a590: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
a5a0: 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20  .      default: 
a5b0: 7b 0a 20 20 20 20 20 20 20 20 69 41 20 3d 20 28  {.        iA = (
a5c0: 69 36 34 29 72 41 3b 0a 20 20 20 20 20 20 20 20  i64)rA;.        
a5d0: 69 42 20 3d 20 28 69 36 34 29 72 42 3b 0a 20 20  iB = (i64)rB;.  
a5e0: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20        if( iA==0 
a5f0: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
a600: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
a610: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  ;.        if( iA
a620: 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20  ==-1 ) iA = 1;. 
a630: 20 20 20 20 20 20 20 72 42 20 3d 20 28 64 6f 75         rB = (dou
a640: 62 6c 65 29 28 69 42 20 25 20 69 41 29 3b 0a 20  ble)(iB % iA);. 
a650: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
a660: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 69 66 64      }.    }.#ifd
a670: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
a680: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
a690: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 42    pOut->u.i = rB
a6a0: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
a6b0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
a6c0: 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 69  nt);.#else.    i
a6d0: 66 28 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  f( sqlite3IsNaN(
a6e0: 72 42 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  rB) ){.      got
a6f0: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
a700: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
a710: 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 72 20 3d   }.    pOut->r =
a720: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
a730: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
a740: 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69 66 28  M_Real);.    if(
a750: 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65   (flags & MEM_Re
a760: 61 6c 29 3d 3d 30 20 26 26 20 21 62 49 6e 74 69  al)==0 && !bInti
a770: 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  nt ){.      sqli
a780: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
a790: 66 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a 20 20  finity(pOut);.  
a7a0: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20    }.#endif.  }. 
a7b0: 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65   break;..arithme
a7c0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
a7d0: 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ll:.  sqlite3Vdb
a7e0: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
a7f0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
a800: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65  * Opcode: CollSe
a810: 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a  q P1 * * P4.**.*
a820: 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
a830: 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20 73  r to a CollSeq s
a840: 74 72 75 63 74 2e 20 49 66 20 74 68 65 20 6e 65  truct. If the ne
a850: 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75 73 65  xt call to a use
a860: 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72  r function.** or
a870: 20 61 67 67 72 65 67 61 74 65 20 63 61 6c 6c 73   aggregate calls
a880: 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43   sqlite3GetFuncC
a890: 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73 20 63  ollSeq(), this c
a8a0: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
a8b0: 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74  e will.** be ret
a8c0: 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73 20 75  urned. This is u
a8d0: 73 65 64 20 62 79 20 74 68 65 20 62 75 69 6c 74  sed by the built
a8e0: 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29  -in min(), max()
a8f0: 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a   and nullif().**
a900: 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
a910: 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 74 20 7a  * If P1 is not z
a920: 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 73 20  ero, then it is 
a930: 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
a940: 61 20 73 75 62 73 65 71 75 65 6e 74 20 6d 69 6e  a subsequent min
a950: 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28 29 20 61  () or.** max() a
a960: 67 67 72 65 67 61 74 65 20 77 69 6c 6c 20 73 65  ggregate will se
a970: 74 20 74 6f 20 31 20 69 66 20 74 68 65 20 63 75  t to 1 if the cu
a980: 72 72 65 6e 74 20 72 6f 77 20 69 73 20 6e 6f 74  rrent row is not
a990: 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 0a   the minimum or.
a9a0: 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20 54 68 65  ** maximum.  The
a9b0: 20 50 31 20 72 65 67 69 73 74 65 72 20 69 73 20   P1 register is 
a9c0: 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 30  initialized to 0
a9d0: 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63   by this instruc
a9e0: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tion..**.** The 
a9f0: 69 6e 74 65 72 66 61 63 65 20 75 73 65 64 20 62  interface used b
aa00: 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  y the implementa
aa10: 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f 72  tion of the afor
aa20: 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74  ementioned funct
aa30: 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69  ions.** to retri
aa40: 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f  eve the collatio
aa50: 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74 20 62  n sequence set b
aa60: 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  y this opcode is
aa70: 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a   not available.*
aa80: 2a 20 70 75 62 6c 69 63 6c 79 2c 20 6f 6e 6c 79  * publicly, only
aa90: 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f   to user functio
aaa0: 6e 73 20 64 65 66 69 6e 65 64 20 69 6e 20 66 75  ns defined in fu
aab0: 6e 63 2e 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  nc.c..*/.case OP
aac0: 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73  _CollSeq: {.  as
aad0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
aae0: 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b  e==P4_COLLSEQ );
aaf0: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  .  if( pOp->p1 )
ab00: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
ab10: 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d  eMemSetInt64(&aM
ab20: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b  em[pOp->p1], 0);
ab30: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
ab40: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63  ./* Opcode: Func
ab50: 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34  tion P1 P2 P3 P4
ab60: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
ab70: 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72 5b 50 32   r[P3]=func(r[P2
ab80: 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f  @P5]).**.** Invo
ab90: 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  ke a user functi
aba0: 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69 6e  on (P4 is a poin
abb0: 74 65 72 20 74 6f 20 61 20 46 75 6e 63 74 69 6f  ter to a Functio
abc0: 6e 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  n structure that
abd0: 0a 2a 2a 20 64 65 66 69 6e 65 73 20 74 68 65 20  .** defines the 
abe0: 66 75 6e 63 74 69 6f 6e 29 20 77 69 74 68 20 50  function) with P
abf0: 35 20 61 72 67 75 6d 65 6e 74 73 20 74 61 6b 65  5 arguments take
ac00: 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
ac10: 50 32 20 61 6e 64 0a 2a 2a 20 73 75 63 63 65 73  P2 and.** succes
ac20: 73 6f 72 73 2e 20 20 54 68 65 20 72 65 73 75 6c  sors.  The resul
ac30: 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
ac40: 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  n is stored in r
ac50: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 52  egister P3..** R
ac60: 65 67 69 73 74 65 72 20 50 33 20 6d 75 73 74 20  egister P3 must 
ac70: 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68  not be one of th
ac80: 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74  e function input
ac90: 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  s..**.** P1 is a
aca0: 20 33 32 2d 62 69 74 20 62 69 74 6d 61 73 6b 20   32-bit bitmask 
acb0: 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68  indicating wheth
acc0: 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 61  er or not each a
acd0: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a  rgument to the .
ace0: 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20  ** function was 
acf0: 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65  determined to be
ad00: 20 63 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d   constant at com
ad10: 70 69 6c 65 20 74 69 6d 65 2e 20 49 66 20 74 68  pile time. If th
ad20: 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d  e first.** argum
ad30: 65 6e 74 20 77 61 73 20 63 6f 6e 73 74 61 6e 74  ent was constant
ad40: 20 74 68 65 6e 20 62 69 74 20 30 20 6f 66 20 50   then bit 0 of P
ad50: 31 20 69 73 20 73 65 74 2e 20 54 68 69 73 20 69  1 is set. This i
ad60: 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  s used to determ
ad70: 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d  ine.** whether m
ad80: 65 74 61 20 64 61 74 61 20 61 73 73 6f 63 69 61  eta data associa
ad90: 74 65 64 20 77 69 74 68 20 61 20 75 73 65 72 20  ted with a user 
ada0: 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e  function argumen
adb0: 74 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73  t using the.** s
adc0: 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64 61  qlite3_set_auxda
add0: 74 61 28 29 20 41 50 49 20 6d 61 79 20 62 65 20  ta() API may be 
ade0: 73 61 66 65 6c 79 20 72 65 74 61 69 6e 65 64 20  safely retained 
adf0: 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a  until the next.*
ae00: 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20  * invocation of 
ae10: 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  this opcode..**.
ae20: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 41 67 67  ** See also: Agg
ae30: 53 74 65 70 20 61 6e 64 20 41 67 67 46 69 6e 61  Step and AggFina
ae40: 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 75 6e  l.*/.case OP_Fun
ae50: 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69  ction: {.  int i
ae60: 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 3b 0a 20  ;.  Mem *pArg;. 
ae70: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
ae80: 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f   ctx;.  sqlite3_
ae90: 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 20  value **apVal;. 
aea0: 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70   int n;..  n = p
aeb0: 4f 70 2d 3e 70 35 3b 0a 20 20 61 70 56 61 6c 20  Op->p5;.  apVal 
aec0: 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73  = p->apArg;.  as
aed0: 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e  sert( apVal || n
aee0: 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
aef0: 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
af00: 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
af10: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
af20: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
af30: 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p3];.  memAbo
af40: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
af50: 75 74 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  ut);..  assert( 
af60: 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32  n==0 || (pOp->p2
af70: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c  >0 && pOp->p2+n<
af80: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
af90: 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61 73  rsor)+1) );.  as
afa0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
afb0: 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p2 || pOp->p3
afc0: 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20  >=pOp->p2+n );. 
afd0: 20 70 41 72 67 20 3d 20 26 61 4d 65 6d 5b 70 4f   pArg = &aMem[pO
afe0: 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d  p->p2];.  for(i=
aff0: 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72  0; i<n; i++, pAr
b000: 67 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  g++){.    assert
b010: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 41 72  ( memIsValid(pAr
b020: 67 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b  g) );.    apVal[
b030: 69 5d 20 3d 20 70 41 72 67 3b 0a 20 20 20 20 44  i] = pArg;.    D
b040: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 41  eephemeralize(pA
b050: 72 67 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  rg);.    sqlite3
b060: 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
b070: 28 70 41 72 67 29 3b 0a 20 20 20 20 52 45 47 49  (pArg);.    REGI
b080: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
b090: 70 32 2b 69 2c 20 70 41 72 67 29 3b 0a 20 20 7d  p2+i, pArg);.  }
b0a0: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
b0b0: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43  >p4type==P4_FUNC
b0c0: 44 45 46 20 29 3b 0a 20 20 63 74 78 2e 70 46 75  DEF );.  ctx.pFu
b0d0: 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75  nc = pOp->p4.pFu
b0e0: 6e 63 3b 0a 20 20 63 74 78 2e 69 4f 70 20 3d 20  nc;.  ctx.iOp = 
b0f0: 70 63 3b 0a 20 20 63 74 78 2e 70 56 64 62 65 20  pc;.  ctx.pVdbe 
b100: 3d 20 70 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f  = p;..  /* The o
b110: 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79 20 61  utput cell may a
b120: 6c 72 65 61 64 79 20 68 61 76 65 20 61 20 62 75  lready have a bu
b130: 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20  ffer allocated. 
b140: 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20 70 6f  Move.  ** the po
b150: 69 6e 74 65 72 20 74 6f 20 63 74 78 2e 73 20 73  inter to ctx.s s
b160: 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20 75 73  o in case the us
b170: 65 72 2d 66 75 6e 63 74 69 6f 6e 20 63 61 6e 20  er-function can 
b180: 75 73 65 0a 20 20 2a 2a 20 74 68 65 20 61 6c 72  use.  ** the alr
b190: 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20 62  eady allocated b
b1a0: 75 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f 66  uffer instead of
b1b0: 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 6e 65   allocating a ne
b1c0: 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 6d 65  w one..  */.  me
b1d0: 6d 63 70 79 28 26 63 74 78 2e 73 2c 20 70 4f 75  mcpy(&ctx.s, pOu
b1e0: 74 2c 20 73 69 7a 65 6f 66 28 4d 65 6d 29 29 3b  t, sizeof(Mem));
b1f0: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
b200: 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 70 4f 75   MEM_Null;.  pOu
b210: 74 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 70  t->xDel = 0;.  p
b220: 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30  Out->zMalloc = 0
b230: 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
b240: 61 67 28 26 63 74 78 2e 73 2c 20 4d 45 4d 5f 4e  ag(&ctx.s, MEM_N
b250: 75 6c 6c 29 3b 0a 0a 20 20 63 74 78 2e 66 45 72  ull);..  ctx.fEr
b260: 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20 20  rorOrAux = 0;.  
b270: 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e 66  if( ctx.pFunc->f
b280: 75 6e 63 46 6c 61 67 73 20 26 20 53 51 4c 49 54  uncFlags & SQLIT
b290: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
b2a0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
b2b0: 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73  Op>aOp );.    as
b2c0: 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34  sert( pOp[-1].p4
b2d0: 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51  type==P4_COLLSEQ
b2e0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
b2f0: 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
b300: 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20  OP_CollSeq );.  
b310: 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f    ctx.pColl = pO
b320: 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a  p[-1].p4.pColl;.
b330: 20 20 7d 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f    }.  db->lastRo
b340: 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b  wid = lastRowid;
b350: 0a 20 20 28 2a 63 74 78 2e 70 46 75 6e 63 2d 3e  .  (*ctx.pFunc->
b360: 78 46 75 6e 63 29 28 26 63 74 78 2c 20 6e 2c 20  xFunc)(&ctx, n, 
b370: 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20  apVal); /* IMP: 
b380: 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f  R-24505-23230 */
b390: 0a 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64  .  lastRowid = d
b3a0: 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 0a 20  b->lastRowid;.. 
b3b0: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
b3c0: 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 2f 2a 20  ailed ){.    /* 
b3d0: 45 76 65 6e 20 74 68 6f 75 67 68 20 61 20 6d 61  Even though a ma
b3e0: 6c 6c 6f 63 28 29 20 68 61 73 20 66 61 69 6c 65  lloc() has faile
b3f0: 64 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  d, the implement
b400: 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20 20  ation of the.   
b410: 20 2a 2a 20 75 73 65 72 20 66 75 6e 63 74 69 6f   ** user functio
b420: 6e 20 6d 61 79 20 68 61 76 65 20 63 61 6c 6c 65  n may have calle
b430: 64 20 61 6e 20 73 71 6c 69 74 65 33 5f 72 65 73  d an sqlite3_res
b440: 75 6c 74 5f 58 58 58 28 29 20 66 75 6e 63 74 69  ult_XXX() functi
b450: 6f 6e 0a 20 20 20 20 2a 2a 20 74 6f 20 72 65 74  on.    ** to ret
b460: 75 72 6e 20 61 20 76 61 6c 75 65 2e 20 54 68 65  urn a value. The
b470: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20   following call 
b480: 72 65 6c 65 61 73 65 73 20 61 6e 79 20 72 65 73  releases any res
b490: 6f 75 72 63 65 73 0a 20 20 20 20 2a 2a 20 61 73  ources.    ** as
b4a0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 73 75  sociated with su
b4b0: 63 68 20 61 20 76 61 6c 75 65 2e 0a 20 20 20 20  ch a value..    
b4c0: 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
b4d0: 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74  beMemRelease(&ct
b4e0: 78 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6e  x.s);.    goto n
b4f0: 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  o_mem;.  }..  /*
b500: 20 49 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   If the function
b510: 20 72 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72   returned an err
b520: 6f 72 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63  or, throw an exc
b530: 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20  eption */.  if( 
b540: 63 74 78 2e 66 45 72 72 6f 72 4f 72 41 75 78 20  ctx.fErrorOrAux 
b550: 29 7b 0a 20 20 20 20 69 66 28 20 63 74 78 2e 69  ){.    if( ctx.i
b560: 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 20 20  sError ){.      
b570: 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
b580: 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
b590: 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f  , "%s", sqlite3_
b5a0: 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e  value_text(&ctx.
b5b0: 73 29 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  s));.      rc = 
b5c0: 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 20  ctx.isError;.   
b5d0: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
b5e0: 62 65 44 65 6c 65 74 65 41 75 78 44 61 74 61 28  beDeleteAuxData(
b5f0: 70 2c 20 70 63 2c 20 70 4f 70 2d 3e 70 31 29 3b  p, pc, pOp->p1);
b600: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20  .  }..  /* Copy 
b610: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
b620: 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f 20  e function into 
b630: 72 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a 20  register P3 */. 
b640: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
b650: 67 65 45 6e 63 6f 64 69 6e 67 28 26 63 74 78 2e  geEncoding(&ctx.
b660: 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  s, encoding);.  
b670: 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 66 6c  assert( pOut->fl
b680: 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b  ags==MEM_Null );
b690: 0a 20 20 6d 65 6d 63 70 79 28 70 4f 75 74 2c 20  .  memcpy(pOut, 
b6a0: 26 63 74 78 2e 73 2c 20 73 69 7a 65 6f 66 28 4d  &ctx.s, sizeof(M
b6b0: 65 6d 29 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  em));.  if( sqli
b6c0: 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
b6d0: 28 70 4f 75 74 29 20 29 7b 0a 20 20 20 20 67 6f  (pOut) ){.    go
b6e0: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
b6f0: 0a 23 69 66 20 30 0a 20 20 2f 2a 20 54 68 65 20  .#if 0.  /* The 
b700: 61 70 70 2d 64 65 66 69 6e 65 64 20 66 75 6e 63  app-defined func
b710: 74 69 6f 6e 20 68 61 73 20 64 6f 6e 65 20 73 6f  tion has done so
b720: 6d 65 74 68 69 6e 67 20 74 68 61 74 20 61 73 20  mething that as 
b730: 63 61 75 73 65 64 20 74 68 69 73 0a 20 20 2a 2a  caused this.  **
b740: 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 65 78   statement to ex
b750: 70 69 72 65 2e 20 20 28 50 65 72 68 61 70 73 20  pire.  (Perhaps 
b760: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c  the function cal
b770: 6c 65 64 20 73 71 6c 69 74 65 33 5f 65 78 65 63  led sqlite3_exec
b780: 28 29 0a 20 20 2a 2a 20 77 69 74 68 20 61 20 43  ().  ** with a C
b790: 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74  REATE TABLE stat
b7a0: 65 6d 65 6e 74 2e 29 0a 20 20 2a 2f 0a 20 20 69  ement.).  */.  i
b7b0: 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29 20  f( p->expired ) 
b7c0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52  rc = SQLITE_ABOR
b7d0: 54 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 52 45 47  T;.#endif..  REG
b7e0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
b7f0: 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50  >p3, pOut);.  UP
b800: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
b810: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
b820: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
b830: 42 69 74 41 6e 64 20 50 31 20 50 32 20 50 33 20  BitAnd P1 P2 P3 
b840: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
b850: 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 26 72 5b    r[P3]=r[P1]&r[
b860: 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  P2].**.** Take t
b870: 68 65 20 62 69 74 2d 77 69 73 65 20 41 4e 44 20  he bit-wise AND 
b880: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
b890: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
b8a0: 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65   P2 and.** store
b8b0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b8c0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
b8d0: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
b8e0: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
b8f0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
b900: 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72 20  * Opcode: BitOr 
b910: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
b920: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
b930: 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a  =r[P1]|r[P2].**.
b940: 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d  ** Take the bit-
b950: 77 69 73 65 20 4f 52 20 6f 66 20 74 68 65 20 76  wise OR of the v
b960: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
b970: 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  r P1 and P2 and.
b980: 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  ** store the res
b990: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b9a0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
b9b0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
b9c0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b9d0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
b9e0: 3a 20 53 68 69 66 74 4c 65 66 74 20 50 31 20 50  : ShiftLeft P1 P
b9f0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
ba00: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
ba10: 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  2]<<r[P1].**.** 
ba20: 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65  Shift the intege
ba30: 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  r value in regis
ba40: 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 6c 65  ter P2 to the le
ba50: 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d  ft by the.** num
ba60: 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63  ber of bits spec
ba70: 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74  ified by the int
ba80: 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  eger in register
ba90: 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68   P1..** Store th
baa0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
bab0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
bac0: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
bad0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
bae0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
baf0: 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69 67 68  pcode: ShiftRigh
bb00: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
bb10: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
bb20: 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d 0a  3]=r[P2]>>r[P1].
bb30: 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20  **.** Shift the 
bb40: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e  integer value in
bb50: 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
bb60: 74 68 65 20 72 69 67 68 74 20 62 79 20 74 68 65  the right by the
bb70: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  .** number of bi
bb80: 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ts specified by 
bb90: 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72  the integer in r
bba0: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53  egister P1..** S
bbb0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
bbc0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
bbd0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
bbe0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
bbf0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
bc00: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41 6e  */.case OP_BitAn
bc10: 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d:              
bc20: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
bc30: 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e  _BITAND, in1, in
bc40: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
bc50: 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20  OP_BitOr:       
bc60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
bc70: 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20  me as TK_BITOR, 
bc80: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
bc90: 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c  /.case OP_ShiftL
bca0: 65 66 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  eft:            
bcb0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
bcc0: 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32  LSHIFT, in1, in2
bcd0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
bce0: 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b 20  P_ShiftRight: { 
bcf0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
bd00: 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c 20  e as TK_RSHIFT, 
bd10: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
bd20: 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75 36  /.  i64 iA;.  u6
bd30: 34 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b 0a  4 uA;.  i64 iB;.
bd40: 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e 31    u8 op;..  pIn1
bd50: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
bd60: 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
bd70: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f  m[pOp->p2];.  pO
bd80: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
bd90: 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p3];.  if( (pIn1
bda0: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
bdb0: 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c  flags) & MEM_Nul
bdc0: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
bdd0: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
bde0: 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Out);.    break;
bdf0: 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c 69  .  }.  iA = sqli
be00: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
be10: 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73 71  pIn2);.  iB = sq
be20: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
be30: 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d 20  e(pIn1);.  op = 
be40: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 69  pOp->opcode;.  i
be50: 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e 64  f( op==OP_BitAnd
be60: 20 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69 42   ){.    iA &= iB
be70: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70  ;.  }else if( op
be80: 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20 20  ==OP_BitOr ){.  
be90: 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d 65    iA |= iB;.  }e
bea0: 6c 73 65 20 69 66 28 20 69 42 21 3d 30 20 29 7b  lse if( iB!=0 ){
beb0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 70 3d  .    assert( op=
bec0: 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20 7c  =OP_ShiftRight |
bed0: 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  | op==OP_ShiftLe
bee0: 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66  ft );..    /* If
bef0: 20 73 68 69 66 74 69 6e 67 20 62 79 20 61 20 6e   shifting by a n
bf00: 65 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c 20  egative amount, 
bf10: 73 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74 68  shift in the oth
bf20: 65 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f 0a  er direction */.
bf30: 20 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b 0a      if( iB<0 ){.
bf40: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
bf50: 5f 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50 5f  _ShiftRight==OP_
bf60: 53 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a 20  ShiftLeft+1 );. 
bf70: 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f 53       op = 2*OP_S
bf80: 68 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20 6f  hiftLeft + 1 - o
bf90: 70 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69 42  p;.      iB = iB
bfa0: 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20 36  >(-64) ? -iB : 6
bfb0: 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66  4;.    }..    if
bfc0: 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20 20  ( iB>=64 ){.    
bfd0: 20 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c 7c    iA = (iA>=0 ||
bfe0: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66   op==OP_ShiftLef
bff0: 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20 20  t) ? 0 : -1;.   
c000: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65   }else{.      me
c010: 6d 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20 73  mcpy(&uA, &iA, s
c020: 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20 20  izeof(uA));.    
c030: 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68 69    if( op==OP_Shi
c040: 66 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20 20  ftLeft ){.      
c050: 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20 20    uA <<= iB;.   
c060: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
c070: 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20 20    uA >>= iB;.   
c080: 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78 74       /* Sign-ext
c090: 65 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20 73  end on a right s
c0a0: 68 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74 69  hift of a negati
c0b0: 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  ve number */.   
c0c0: 20 20 20 20 20 69 66 28 20 69 41 3c 30 20 29 20       if( iA<0 ) 
c0d0: 75 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30 78  uA |= ((((u64)0x
c0e0: 66 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c 30  ffffffff)<<32)|0
c0f0: 78 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28 36  xffffffff) << (6
c100: 34 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a 20  4-iB);.      }. 
c110: 20 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41 2c       memcpy(&iA,
c120: 20 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41 29   &uA, sizeof(iA)
c130: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  );.    }.  }.  p
c140: 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a 20  Out->u.i = iA;. 
c150: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
c160: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
c170: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
c180: 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50  pcode: AddImm  P
c190: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
c1a0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 31 5d 3d 72  nopsis:  r[P1]=r
c1b0: 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41  [P1]+P2.** .** A
c1c0: 64 64 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20  dd the constant 
c1d0: 50 32 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P2 to the value 
c1e0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
c1f0: 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69 73  ** The result is
c200: 20 61 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67   always an integ
c210: 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72  er..**.** To for
c220: 63 65 20 61 6e 79 20 72 65 67 69 73 74 65 72 20  ce any register 
c230: 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
c240: 2c 20 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f  , just add 0..*/
c250: 0a 63 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a  .case OP_AddImm:
c260: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
c270: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
c280: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
c290: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
c2a0: 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20  nge(p, pIn1);.  
c2b0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
c2c0: 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  tegerify(pIn1);.
c2d0: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70    pIn1->u.i += p
c2e0: 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b  Op->p2;.  break;
c2f0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
c300: 75 73 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a  ustBeInt P1 P2 *
c310: 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63   * *.** .** Forc
c320: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
c330: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
c340: 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66   an integer.  If
c350: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   the value.** in
c360: 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e   P1 is not an in
c370: 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74  teger and cannot
c380: 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
c390: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  to an integer.**
c3a0: 20 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f   without data lo
c3b0: 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d  ss, then jump im
c3c0: 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c  mediately to P2,
c3d0: 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20   or if P2==0.** 
c3e0: 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f  raise an SQLITE_
c3f0: 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70 74 69  MISMATCH excepti
c400: 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  on..*/.case OP_M
c410: 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20  ustBeInt: {     
c420: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
c430: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
c440: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
c450: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
c460: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
c470: 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66   ){.    applyAff
c480: 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49  inity(pIn1, SQLI
c490: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20  TE_AFF_NUMERIC, 
c4a0: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 69  encoding);.    i
c4b0: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
c4c0: 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
c4d0: 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
c4e0: 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  p2==0 ){.       
c4f0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53   rc = SQLITE_MIS
c500: 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 20 20 67  MATCH;.        g
c510: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
c520: 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 65  _error;.      }e
c530: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 63 20  lse{.        pc 
c540: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
c550: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
c560: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
c570: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
c580: 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pIn1, MEM_Int);
c590: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
c5a0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
c5b0: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
c5c0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41  /* Opcode: RealA
c5d0: 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a  ffinity P1 * * *
c5e0: 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69   *.**.** If regi
c5f0: 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e  ster P1 holds an
c600: 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74   integer convert
c610: 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61   it to a real va
c620: 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  lue..**.** This 
c630: 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 77  opcode is used w
c640: 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69  hen extracting i
c650: 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
c660: 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a  a column that.**
c670: 20 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69   has REAL affini
c680: 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e  ty.  Such column
c690: 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c   values may stil
c6a0: 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a  l be stored as.*
c6b0: 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20  * integers, for 
c6c0: 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 63 79  space efficiency
c6d0: 2c 20 62 75 74 20 61 66 74 65 72 20 65 78 74 72  , but after extr
c6e0: 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74  action we want t
c6f0: 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f  hem.** to have o
c700: 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65  nly a real value
c710: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
c720: 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20  lAffinity: {    
c730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c740: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
c750: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
c760: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
c770: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
c780: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
c790: 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b  emRealify(pIn1);
c7a0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
c7b0: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
c7c0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
c7d0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 54 65  ./* Opcode: ToTe
c7e0: 78 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  xt P1 * * * *.**
c7f0: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
c800: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
c810: 50 31 20 74 6f 20 62 65 20 74 65 78 74 2e 0a 2a  P1 to be text..*
c820: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
c830: 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65  s numeric, conve
c840: 72 74 20 69 74 20 74 6f 20 61 20 73 74 72 69 6e  rt it to a strin
c850: 67 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65  g using the.** e
c860: 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 73 70 72  quivalent of spr
c870: 69 6e 74 66 28 29 2e 20 20 42 6c 6f 62 20 76 61  intf().  Blob va
c880: 6c 75 65 73 20 61 72 65 20 75 6e 63 68 61 6e 67  lues are unchang
c890: 65 64 20 61 6e 64 0a 2a 2a 20 61 72 65 20 61 66  ed and.** are af
c8a0: 74 65 72 77 61 72 64 73 20 73 69 6d 70 6c 79 20  terwards simply 
c8b0: 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 74  interpreted as t
c8c0: 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  ext..**.** A NUL
c8d0: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
c8e0: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
c8f0: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
c900: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
c910: 65 20 4f 50 5f 54 6f 54 65 78 74 3a 20 7b 20 20  e OP_ToText: {  
c920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c930: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f  /* same as TK_TO
c940: 5f 54 45 58 54 2c 20 69 6e 31 20 2a 2f 0a 20 20  _TEXT, in1 */.  
c950: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
c960: 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p1];.  memAbou
c970: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
c980: 31 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1);.  if( pIn1->
c990: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
c9a0: 20 29 20 62 72 65 61 6b 3b 0a 20 20 61 73 73 65   ) break;.  asse
c9b0: 72 74 28 20 4d 45 4d 5f 53 74 72 3d 3d 28 4d 45  rt( MEM_Str==(ME
c9c0: 4d 5f 42 6c 6f 62 3e 3e 33 29 20 29 3b 0a 20 20  M_Blob>>3) );.  
c9d0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 3d 20 28  pIn1->flags |= (
c9e0: 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
c9f0: 42 6c 6f 62 29 3e 3e 33 3b 0a 20 20 61 70 70 6c  Blob)>>3;.  appl
ca00: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
ca10: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c  SQLITE_AFF_TEXT,
ca20: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 72 63   encoding);.  rc
ca30: 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49   = ExpandBlob(pI
ca40: 6e 31 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  n1);.  assert( p
ca50: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
ca60: 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c  _Str || db->mall
ca70: 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 70 49  ocFailed );.  pI
ca80: 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d  n1->flags &= ~(M
ca90: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c  EM_Int|MEM_Real|
caa0: 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 5a 65 72  MEM_Blob|MEM_Zer
cab0: 6f 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  o);.  UPDATE_MAX
cac0: 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b  _BLOBSIZE(pIn1);
cad0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
cae0: 4f 70 63 6f 64 65 3a 20 54 6f 42 6c 6f 62 20 50  Opcode: ToBlob P
caf0: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
cb00: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
cb10: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
cb20: 6f 20 62 65 20 61 20 42 4c 4f 42 2e 0a 2a 2a 20  o be a BLOB..** 
cb30: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
cb40: 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72 74  numeric, convert
cb50: 20 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20   it to a string 
cb60: 66 69 72 73 74 2e 0a 2a 2a 20 53 74 72 69 6e 67  first..** String
cb70: 73 20 61 72 65 20 73 69 6d 70 6c 79 20 72 65 69  s are simply rei
cb80: 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 62 6c  nterpreted as bl
cb90: 6f 62 73 20 77 69 74 68 20 6e 6f 20 63 68 61 6e  obs with no chan
cba0: 67 65 0a 2a 2a 20 74 6f 20 74 68 65 20 75 6e 64  ge.** to the und
cbb0: 65 72 6c 79 69 6e 67 20 64 61 74 61 2e 0a 2a 2a  erlying data..**
cbc0: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
cbd0: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
cbe0: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
cbf0: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
cc00: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f  L..*/.case OP_To
cc10: 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20  Blob: {         
cc20: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
cc30: 20 61 73 20 54 4b 5f 54 4f 5f 42 4c 4f 42 2c 20   as TK_TO_BLOB, 
cc40: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
cc50: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
cc60: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
cc70: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62  s & MEM_Null ) b
cc80: 72 65 61 6b 3b 0a 20 20 69 66 28 20 28 70 49 6e  reak;.  if( (pIn
cc90: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  1->flags & MEM_B
cca0: 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61  lob)==0 ){.    a
ccb0: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
ccc0: 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  1, SQLITE_AFF_TE
ccd0: 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  XT, encoding);. 
cce0: 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d     assert( pIn1-
ccf0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72  >flags & MEM_Str
cd00: 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61   || db->mallocFa
cd10: 69 6c 65 64 20 29 3b 0a 20 20 20 20 4d 65 6d 53  iled );.    MemS
cd20: 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c  etTypeFlag(pIn1,
cd30: 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 65   MEM_Blob);.  }e
cd40: 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 66  lse{.    pIn1->f
cd50: 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 54 79  lags &= ~(MEM_Ty
cd60: 70 65 4d 61 73 6b 26 7e 4d 45 4d 5f 42 6c 6f 62  peMask&~MEM_Blob
cd70: 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f  );.  }.  UPDATE_
cd80: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e  MAX_BLOBSIZE(pIn
cd90: 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  1);.  break;.}..
cda0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 4e 75 6d  /* Opcode: ToNum
cdb0: 65 72 69 63 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  eric P1 * * * *.
cdc0: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
cdd0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
cde0: 72 20 50 31 20 74 6f 20 62 65 20 6e 75 6d 65 72  r P1 to be numer
cdf0: 69 63 20 28 65 69 74 68 65 72 20 61 6e 0a 2a 2a  ic (either an.**
ce00: 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20 66 6c   integer or a fl
ce10: 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 6e 75 6d  oating-point num
ce20: 62 65 72 2e 29 0a 2a 2a 20 49 66 20 74 68 65 20  ber.).** If the 
ce30: 76 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72  value is text or
ce40: 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f   blob, try to co
ce50: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20 75  nvert it to an u
ce60: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69  sing the.** equi
ce70: 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29  valent of atoi()
ce80: 20 6f 72 20 61 74 6f 66 28 29 20 61 6e 64 20 73   or atof() and s
ce90: 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73 75 63  tore 0 if no suc
cea0: 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 0a 2a 2a  h conversion .**
ceb0: 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a   is possible..**
cec0: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
ced0: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
cee0: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
cef0: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
cf00: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f  L..*/.case OP_To
cf10: 4e 75 6d 65 72 69 63 3a 20 7b 20 20 20 20 20 20  Numeric: {      
cf20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
cf30: 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 4e 55 4d  ame as TK_TO_NUM
cf40: 45 52 49 43 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  ERIC, in1 */.  p
cf50: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
cf60: 3e 70 31 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p1];.  sqlite3V
cf70: 64 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79 28 70  dbeMemNumerify(p
cf80: 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  In1);.  break;.}
cf90: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
cfa0: 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a  E_OMIT_CAST */..
cfb0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 49 6e 74  /* Opcode: ToInt
cfc0: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
cfd0: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
cfe0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
cff0: 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
d000: 72 2e 20 20 49 66 0a 2a 2a 20 54 68 65 20 76 61  r.  If.** The va
d010: 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79  lue is currently
d020: 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20   a real number, 
d030: 64 72 6f 70 20 69 74 73 20 66 72 61 63 74 69 6f  drop its fractio
d040: 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a 20 49 66 20  nal part..** If 
d050: 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78  the value is tex
d060: 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74  t or blob, try t
d070: 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  o convert it to 
d080: 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67  an integer using
d090: 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65   the.** equivale
d0a0: 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64  nt of atoi() and
d0b0: 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73   store 0 if no s
d0c0: 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  uch conversion i
d0d0: 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a  s possible..**.*
d0e0: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
d0f0: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
d100: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
d110: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
d120: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 49 6e  .*/.case OP_ToIn
d130: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
d140: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
d150: 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20 69 6e 31 20   TK_TO_INT, in1 
d160: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
d170: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
d180: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
d190: 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
d1a0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
d1b0: 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
d1c0: 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
d1d0: 3b 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  ;.}..#if !define
d1e0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  d(SQLITE_OMIT_CA
d1f0: 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  ST) && !defined(
d200: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
d210: 54 49 4e 47 5f 50 4f 49 4e 54 29 0a 2f 2a 20 4f  TING_POINT)./* O
d220: 70 63 6f 64 65 3a 20 54 6f 52 65 61 6c 20 50 31  pcode: ToReal P1
d230: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46   * * * *.**.** F
d240: 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  orce the value i
d250: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
d260: 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67 20 70   be a floating p
d270: 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20  oint number..** 
d280: 49 66 20 54 68 65 20 76 61 6c 75 65 20 69 73 20  If The value is 
d290: 63 75 72 72 65 6e 74 6c 79 20 61 6e 20 69 6e 74  currently an int
d2a0: 65 67 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74  eger, convert it
d2b0: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
d2c0: 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f  e is text or blo
d2d0: 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72  b, try to conver
d2e0: 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67  t it to an integ
d2f0: 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  er using the.** 
d300: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74  equivalent of at
d310: 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30  oi() and store 0
d320: 2e 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f  .0 if no such co
d330: 6e 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73  nversion is poss
d340: 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  ible..**.** A NU
d350: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
d360: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
d370: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
d380: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
d390: 73 65 20 4f 50 5f 54 6f 52 65 61 6c 3a 20 7b 20  se OP_ToReal: { 
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3b0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
d3c0: 4f 5f 52 45 41 4c 2c 20 69 6e 31 20 2a 2f 0a 20  O_REAL, in1 */. 
d3d0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
d3e0: 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p1];.  memAbo
d3f0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
d400: 6e 31 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  n1);.  if( (pIn1
d410: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
d420: 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  ll)==0 ){.    sq
d430: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c  lite3VdbeMemReal
d440: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  ify(pIn1);.  }. 
d450: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
d460: 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c   /* !defined(SQL
d470: 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 29 20 26  ITE_OMIT_CAST) &
d480: 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
d490: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
d4a0: 50 4f 49 4e 54 29 20 2a 2f 0a 0a 2f 2a 20 4f 70  POINT) */../* Op
d4b0: 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50  code: Lt P1 P2 P
d4c0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
d4d0: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c 72 5b  sis: if r[P1]<r[
d4e0: 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3] goto P2.**.*
d4f0: 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61  * Compare the va
d500: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
d510: 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20   P1 and P3.  If 
d520: 72 65 67 28 50 33 29 3c 72 65 67 28 50 31 29 20  reg(P3)<reg(P1) 
d530: 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20  then.** jump to 
d540: 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a 2a 2a  address P2.  .**
d550: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
d560: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74  E_JUMPIFNULL bit
d570: 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e   of P5 is set an
d580: 64 20 65 69 74 68 65 72 20 72 65 67 28 50 31 29  d either reg(P1)
d590: 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69   or.** reg(P3) i
d5a0: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
d5b0: 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20 74   the jump.  If t
d5c0: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
d5d0: 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20  NULL .** bit is 
d5e0: 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c 20  clear then fall 
d5f0: 74 68 72 6f 75 67 68 20 69 66 20 65 69 74 68 65  through if eithe
d600: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
d610: 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  L..**.** The SQL
d620: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72  ITE_AFF_MASK por
d630: 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20  tion of P5 must 
d640: 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63  be an affinity c
d650: 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51  haracter -.** SQ
d660: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53  LITE_AFF_TEXT, S
d670: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
d680: 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  R, and so forth.
d690: 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   An attempt is m
d6a0: 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63  ade .** to coerc
d6b0: 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63  e both inputs ac
d6c0: 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20  cording to this 
d6d0: 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20  affinity before 
d6e0: 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  the.** compariso
d6f0: 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68  n is made. If th
d700: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
d710: 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20  K is 0x00, then 
d720: 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e  numeric.** affin
d730: 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74  ity is used. Not
d740: 65 20 74 68 61 74 20 74 68 65 20 61 66 66 69 6e  e that the affin
d750: 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  ity conversions 
d760: 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61  are stored.** ba
d770: 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75  ck into the inpu
d780: 74 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  t registers P1 a
d790: 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20  nd P3.  So this 
d7a0: 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65  opcode can cause
d7b0: 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63  .** persistent c
d7c0: 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74  hanges to regist
d7d0: 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a  ers P1 and P3..*
d7e0: 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f  *.** Once any co
d7f0: 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74  nversions have t
d800: 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20  aken place, and 
d810: 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73  neither value is
d820: 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76   NULL, .** the v
d830: 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72  alues are compar
d840: 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75  ed. If both valu
d850: 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65  es are blobs the
d860: 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a  n memcmp() is.**
d870: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
d880: 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  ne the results o
d890: 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  f the comparison
d8a0: 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  .  If both value
d8b0: 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74  s.** are text, t
d8c0: 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69  hen the appropri
d8d0: 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ate collating fu
d8e0: 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64  nction specified
d8f0: 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73   in.** P4 is  us
d900: 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d  ed to do the com
d910: 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20  parison.  If P4 
d920: 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64  is not specified
d930: 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28   then.** memcmp(
d940: 29 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d  ) is used to com
d950: 70 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67  pare text string
d960: 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  .  If both value
d970: 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63  s are.** numeric
d980: 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63  , then a numeric
d990: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75   comparison is u
d9a0: 73 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20  sed. If the two 
d9b0: 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66  values.** are of
d9c0: 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73   different types
d9d0: 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61  , then numbers a
d9e0: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65  re considered le
d9f0: 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e  ss than.** strin
da00: 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61  gs and strings a
da10: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65  re considered le
da20: 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a  ss than blobs..*
da30: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
da40: 54 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20 6f  TE_STOREP2 bit o
da50: 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65  f P5 is set, the
da60: 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20  n do not jump.  
da70: 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72  Instead,.** stor
da80: 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75  e a boolean resu
da90: 6c 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f 72  lt (either 0, or
daa0: 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20   1, or NULL) in 
dab0: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
dac0: 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  ** If the SQLITE
dad0: 5f 4e 55 4c 4c 45 51 20 62 69 74 20 69 73 20 73  _NULLEQ bit is s
dae0: 65 74 20 69 6e 20 50 35 2c 20 74 68 65 6e 20 4e  et in P5, then N
daf0: 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63  ULL values are c
db00: 6f 6e 73 69 64 65 72 65 64 0a 2a 2a 20 65 71 75  onsidered.** equ
db10: 61 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68 65  al to one anothe
db20: 72 2c 20 70 72 6f 76 69 64 65 64 20 74 68 61 74  r, provided that
db30: 20 74 68 65 79 20 64 6f 20 6e 6f 74 20 68 61 76   they do not hav
db40: 65 20 74 68 65 69 72 20 4d 45 4d 5f 43 6c 65 61  e their MEM_Clea
db50: 72 65 64 0a 2a 2a 20 62 69 74 20 73 65 74 2e 0a  red.** bit set..
db60: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  */./* Opcode: Ne
db70: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
db80: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
db90: 72 5b 50 31 5d 21 3d 72 5b 50 33 5d 20 67 6f 74  r[P1]!=r[P3] got
dba0: 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  o P2.**.** This 
dbb0: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
dbc0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
dbd0: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
dbe0: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
dbf0: 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69  * the operands i
dc00: 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  n registers P1 a
dc10: 6e 64 20 50 33 20 61 72 65 20 6e 6f 74 20 65 71  nd P3 are not eq
dc20: 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20 4c 74  ual.  See the Lt
dc30: 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61   opcode for.** a
dc40: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
dc50: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ation..**.** If 
dc60: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
dc70: 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20   set in P5 then 
dc80: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f  the result of co
dc90: 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61  mparison is alwa
dca0: 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75  ys either.** tru
dcb0: 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69  e or false and i
dcc0: 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49  s never NULL.  I
dcd0: 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  f both operands 
dce0: 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68  are NULL then th
dcf0: 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63  e result.** of c
dd00: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 66 61 6c  omparison is fal
dd10: 73 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f  se.  If either o
dd20: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
dd30: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
dd40: 73 20 74 72 75 65 2e 0a 2a 2a 20 49 66 20 6e 65  s true..** If ne
dd50: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
dd60: 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74   NULL the result
dd70: 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
dd80: 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a  it would be if.*
dd90: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c  * the SQLITE_NUL
dda0: 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d  LEQ flag were om
ddb0: 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a  itted from P5..*
ddc0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20  /./* Opcode: Eq 
ddd0: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
dde0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
ddf0: 5b 50 31 5d 3d 3d 72 5b 50 33 5d 20 67 6f 74 6f  [P1]==r[P3] goto
de00: 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P2.**.** This w
de10: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
de20: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
de30: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
de40: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
de50: 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e   the operands in
de60: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
de70: 64 20 50 33 20 61 72 65 20 65 71 75 61 6c 2e 0a  d P3 are equal..
de80: 2a 2a 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  ** See the Lt op
de90: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
dea0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
deb0: 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  .**.** If SQLITE
dec0: 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69  _NULLEQ is set i
ded0: 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65  n P5 then the re
dee0: 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73  sult of comparis
def0: 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74  on is always eit
df00: 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66  her.** true or f
df10: 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65  alse and is neve
df20: 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68  r NULL.  If both
df30: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55   operands are NU
df40: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
df50: 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69  lt.** of compari
df60: 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 20 49 66  son is true.  If
df70: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
df80: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  is NULL then the
df90: 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65   result is false
dfa0: 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20  ..** If neither 
dfb0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
dfc0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68  the result is th
dfd0: 65 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75  e same as it wou
dfe0: 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20  ld be if.** the 
dff0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c  SQLITE_NULLEQ fl
e000: 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20  ag were omitted 
e010: 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f  from P5..*/./* O
e020: 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50 32 20  pcode: Le P1 P2 
e030: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
e040: 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c 3d  psis: if r[P1]<=
e050: 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a  r[P3] goto P2.**
e060: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
e070: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
e080: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
e090: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
e0a0: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63  aken if.** the c
e0b0: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
e0c0: 65 72 20 50 33 20 69 73 20 6c 65 73 73 20 74 68  er P3 is less th
e0d0: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
e0e0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
e0f0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
e100: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
e110: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
e120: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
e130: 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31  /* Opcode: Gt P1
e140: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
e150: 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
e160: 31 5d 3e 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32  1]>r[P3] goto P2
e170: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
e180: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
e190: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
e1a0: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
e1b0: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
e1c0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
e1d0: 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61  ister P3 is grea
e1e0: 74 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e  ter than the con
e1f0: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
e200: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
e210: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
e220: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
e230: 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ation..*/./* Opc
e240: 6f 64 65 3a 20 47 65 20 50 31 20 50 32 20 50 33  ode: Ge P1 P2 P3
e250: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
e260: 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 3d 72 5b  is: if r[P1]>=r[
e270: 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3] goto P2.**.*
e280: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
e290: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
e2a0: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
e2b0: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
e2c0: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  en if.** the con
e2d0: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
e2e0: 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
e2f0: 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
e300: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
e310: 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  * register P1.  
e320: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
e330: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
e340: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
e350: 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20  .case OP_Eq:    
e360: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
e370: 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d  me as TK_EQ, jum
e380: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
e390: 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20  ase OP_Ne:      
e3a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
e3b0: 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c   as TK_NE, jump,
e3c0: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
e3d0: 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20  e OP_Lt:        
e3e0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
e3f0: 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69  s TK_LT, jump, i
e400: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
e410: 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20  OP_Le:          
e420: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
e430: 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_LE, jump, in1
e440: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
e450: 5f 47 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Gt:            
e460: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
e470: 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _GT, jump, in1, 
e480: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  in3 */.case OP_G
e490: 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
e4a0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47   /* same as TK_G
e4b0: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
e4c0: 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20  3 */.  int res; 
e4d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
e4e0: 73 75 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d 70  sult of the comp
e4f0: 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20 61  arison of pIn1 a
e500: 67 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a 20  gainst pIn3 */. 
e510: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
e520: 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79       /* Affinity
e530: 20 74 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d 70   to use for comp
e540: 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36 20  arison */.  u16 
e550: 66 6c 61 67 73 31 3b 20 20 20 20 20 20 20 20 20  flags1;         
e560: 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69  /* Copy of initi
e570: 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 31  al value of pIn1
e580: 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31 36  ->flags */.  u16
e590: 20 66 6c 61 67 73 33 3b 20 20 20 20 20 20 20 20   flags3;        
e5a0: 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74   /* Copy of init
e5b0: 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e  ial value of pIn
e5c0: 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 70  3->flags */..  p
e5d0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
e5e0: 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26  >p1];.  pIn3 = &
e5f0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
e600: 20 66 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e   flags1 = pIn1->
e610: 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73 33 20  flags;.  flags3 
e620: 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20  = pIn3->flags;. 
e630: 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20 66   if( (flags1 | f
e640: 6c 61 67 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20  lags3)&MEM_Null 
e650: 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72  ){.    /* One or
e660: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
e670: 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 69  re NULL */.    i
e680: 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
e690: 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20 20  ITE_NULLEQ ){.  
e6a0: 20 20 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45      /* If SQLITE
e6b0: 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 28  _NULLEQ is set (
e6c0: 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79 20  which will only 
e6d0: 68 61 70 70 65 6e 20 69 66 20 74 68 65 20 6f 70  happen if the op
e6e0: 65 72 61 74 6f 72 20 69 73 0a 20 20 20 20 20 20  erator is.      
e6f0: 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f 4e  ** OP_Eq or OP_N
e700: 65 29 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  e) then take the
e710: 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65 70   jump or not dep
e720: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
e730: 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e 6f  r.      ** or no
e740: 74 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  t both operands 
e750: 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20 20  are null..      
e760: 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
e770: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
e780: 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  _Eq || pOp->opco
e790: 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20  de==OP_Ne );.   
e7a0: 20 20 20 61 73 73 65 72 74 28 20 28 66 6c 61 67     assert( (flag
e7b0: 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65 64  s1 & MEM_Cleared
e7c0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66  )==0 );.      if
e7d0: 28 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 4e 75  ( (flags1&MEM_Nu
e7e0: 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26  ll)!=0.       &&
e7f0: 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75 6c   (flags3&MEM_Nul
e800: 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20  l)!=0.       && 
e810: 28 66 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65 61  (flags3&MEM_Clea
e820: 72 65 64 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b  red)==0.      ){
e830: 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30  .        res = 0
e840: 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 61 72  ;  /* Results ar
e850: 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20  e equal */.     
e860: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
e870: 72 65 73 20 3d 20 31 3b 20 20 2f 2a 20 52 65 73  res = 1;  /* Res
e880: 75 6c 74 73 20 61 72 65 20 6e 6f 74 20 65 71 75  ults are not equ
e890: 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20  al */.      }.  
e8a0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
e8b0: 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  * SQLITE_NULLEQ 
e8c0: 69 73 20 63 6c 65 61 72 20 61 6e 64 20 61 74 20  is clear and at 
e8d0: 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e  least one operan
e8e0: 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20  d is NULL,.     
e8f0: 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 72 65 73   ** then the res
e900: 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55  ult is always NU
e910: 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65  LL..      ** The
e920: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
e930: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d  f the SQLITE_JUM
e940: 50 49 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73  PIFNULL bit is s
e950: 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  et..      */.   
e960: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26     if( pOp->p5 &
e970: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
e980: 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 70 63  LL ){.        pc
e990: 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
e9a0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f      }else if( pO
e9b0: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53  p->p5 & SQLITE_S
e9c0: 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20  TOREP2 ){.      
e9d0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
e9e0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20  Op->p2];.       
e9f0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
ea00: 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  pOut, MEM_Null);
ea10: 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45  .        REGISTE
ea20: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
ea30: 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 0a   pOut);.      }.
ea40: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
ea50: 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
ea60: 2f 2a 20 4e 65 69 74 68 65 72 20 6f 70 65 72 61  /* Neither opera
ea70: 6e 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20  nd is NULL.  Do 
ea80: 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f  a comparison. */
ea90: 0a 20 20 20 20 61 66 66 69 6e 69 74 79 20 3d 20  .    affinity = 
eaa0: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
eab0: 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69  _AFF_MASK;.    i
eac0: 66 28 20 61 66 66 69 6e 69 74 79 20 29 7b 0a 20  f( affinity ){. 
ead0: 20 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69       applyAffini
eae0: 74 79 28 70 49 6e 31 2c 20 61 66 66 69 6e 69 74  ty(pIn1, affinit
eaf0: 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  y, encoding);.  
eb00: 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
eb10: 79 28 70 49 6e 33 2c 20 61 66 66 69 6e 69 74 79  y(pIn3, affinity
eb20: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
eb30: 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f     if( db->mallo
eb40: 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e  cFailed ) goto n
eb50: 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 0a 20 20  o_mem;.    }..  
eb60: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
eb70: 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45  4type==P4_COLLSE
eb80: 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f  Q || pOp->p4.pCo
eb90: 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20 20 45 78 70  ll==0 );.    Exp
eba0: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20  andBlob(pIn1);. 
ebb0: 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49     ExpandBlob(pI
ebc0: 6e 33 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 73  n3);.    res = s
ebd0: 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65  qlite3MemCompare
ebe0: 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70  (pIn3, pIn1, pOp
ebf0: 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d  ->p4.pColl);.  }
ec00: 0a 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e  .  switch( pOp->
ec10: 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61  opcode ){.    ca
ec20: 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73  se OP_Eq:    res
ec30: 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20 20 62   = res==0;     b
ec40: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
ec50: 50 5f 4e 65 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Ne:    res = r
ec60: 65 73 21 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es!=0;     break
ec70: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 74  ;.    case OP_Lt
ec80: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 30  :    res = res<0
ec90: 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ;      break;.  
eca0: 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20    case OP_Le:   
ecb0: 20 72 65 73 20 3d 20 72 65 73 3c 3d 30 3b 20 20   res = res<=0;  
ecc0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
ecd0: 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 72 65 73  se OP_Gt:    res
ece0: 20 3d 20 72 65 73 3e 30 3b 20 20 20 20 20 20 62   = res>0;      b
ecf0: 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c  reak;.    defaul
ed00: 74 3a 20 20 20 20 20 20 20 72 65 73 20 3d 20 72  t:       res = r
ed10: 65 73 3e 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es>=0;     break
ed20: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70  ;.  }..  if( pOp
ed30: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54  ->p5 & SQLITE_ST
ed40: 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 70 4f 75  OREP2 ){.    pOu
ed50: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
ed60: 32 5d 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74  2];.    memAbout
ed70: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
ed80: 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  );.    MemSetTyp
ed90: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
eda0: 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Int);.    pOut->
edb0: 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20 20 20 52  u.i = res;.    R
edc0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
edd0: 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
ede0: 7d 65 6c 73 65 20 69 66 28 20 72 65 73 20 29 7b  }else if( res ){
edf0: 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
ee00: 32 2d 31 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55  2-1;.  }..  /* U
ee10: 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73 20  ndo any changes 
ee20: 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41 66 66  made by applyAff
ee30: 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20 69  inity() to the i
ee40: 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 2e 20  nput registers. 
ee50: 2a 2f 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  */.  pIn1->flags
ee60: 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26   = (pIn1->flags&
ee70: 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c  ~MEM_TypeMask) |
ee80: 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 54 79 70   (flags1&MEM_Typ
ee90: 65 4d 61 73 6b 29 3b 0a 20 20 70 49 6e 33 2d 3e  eMask);.  pIn3->
eea0: 66 6c 61 67 73 20 3d 20 28 70 49 6e 33 2d 3e 66  flags = (pIn3->f
eeb0: 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65 4d 61  lags&~MEM_TypeMa
eec0: 73 6b 29 20 7c 20 28 66 6c 61 67 73 33 26 4d 45  sk) | (flags3&ME
eed0: 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 62  M_TypeMask);.  b
eee0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
eef0: 64 65 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20  de: Permutation 
ef00: 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
ef10: 20 53 65 74 20 74 68 65 20 70 65 72 6d 75 74 61   Set the permuta
ef20: 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65  tion used by the
ef30: 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72   OP_Compare oper
ef40: 61 74 6f 72 20 74 6f 20 62 65 20 74 68 65 20 61  ator to be the a
ef50: 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67  rray.** of integ
ef60: 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a  ers in P4..**.**
ef70: 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
ef80: 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75   is only valid u
ef90: 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20 4f 50  ntil the next OP
efa0: 5f 43 6f 6d 70 61 72 65 20 74 68 61 74 20 68 61  _Compare that ha
efb0: 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f  s.** the OPFLAG_
efc0: 50 45 52 4d 55 54 45 20 62 69 74 20 73 65 74 20  PERMUTE bit set 
efd0: 69 6e 20 50 35 2e 20 54 79 70 69 63 61 6c 6c 79  in P5. Typically
efe0: 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74 61 74   the OP_Permutat
eff0: 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f  ion should .** o
f000: 63 63 75 72 20 69 6d 6d 65 64 69 61 74 65 6c 79  ccur immediately
f010: 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 4f 50   prior to the OP
f020: 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61 73  _Compare..*/.cas
f030: 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  e OP_Permutation
f040: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
f050: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
f060: 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73 73 65  TARRAY );.  asse
f070: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29  rt( pOp->p4.ai )
f080: 3b 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70  ;.  aPermute = p
f090: 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 62 72 65  Op->p4.ai;.  bre
f0a0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
f0b0: 3a 20 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20  : Compare P1 P2 
f0c0: 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 43  P3 P4 P5.**.** C
f0d0: 6f 6d 70 61 72 65 20 74 77 6f 20 76 65 63 74 6f  ompare two vecto
f0e0: 72 73 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  rs of registers 
f0f0: 69 6e 20 72 65 67 28 50 31 29 2e 2e 72 65 67 28  in reg(P1)..reg(
f100: 50 31 2b 50 33 2d 31 29 20 28 63 61 6c 6c 20 74  P1+P3-1) (call t
f110: 68 69 73 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41  his.** vector "A
f120: 22 29 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32  ") and in reg(P2
f130: 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20  )..reg(P2+P3-1) 
f140: 28 22 42 22 29 2e 20 20 53 61 76 65 20 74 68 65  ("B").  Save the
f150: 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68   result of.** th
f160: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72  e comparison for
f170: 20 75 73 65 20 62 79 20 74 68 65 20 6e 65 78 74   use by the next
f180: 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63   OP_Jump instruc
f190: 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68  t..**.** If P5 h
f1a0: 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45  as the OPFLAG_PE
f1b0: 52 4d 55 54 45 20 62 69 74 20 73 65 74 2c 20 74  RMUTE bit set, t
f1c0: 68 65 6e 20 74 68 65 20 6f 72 64 65 72 20 6f 66  hen the order of
f1d0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 0a 2a   comparison is.*
f1e0: 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  * determined by 
f1f0: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
f200: 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f  OP_Permutation o
f210: 70 65 72 61 74 6f 72 2e 20 20 49 66 20 74 68 65  perator.  If the
f220: 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  .** OPFLAG_PERMU
f230: 54 45 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c  TE bit is clear,
f240: 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 61   then register a
f250: 72 65 20 63 6f 6d 70 61 72 65 64 20 69 6e 20 73  re compared in s
f260: 65 71 75 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64  equential.** ord
f270: 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  er..**.** P4 is 
f280: 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
f290: 75 72 65 20 74 68 61 74 20 64 65 66 69 6e 65 73  ure that defines
f2a0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
f2b0: 6e 63 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a  nces and sort.**
f2c0: 20 6f 72 64 65 72 73 20 66 6f 72 20 74 68 65 20   orders for the 
f2d0: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65  comparison.  The
f2e0: 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70   permutation app
f2f0: 6c 69 65 73 20 74 6f 20 72 65 67 69 73 74 65 72  lies to register
f300: 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20  s.** only.  The 
f310: 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73  KeyInfo elements
f320: 20 61 72 65 20 75 73 65 64 20 73 65 71 75 65 6e   are used sequen
f330: 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  tially..**.** Th
f340: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  e comparison is 
f350: 61 20 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f  a sort compariso
f360: 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70  n, so NULLs comp
f370: 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55  are equal,.** NU
f380: 4c 4c 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  LLs are less tha
f390: 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65  n numbers, numbe
f3a0: 72 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  rs are less than
f3b0: 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64   strings,.** and
f3c0: 20 73 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73   strings are les
f3d0: 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f  s than blobs..*/
f3e0: 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65  .case OP_Compare
f3f0: 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69  : {.  int n;.  i
f400: 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a  nt i;.  int p1;.
f410: 20 20 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73    int p2;.  cons
f420: 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49  t KeyInfo *pKeyI
f430: 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a  nfo;.  int idx;.
f440: 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c    CollSeq *pColl
f450: 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e  ;    /* Collatin
f460: 67 20 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73  g sequence to us
f470: 65 20 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a  e on this term *
f480: 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20  /.  int bRev;   
f490: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66         /* True f
f4a0: 6f 72 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f  or DESCENDING so
f4b0: 72 74 20 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 69  rt order */..  i
f4c0: 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  f( (pOp->p5 & OP
f4d0: 46 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d 3d 30  FLAG_PERMUTE)==0
f4e0: 20 29 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b   ) aPermute = 0;
f4f0: 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  .  n = pOp->p3;.
f500: 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70    pKeyInfo = pOp
f510: 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
f520: 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a   assert( n>0 );.
f530: 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
f540: 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20  fo!=0 );.  p1 = 
f550: 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20  pOp->p1;.  p2 = 
f560: 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 20 53 51 4c  pOp->p2;.#if SQL
f570: 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
f580: 61 50 65 72 6d 75 74 65 20 29 7b 0a 20 20 20 20  aPermute ){.    
f590: 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20  int k, mx = 0;. 
f5a0: 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b     for(k=0; k<n;
f5b0: 20 6b 2b 2b 29 20 69 66 28 20 61 50 65 72 6d 75   k++) if( aPermu
f5c0: 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20  te[k]>mx ) mx = 
f5d0: 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20  aPermute[k];.   
f5e0: 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26   assert( p1>0 &&
f5f0: 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d   p1+mx<=(p->nMem
f600: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29  -p->nCursor)+1 )
f610: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  ;.    assert( p2
f620: 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d 28 70 2d  >0 && p2+mx<=(p-
f630: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
f640: 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  )+1 );.  }else{.
f650: 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30      assert( p1>0
f660: 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d   && p1+n<=(p->nM
f670: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
f680: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
f690: 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70  p2>0 && p2+n<=(p
f6a0: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
f6b0: 72 29 2b 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64  r)+1 );.  }.#end
f6c0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  if /* SQLITE_DEB
f6d0: 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b  UG */.  for(i=0;
f6e0: 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20   i<n; i++){.    
f6f0: 69 64 78 20 3d 20 61 50 65 72 6d 75 74 65 20 3f  idx = aPermute ?
f700: 20 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69   aPermute[i] : i
f710: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
f720: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
f730: 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 61  1+idx]) );.    a
f740: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
f750: 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29  d(&aMem[p2+idx])
f760: 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52   );.    REGISTER
f770: 5f 54 52 41 43 45 28 70 31 2b 69 64 78 2c 20 26  _TRACE(p1+idx, &
f780: 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20  aMem[p1+idx]);. 
f790: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
f7a0: 45 28 70 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b  E(p2+idx, &aMem[
f7b0: 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61 73  p2+idx]);.    as
f7c0: 73 65 72 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f  sert( i<pKeyInfo
f7d0: 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20 20 20  ->nField );.    
f7e0: 70 43 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f  pColl = pKeyInfo
f7f0: 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20  ->aColl[i];.    
f800: 62 52 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d  bRev = pKeyInfo-
f810: 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a  >aSortOrder[i];.
f820: 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73      iCompare = s
f830: 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65  qlite3MemCompare
f840: 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20  (&aMem[p1+idx], 
f850: 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70  &aMem[p2+idx], p
f860: 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20 69  Coll);.    if( i
f870: 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20 20 20  Compare ){.     
f880: 20 69 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d   if( bRev ) iCom
f890: 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65  pare = -iCompare
f8a0: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
f8b0: 20 20 20 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d     }.  }.  aPerm
f8c0: 75 74 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  ute = 0;.  break
f8d0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
f8e0: 4a 75 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20  Jump P1 P2 P3 * 
f8f0: 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
f900: 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  the instruction 
f910: 61 74 20 61 64 64 72 65 73 73 20 50 31 2c 20 50  at address P1, P
f920: 32 2c 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69  2, or P3 dependi
f930: 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a  ng on whether.**
f940: 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63   in the most rec
f950: 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69  ent OP_Compare i
f960: 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50  nstruction the P
f970: 31 20 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73  1 vector was les
f980: 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20  s than.** equal 
f990: 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74  to, or greater t
f9a0: 68 61 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f  han the P2 vecto
f9b0: 72 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  r, respectively.
f9c0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70  .*/.case OP_Jump
f9d0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
f9e0: 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28  /* jump */.  if(
f9f0: 20 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20   iCompare<0 ){. 
fa00: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 31 20     pc = pOp->p1 
fa10: 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  - 1;.  }else if(
fa20: 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a   iCompare==0 ){.
fa30: 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
fa40: 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   - 1;.  }else{. 
fa50: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 33 20     pc = pOp->p3 
fa60: 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
fa70: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
fa80: 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  And P1 P2 P3 * *
fa90: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
faa0: 50 33 5d 3d 28 72 5b 50 31 5d 20 26 26 20 72 5b  P3]=(r[P1] && r[
fab0: 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20  P2]).**.** Take 
fac0: 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20  the logical AND 
fad0: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
fae0: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
faf0: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74  d P2 and.** writ
fb00: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74  e the result int
fb10: 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  o register P3..*
fb20: 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
fb30: 31 20 6f 72 20 50 32 20 69 73 20 30 20 28 66 61  1 or P2 is 0 (fa
fb40: 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20 72 65  lse) then the re
fb50: 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69  sult is 0 even i
fb60: 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69  f.** the other i
fb70: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41  nput is NULL.  A
fb80: 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f   NULL and true o
fb90: 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65  r two NULLs give
fba0: 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75  .** a NULL outpu
fbb0: 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t..*/./* Opcode:
fbc0: 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a   Or P1 P2 P3 * *
fbd0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
fbe0: 50 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20 72 5b  P3]=(r[P1] || r[
fbf0: 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20  P2]).**.** Take 
fc00: 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f  the logical OR o
fc10: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
fc20: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
fc30: 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
fc40: 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20 72 65  the answer in re
fc50: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a  gister P3..**.**
fc60: 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72   If either P1 or
fc70: 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28   P2 is nonzero (
fc80: 74 72 75 65 29 20 74 68 65 6e 20 74 68 65 20 72  true) then the r
fc90: 65 73 75 6c 74 20 69 73 20 31 20 28 74 72 75 65  esult is 1 (true
fca0: 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74 68 65  ).** even if the
fcb0: 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20   other input is 
fcc0: 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e  NULL.  A NULL an
fcd0: 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e  d false or two N
fce0: 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e  ULLs.** give a N
fcf0: 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63  ULL output..*/.c
fd00: 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20  ase OP_And:     
fd10: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
fd20: 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c   as TK_AND, in1,
fd30: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
fd40: 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20  se OP_Or: {     
fd50: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
fd60: 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69  as TK_OR, in1, i
fd70: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e  n2, out3 */.  in
fd80: 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74  t v1;    /* Left
fd90: 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41   operand:  0==FA
fda0: 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d  LSE, 1==TRUE, 2=
fdb0: 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c  =UNKNOWN or NULL
fdc0: 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20 20 20   */.  int v2;   
fdd0: 20 2f 2a 20 52 69 67 68 74 20 6f 70 65 72 61 6e   /* Right operan
fde0: 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d  d: 0==FALSE, 1==
fdf0: 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e  TRUE, 2==UNKNOWN
fe00: 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70   or NULL */..  p
fe10: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
fe20: 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p1];.  if( pIn1
fe30: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
fe40: 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32  ll ){.    v1 = 2
fe50: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76  ;.  }else{.    v
fe60: 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  1 = sqlite3VdbeI
fe70: 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  ntValue(pIn1)!=0
fe80: 3b 0a 20 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26  ;.  }.  pIn2 = &
fe90: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
fea0: 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73   if( pIn2->flags
feb0: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
fec0: 20 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c     v2 = 2;.  }el
fed0: 73 65 7b 0a 20 20 20 20 76 32 20 3d 20 73 71 6c  se{.    v2 = sql
fee0: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
fef0: 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20  (pIn2)!=0;.  }. 
ff00: 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
ff10: 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20  ==OP_And ){.    
ff20: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73  static const uns
ff30: 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f 6c  igned char and_l
ff40: 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c  ogic[] = { 0, 0,
ff50: 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20   0, 0, 1, 2, 0, 
ff60: 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d  2, 2 };.    v1 =
ff70: 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b   and_logic[v1*3+
ff80: 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  v2];.  }else{.  
ff90: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75    static const u
ffa0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72 5f  nsigned char or_
ffb0: 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31  logic[] = { 0, 1
ffc0: 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c  , 2, 1, 1, 1, 2,
ffd0: 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20   1, 2 };.    v1 
ffe0: 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b  = or_logic[v1*3+
fff0: 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20  v2];.  }.  pOut 
10000 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
10010 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b  ;.  if( v1==2 ){
10020 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
10030 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75  lag(pOut, MEM_Nu
10040 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ll);.  }else{.  
10050 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31    pOut->u.i = v1
10060 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
10070 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
10080 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  nt);.  }.  break
10090 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
100a0 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Not P1 P2 * * *.
100b0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
100c0 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  2]= !r[P1].**.**
100d0 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 76   Interpret the v
100e0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
100f0 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e   P1 as a boolean
10100 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65 20 74   value.  Store t
10110 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f  he.** boolean co
10120 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67 69  mplement in regi
10130 73 74 65 72 20 50 32 2e 20 20 49 66 20 74 68 65  ster P2.  If the
10140 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
10150 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c  er P1 is .** NUL
10160 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69  L, then a NULL i
10170 73 20 73 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a  s stored in P2..
10180 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20  */.case OP_Not: 
10190 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
101a0 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
101b0 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f  OT, in1, out2 */
101c0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
101d0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
101e0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
101f0 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
10200 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
10210 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
10220 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
10230 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
10240 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
10250 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 21 73  etInt64(pOut, !s
10260 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
10270 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20  ue(pIn1));.  }. 
10280 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
10290 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20  code: BitNot P1 
102a0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
102b0 70 73 69 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b  psis: r[P1]= ~r[
102c0 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  P1].**.** Interp
102d0 72 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ret the content 
102e0 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 61  of register P1 a
102f0 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53  s an integer.  S
10300 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73  tore the.** ones
10310 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74  -complement of t
10320 68 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f  he P1 value into
10330 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
10340 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20  f P1 holds.** a 
10350 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20  NULL then store 
10360 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f  a NULL in P2..*/
10370 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a  .case OP_BitNot:
10380 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
10390 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
103a0 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a  NOT, in1, out2 *
103b0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
103c0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
103d0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
103e0 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2];.  if( pIn1->
103f0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
10400 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
10410 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
10420 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ut);.  }else{.  
10430 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
10440 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 7e  SetInt64(pOut, ~
10450 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
10460 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a  lue(pIn1));.  }.
10470 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
10480 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20 50  pcode: Once P1 P
10490 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68  2 * * *.**.** Ch
104a0 65 63 6b 20 69 66 20 4f 50 5f 4f 6e 63 65 20 66  eck if OP_Once f
104b0 6c 61 67 20 50 31 20 69 73 20 73 65 74 2e 20 49  lag P1 is set. I
104c0 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  f so, jump to in
104d0 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74  struction P2. Ot
104e0 68 65 72 77 69 73 65 2c 0a 2a 2a 20 73 65 74 20  herwise,.** set 
104f0 74 68 65 20 66 6c 61 67 20 61 6e 64 20 66 61 6c  the flag and fal
10500 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
10510 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
10520 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
10530 64 73 2c 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f  ds,.** this opco
10540 64 65 20 63 61 75 73 65 73 20 61 6c 6c 20 66 6f  de causes all fo
10550 6c 6c 6f 77 69 6e 67 20 75 70 20 63 6f 64 65 73  llowing up codes
10560 20 75 70 20 74 68 72 6f 75 67 68 20 50 32 20 28   up through P2 (
10570 62 75 74 20 6e 6f 74 20 69 6e 63 6c 75 64 69 6e  but not includin
10580 67 0a 2a 2a 20 50 32 29 20 74 6f 20 72 75 6e 20  g.** P2) to run 
10590 6a 75 73 74 20 6f 6e 63 65 20 61 6e 64 20 73 6b  just once and sk
105a0 69 70 70 65 64 20 6f 6e 20 73 75 62 73 65 71 75  ipped on subsequ
105b0 65 6e 74 20 74 69 6d 65 73 20 74 68 72 6f 75 67  ent times throug
105c0 68 20 74 68 65 20 6c 6f 6f 70 2e 0a 2a 2f 0a 63  h the loop..*/.c
105d0 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20  ase OP_Once: {  
105e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
105f0 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
10600 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65  pOp->p1<p->nOnce
10610 46 6c 61 67 20 29 3b 0a 20 20 69 66 28 20 70 2d  Flag );.  if( p-
10620 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e  >aOnceFlag[pOp->
10630 70 31 5d 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  p1] ){.    pc = 
10640 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c  pOp->p2-1;.  }el
10650 73 65 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65  se{.    p->aOnce
10660 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20  Flag[pOp->p1] = 
10670 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
10680 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
10690 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
106a0 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
106b0 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
106c0 65 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72  egister P1 is tr
106d0 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a  ue.  The value.*
106e0 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  * is considered 
106f0 74 72 75 65 20 69 66 20 69 74 20 69 73 20 6e 75  true if it is nu
10700 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65  meric and non-ze
10710 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ro.  If the valu
10720 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55  e.** in P1 is NU
10730 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
10740 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20 6e   jump if P3 is n
10750 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f  on-zero..*/./* O
10760 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20  pcode: IfNot P1 
10770 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
10780 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
10790 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
107a0 74 65 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e  ter P1 is False.
107b0 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69    The value.** i
107c0 73 20 63 6f 6e 73 69 64 65 72 65 64 20 66 61 6c  s considered fal
107d0 73 65 20 69 66 20 69 74 20 68 61 73 20 61 20 6e  se if it has a n
107e0 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20  umeric value of 
107f0 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61  zero.  If the va
10800 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
10810 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
10820 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73  he jump if P3 is
10830 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f   zero..*/.case O
10840 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20 20 20  P_If:           
10850 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
10860 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  n1 */.case OP_If
10870 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Not: {          
10880 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
10890 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e  /.  int c;.  pIn
108a0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
108b0 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1];.  if( pIn1->
108c0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
108d0 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d   ){.    c = pOp-
108e0 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69  >p3;.  }else{.#i
108f0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
10900 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
10910 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56      c = sqlite3V
10920 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
10930 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20  )!=0;.#else.    
10940 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  c = sqlite3VdbeR
10950 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d  ealValue(pIn1)!=
10960 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  0.0;.#endif.    
10970 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
10980 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20  =OP_IfNot ) c = 
10990 21 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 20  !c;.  }.  if( c 
109a0 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
109b0 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65  >p2-1;.  }.  bre
109c0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
109d0 3a 20 49 73 55 6e 64 65 66 20 50 31 20 50 32 20  : IsUndef P1 P2 
109e0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
109f0 73 3a 20 20 69 66 20 72 5b 50 31 5d 3d 3d 75 6e  s:  if r[P1]==un
10a00 64 65 66 69 6e 65 64 20 67 6f 74 6f 20 50 32 0a  defined goto P2.
10a10 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
10a20 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
10a30 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
10a40 75 6e 64 65 66 69 6e 65 64 0a 2a 2f 0a 63 61 73  undefined.*/.cas
10a50 65 20 4f 50 5f 49 73 55 6e 64 65 66 3a 20 7b 20  e OP_IsUndef: { 
10a60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
10a70 6d 70 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  mp */.  pIn1 = &
10a80 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
10a90 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
10aa0 73 20 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s & MEM_Undefine
10ab0 64 29 21 3d 30 20 29 7b 0a 20 20 20 20 70 63 20  d)!=0 ){.    pc 
10ac0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
10ad0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
10ae0 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c  * Opcode: IsNull
10af0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
10b00 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 72 5b  Synopsis:  if r[
10b10 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50  P1]==NULL goto P
10b20 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  2.**.** Jump to 
10b30 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
10b40 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
10b50 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
10b60 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20  OP_IsNull: {    
10b70 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
10b80 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75  as TK_ISNULL, ju
10b90 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
10ba0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
10bb0 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
10bc0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
10bd0 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20 70 63 20  l)!=0 ){.    pc 
10be0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
10bf0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
10c00 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c  * Opcode: NotNul
10c10 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  l P1 P2 * * *.**
10c20 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
10c30 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50  P1]!=NULL goto P
10c40 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  2.**.** Jump to 
10c50 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
10c60 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
10c70 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f  s not NULL.  .*/
10c80 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c  .case OP_NotNull
10c90 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
10ca0 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54  * same as TK_NOT
10cb0 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20  NULL, jump, in1 
10cc0 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
10cd0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
10ce0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
10cf0 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
10d00 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
10d10 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
10d20 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
10d30 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50  : Column P1 P2 P
10d40 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
10d50 73 69 73 3a 20 20 72 5b 50 33 5d 3d 50 58 0a 2a  sis:  r[P3]=PX.*
10d60 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
10d70 68 65 20 64 61 74 61 20 74 68 61 74 20 63 75 72  he data that cur
10d80 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f  sor P1 points to
10d90 20 61 73 20 61 20 73 74 72 75 63 74 75 72 65 20   as a structure 
10da0 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74  built using.** t
10db0 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e  he MakeRecord in
10dc0 73 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65  struction.  (See
10dd0 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20   the MakeRecord 
10de0 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
10df0 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ional.** informa
10e00 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66  tion about the f
10e10 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74  ormat of the dat
10e20 61 2e 29 20 20 45 78 74 72 61 63 74 20 74 68 65  a.)  Extract the
10e30 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a   P2-th column.**
10e40 20 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72   from this recor
10e50 64 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  d.  If there are
10e60 20 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b 31   less that (P2+1
10e70 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20  ) .** values in 
10e80 74 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72  the record, extr
10e90 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  act a NULL..**.*
10ea0 2a 20 54 68 65 20 76 61 6c 75 65 20 65 78 74 72  * The value extr
10eb0 61 63 74 65 64 20 69 73 20 73 74 6f 72 65 64 20  acted is stored 
10ec0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
10ed0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c  **.** If the col
10ee0 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65 77  umn contains few
10ef0 65 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64  er than P2 field
10f00 73 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74 20  s, then extract 
10f10 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20  a NULL.  Or,.** 
10f20 69 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65  if the P4 argume
10f30 6e 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75  nt is a P4_MEM u
10f40 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  se the value of 
10f50 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20  the P4 argument 
10f60 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  as.** the result
10f70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
10f80 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45  PFLAG_CLEARCACHE
10f90 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50   bit is set on P
10fa0 35 20 61 6e 64 20 50 31 20 69 73 20 61 20 70 73  5 and P1 is a ps
10fb0 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f  eudo-table curso
10fc0 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63  r,.** then the c
10fd0 61 63 68 65 20 6f 66 20 74 68 65 20 63 75 72 73  ache of the curs
10fe0 6f 72 20 69 73 20 72 65 73 65 74 20 70 72 69 6f  or is reset prio
10ff0 72 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20  r to extracting 
11000 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54  the column..** T
11010 68 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75  he first OP_Colu
11020 6d 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73 65  mn against a pse
11030 75 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20  udo-table after 
11040 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
11050 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69   content.** regi
11060 73 74 65 72 20 68 61 73 20 63 68 61 6e 67 65 64  ster has changed
11070 20 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69   should have thi
11080 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  s bit set..**.**
11090 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c   If the OPFLAG_L
110a0 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46  ENGTHARG and OPF
110b0 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62 69  LAG_TYPEOFARG bi
110c0 74 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50 35  ts are set on P5
110d0 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73   when.** the res
110e0 75 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65 65  ult is guarantee
110f0 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65  d to only be use
11100 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
11110 74 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29 0a  t of a length().
11120 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20 66  ** or typeof() f
11130 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63 74  unction, respect
11140 69 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64  ively.  The load
11150 69 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f  ing of large blo
11160 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69  bs can be.** ski
11170 70 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28  pped for length(
11180 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e  ) and all conten
11190 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62 65  t loading can be
111a0 20 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79 70   skipped for typ
111b0 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  eof()..*/.case O
111c0 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 36  P_Column: {.  i6
111d0 34 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b  4 payloadSize64;
111e0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
111f0 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  tes in the recor
11200 64 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20  d */.  int p2;  
11210 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c            /* col
11220 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72 65  umn number to re
11230 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64 62 65  trieve */.  Vdbe
11240 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f  Cursor *pC;    /
11250 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f  * The VDBE curso
11260 72 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20  r */.  BtCursor 
11270 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20 54 68 65  *pCrsr;   /* The
11280 20 42 54 72 65 65 20 63 75 72 73 6f 72 20 2a 2f   BTree cursor */
11290 0a 20 20 75 33 32 20 2a 61 54 79 70 65 3b 20 20  .  u32 *aType;  
112a0 20 20 20 20 20 20 2f 2a 20 61 54 79 70 65 5b 69        /* aType[i
112b0 5d 20 68 6f 6c 64 73 20 74 68 65 20 6e 75 6d 65  ] holds the nume
112c0 72 69 63 20 74 79 70 65 20 6f 66 20 74 68 65 20  ric type of the 
112d0 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  i-th column */. 
112e0 20 75 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20   u32 *aOffset;  
112f0 20 20 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69      /* aOffset[i
11300 5d 20 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73  ] is offset to s
11310 74 61 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72  tart of data for
11320 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   i-th column */.
11330 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20    int len;      
11340 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67       /* The leng
11350 74 68 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c  th of the serial
11360 69 7a 65 64 20 64 61 74 61 20 66 6f 72 20 74 68  ized data for th
11370 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e  e column */.  in
11380 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
11390 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
113a0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74   */.  Mem *pDest
113b0 3b 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72  ;        /* Wher
113c0 65 20 74 6f 20 77 72 69 74 65 20 74 68 65 20 65  e to write the e
113d0 78 74 72 61 63 74 65 64 20 76 61 6c 75 65 20 2a  xtracted value *
113e0 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20  /.  Mem sMem;   
113f0 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74         /* For st
11400 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64  oring the record
11410 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a   being decoded *
11420 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 44  /.  const u8 *zD
11430 61 74 61 3b 20 20 20 2f 2a 20 50 61 72 74 20 6f  ata;   /* Part o
11440 66 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69  f the record bei
11450 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20  ng decoded */.  
11460 63 6f 6e 73 74 20 75 38 20 2a 7a 48 64 72 3b 20  const u8 *zHdr; 
11470 20 20 20 2f 2a 20 4e 65 78 74 20 75 6e 70 61 72     /* Next unpar
11480 73 65 64 20 62 79 74 65 20 6f 66 20 74 68 65 20  sed byte of the 
11490 68 65 61 64 65 72 20 2a 2f 0a 20 20 63 6f 6e 73  header */.  cons
114a0 74 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20 2f  t u8 *zEndHdr; /
114b0 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72  * Pointer to fir
114c0 73 74 20 62 79 74 65 20 61 66 74 65 72 20 74 68  st byte after th
114d0 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 33  e header */.  u3
114e0 32 20 6f 66 66 73 65 74 3b 20 20 20 20 20 20 20  2 offset;       
114f0 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f 20   /* Offset into 
11500 74 68 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33  the data */.  u3
11510 32 20 73 7a 46 69 65 6c 64 3b 20 20 20 20 20 20  2 szField;      
11520 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
11530 74 65 73 20 69 6e 20 74 68 65 20 63 6f 6e 74 65  tes in the conte
11540 6e 74 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f  nt of a field */
11550 0a 20 20 75 33 32 20 61 76 61 69 6c 3b 20 20 20  .  u32 avail;   
11560 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
11570 6f 66 20 62 79 74 65 73 20 6f 66 20 61 76 61 69  of bytes of avai
11580 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f 0a 20 20  lable data */.  
11590 75 33 32 20 74 3b 20 20 20 20 20 20 20 20 20 20  u32 t;          
115a0 20 20 20 2f 2a 20 41 20 74 79 70 65 20 63 6f 64     /* A type cod
115b0 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72  e from the recor
115c0 64 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65  d header */.  Me
115d0 6d 20 2a 70 52 65 67 3b 20 20 20 20 20 20 20 20  m *pReg;        
115e0 20 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c 65 20   /* PseudoTable 
115f0 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 20 2a  input register *
11600 2f 0a 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  /..  p2 = pOp->p
11610 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
11620 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
11630 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
11640 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65  Cursor) );.  pDe
11650 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  st = &aMem[pOp->
11660 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
11670 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74  oChange(p, pDest
11680 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
11690 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
116a0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
116b0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
116c0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
116d0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
116e0 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e  assert( p2<pC->n
116f0 46 69 65 6c 64 20 29 3b 0a 20 20 61 54 79 70 65  Field );.  aType
11700 20 3d 20 70 43 2d 3e 61 54 79 70 65 3b 0a 20 20   = pC->aType;.  
11710 61 4f 66 66 73 65 74 20 3d 20 61 54 79 70 65 20  aOffset = aType 
11720 2b 20 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 23 69  + pC->nField;.#i
11730 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
11740 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
11750 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 56 74   assert( pC->pVt
11760 61 62 43 75 72 73 6f 72 3d 3d 30 20 29 3b 20 2f  abCursor==0 ); /
11770 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6e 65 76 65  * OP_Column neve
11780 72 20 63 61 6c 6c 65 64 20 6f 6e 20 76 69 72 74  r called on virt
11790 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e  ual table */.#en
117a0 64 69 66 0a 20 20 70 43 72 73 72 20 3d 20 70 43  dif.  pCrsr = pC
117b0 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  ->pCursor;.  ass
117c0 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 7c 7c  ert( pCrsr!=0 ||
117d0 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
117e0 52 65 67 3e 30 20 29 3b 20 2f 2a 20 70 43 72 73  Reg>0 ); /* pCrs
117f0 72 20 4e 55 4c 4c 20 6f 6e 20 50 73 65 75 64 6f  r NULL on Pseudo
11800 54 61 62 6c 65 73 20 2a 2f 0a 20 20 61 73 73 65  Tables */.  asse
11810 72 74 28 20 70 43 72 73 72 21 3d 30 20 7c 7c 20  rt( pCrsr!=0 || 
11820 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 20 20  pC->nullRow );  
11830 20 20 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 6e          /* pC->n
11840 75 6c 6c 52 6f 77 20 6f 6e 20 50 73 65 75 64 6f  ullRow on Pseudo
11850 54 61 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20  Tables */..  /* 
11860 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 63 61  If the cursor ca
11870 63 68 65 20 69 73 20 73 74 61 6c 65 2c 20 62 72  che is stale, br
11880 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64 61 74  ing it up-to-dat
11890 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  e */.  rc = sqli
118a0 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
118b0 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72  eto(pC);.  if( r
118c0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
118d0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
118e0 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  f( pC->cacheStat
118f0 75 73 21 3d 70 2d 3e 63 61 63 68 65 43 74 72 20  us!=p->cacheCtr 
11900 7c 7c 20 28 70 4f 70 2d 3e 70 35 26 4f 50 46 4c  || (pOp->p5&OPFL
11910 41 47 5f 43 4c 45 41 52 43 41 43 48 45 29 21 3d  AG_CLEARCACHE)!=
11920 30 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43 2d  0 ){.    if( pC-
11930 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
11940 20 20 69 66 28 20 70 43 72 73 72 3d 3d 30 20 29    if( pCrsr==0 )
11950 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
11960 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
11970 65 52 65 67 3e 30 20 29 3b 0a 20 20 20 20 20 20  eReg>0 );.      
11980 20 20 70 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70    pReg = &aMem[p
11990 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
119a0 67 5d 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  g];.        if( 
119b0 70 43 2d 3e 6d 75 6c 74 69 50 73 65 75 64 6f 20  pC->multiPseudo 
119c0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
119d0 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
119e0 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 52  owCopy(pDest, pR
119f0 65 67 2b 70 32 2c 20 4d 45 4d 5f 45 70 68 65 6d  eg+p2, MEM_Ephem
11a00 29 3b 0a 20 20 20 20 20 20 20 20 20 20 44 65 65  );.          Dee
11a10 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 44 65 73  phemeralize(pDes
11a20 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  t);.          go
11a30 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
11a40 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
11a50 20 20 20 20 61 73 73 65 72 74 28 20 70 52 65 67      assert( pReg
11a60 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
11a70 6f 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  ob );.        as
11a80 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
11a90 28 70 52 65 67 29 20 29 3b 0a 20 20 20 20 20 20  (pReg) );.      
11aa0 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a    pC->payloadSiz
11ab0 65 20 3d 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20  e = pC->szRow = 
11ac0 61 76 61 69 6c 20 3d 20 70 52 65 67 2d 3e 6e 3b  avail = pReg->n;
11ad0 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f  .        pC->aRo
11ae0 77 20 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e 7a  w = (u8*)pReg->z
11af0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
11b00 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70         MemSetTyp
11b10 65 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d  eFlag(pDest, MEM
11b20 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20  _Null);.        
11b30 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  goto op_column_o
11b40 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ut;.      }.    
11b50 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73  }else{.      ass
11b60 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20  ert( pCrsr );.  
11b70 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61      if( pC->isTa
11b80 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ble==0 ){.      
11b90 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
11ba0 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
11bb0 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20  lid(pCrsr) );.  
11bc0 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72        VVA_ONLY(r
11bd0 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65  c =) sqlite3Btre
11be0 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c 20  eKeySize(pCrsr, 
11bf0 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 29 3b  &payloadSize64);
11c00 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
11c10 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
11c20 3b 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73  ; /* True becaus
11c30 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74  e of CursorMovet
11c40 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a  o() call above *
11c50 2f 0a 20 20 20 20 20 20 20 20 2f 2a 20 73 71 6c  /.        /* sql
11c60 69 74 65 33 42 74 72 65 65 50 61 72 73 65 43 65  ite3BtreeParseCe
11c70 6c 6c 50 74 72 28 29 20 75 73 65 73 20 67 65 74  llPtr() uses get
11c80 56 61 72 69 6e 74 33 32 28 29 20 74 6f 20 65 78  Varint32() to ex
11c90 74 72 61 63 74 20 74 68 65 0a 20 20 20 20 20 20  tract the.      
11ca0 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69 7a    ** payload siz
11cb0 65 2c 20 73 6f 20 69 74 20 69 73 20 69 6d 70 6f  e, so it is impo
11cc0 73 73 69 62 6c 65 20 66 6f 72 20 70 61 79 6c 6f  ssible for paylo
11cd0 61 64 53 69 7a 65 36 34 20 74 6f 20 62 65 0a 20  adSize64 to be. 
11ce0 20 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 72         ** larger
11cf0 20 74 68 61 6e 20 33 32 20 62 69 74 73 2e 20 2a   than 32 bits. *
11d00 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  /.        assert
11d10 28 20 28 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  ( (payloadSize64
11d20 20 26 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33   & SQLITE_MAX_U3
11d30 32 29 3d 3d 28 75 36 34 29 70 61 79 6c 6f 61 64  2)==(u64)payload
11d40 53 69 7a 65 36 34 20 29 3b 0a 20 20 20 20 20 20  Size64 );.      
11d50 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c    pC->aRow = sql
11d60 69 74 65 33 42 74 72 65 65 4b 65 79 46 65 74 63  ite3BtreeKeyFetc
11d70 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29  h(pCrsr, &avail)
11d80 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61  ;.        pC->pa
11d90 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32  yloadSize = (u32
11da0 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a  )payloadSize64;.
11db0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
11dc0 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
11dd0 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
11de0 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b  sValid(pCrsr) );
11df0 0a 20 20 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c  .        VVA_ONL
11e00 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42  Y(rc =) sqlite3B
11e10 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72  treeDataSize(pCr
11e20 73 72 2c 20 26 70 43 2d 3e 70 61 79 6c 6f 61 64  sr, &pC->payload
11e30 53 69 7a 65 29 3b 0a 20 20 20 20 20 20 20 20 61  Size);.        a
11e40 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
11e50 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 44 61 74  E_OK );   /* Dat
11e60 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66  aSize() cannot f
11e70 61 69 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20 70  ail */.        p
11e80 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74 65  C->aRow = sqlite
11e90 33 42 74 72 65 65 44 61 74 61 46 65 74 63 68 28  3BtreeDataFetch(
11ea0 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a  pCrsr, &avail);.
11eb0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73        }.      as
11ec0 73 65 72 74 28 20 61 76 61 69 6c 3c 3d 36 35 35  sert( avail<=655
11ed0 33 36 20 29 3b 20 20 2f 2a 20 4d 61 78 69 6d 75  36 );  /* Maximu
11ee0 6d 20 70 61 67 65 20 73 69 7a 65 20 69 73 20 36  m page size is 6
11ef0 34 4b 69 42 20 2a 2f 0a 20 20 20 20 20 20 69 66  4KiB */.      if
11f00 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  ( pC->payloadSiz
11f10 65 20 3c 3d 20 28 75 33 32 29 61 76 61 69 6c 20  e <= (u32)avail 
11f20 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 73  ){.        pC->s
11f30 7a 52 6f 77 20 3d 20 70 43 2d 3e 70 61 79 6c 6f  zRow = pC->paylo
11f40 61 64 53 69 7a 65 3b 0a 20 20 20 20 20 20 7d 65  adSize;.      }e
11f50 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 43 2d  lse{.        pC-
11f60 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c 3b 0a  >szRow = avail;.
11f70 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
11f80 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  ( pC->payloadSiz
11f90 65 20 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c 69  e > (u32)db->aLi
11fa0 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
11fb0 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
11fc0 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
11fd0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
11fe0 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
11ff0 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43 74  tus = p->cacheCt
12000 72 3b 0a 20 20 20 20 70 43 2d 3e 69 48 64 72 4f  r;.    pC->iHdrO
12010 66 66 73 65 74 20 3d 20 67 65 74 56 61 72 69 6e  ffset = getVarin
12020 74 33 32 28 70 43 2d 3e 61 52 6f 77 2c 20 6f 66  t32(pC->aRow, of
12030 66 73 65 74 29 3b 0a 20 20 20 20 70 43 2d 3e 6e  fset);.    pC->n
12040 48 64 72 50 61 72 73 65 64 20 3d 20 30 3b 0a 20  HdrParsed = 0;. 
12050 20 20 20 61 4f 66 66 73 65 74 5b 30 5d 20 3d 20     aOffset[0] = 
12060 6f 66 66 73 65 74 3b 0a 20 20 20 20 69 66 28 20  offset;.    if( 
12070 61 76 61 69 6c 3c 6f 66 66 73 65 74 20 29 7b 0a  avail<offset ){.
12080 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52 6f        /* pC->aRo
12090 77 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20  w does not have 
120a0 74 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e 74 69  to hold the enti
120b0 72 65 20 72 6f 77 2c 20 62 75 74 20 69 74 20 64  re row, but it d
120c0 6f 65 73 20 61 74 20 6c 65 61 73 74 0a 20 20 20  oes at least.   
120d0 20 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63 6f     ** need to co
120e0 76 65 72 20 74 68 65 20 68 65 61 64 65 72 20 6f  ver the header o
120f0 66 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20 49  f the record.  I
12100 66 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20  f pC->aRow does 
12110 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20 20  not contain.    
12120 20 20 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65 74    ** the complet
12130 65 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20 73  e header, then s
12140 65 74 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20 66  et it to zero, f
12150 6f 72 63 69 6e 67 20 74 68 65 20 68 65 61 64 65  orcing the heade
12160 72 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a  r to be.      **
12170 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
12180 6f 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20 20  ocated. */.     
12190 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20   pC->aRow = 0;. 
121a0 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d       pC->szRow =
121b0 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f   0;.    }..    /
121c0 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f  * Make sure a co
121d0 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20 68  rrupt database h
121e0 61 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20  as not given us 
121f0 61 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64  an oversize head
12200 65 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74 68  er..    ** Do th
12210 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20  is now to avoid 
12220 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f  an oversize memo
12230 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20  ry allocation.. 
12240 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79 70     **.    ** Typ
12250 65 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65  e entries can be
12260 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35   between 1 and 5
12270 20 62 79 74 65 73 20 65 61 63 68 2e 20 20 42 75   bytes each.  Bu
12280 74 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20  t 4 and 5 byte. 
12290 20 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20     ** types use 
122a0 73 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61  so much data spa
122b0 63 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61  ce that there ca
122c0 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61  n only be 4096 a
122d0 6e 64 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a 20  nd 32 of.    ** 
122e0 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65  them, respective
122f0 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69  ly.  So the maxi
12300 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74  mum header lengt
12310 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61  h results from a
12320 0a 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74  .    ** 3-byte t
12330 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20  ype for each of 
12340 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33  the maximum of 3
12350 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75  2768 columns plu
12360 73 20 74 68 72 65 65 0a 20 20 20 20 2a 2a 20 65  s three.    ** e
12370 78 74 72 61 20 62 79 74 65 73 20 66 6f 72 20 74  xtra bytes for t
12380 68 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68  he header length
12390 20 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a   itself.  32768*
123a0 33 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20  3 + 3 = 98307.. 
123b0 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f 66     */.    if( of
123c0 66 73 65 74 20 3e 20 39 38 33 30 37 20 7c 7c 20  fset > 98307 || 
123d0 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e 70 61 79  offset > pC->pay
123e0 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20  loadSize ){.    
123f0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
12400 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20  RRUPT_BKPT;.    
12410 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
12420 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
12430 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  }..  /* Make sur
12440 65 20 61 74 20 6c 65 61 73 74 20 74 68 65 20 66  e at least the f
12450 69 72 73 74 20 70 32 2b 31 20 65 6e 74 72 69 65  irst p2+1 entrie
12460 73 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20  s of the header 
12470 68 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20 70  have been.  ** p
12480 61 72 73 65 64 20 61 6e 64 20 76 61 6c 69 64 20  arsed and valid 
12490 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 69  information is i
124a0 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64 20  n aOffset[] and 
124b0 61 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20  aType[]..  */.  
124c0 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  if( pC->nHdrPars
124d0 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a  ed<=p2 ){.    /*
124e0 20 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72   If there is mor
124f0 65 20 68 65 61 64 65 72 20 61 76 61 69 6c 61 62  e header availab
12500 6c 65 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69  le for parsing i
12510 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72  n the record, tr
12520 79 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72  y.    ** to extr
12530 61 63 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66  act additional f
12540 69 65 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68  ields up through
12550 20 74 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65   the p2+1-th fie
12560 6c 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  ld .    */.    i
12570 66 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65  f( pC->iHdrOffse
12580 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a  t<aOffset[0] ){.
12590 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75        /* Make su
125a0 72 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20  re zData points 
125b0 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65  to enough of the
125c0 20 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72   record to cover
125d0 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a   the header. */.
125e0 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52        if( pC->aR
125f0 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ow==0 ){.       
12600 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30   memset(&sMem, 0
12610 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b  , sizeof(sMem));
12620 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
12630 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
12640 42 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20  Btree(pCrsr, 0, 
12650 61 4f 66 66 73 65 74 5b 30 5d 2c 20 0a 20 20 20  aOffset[0], .   
12660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12680 20 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 20    !pC->isTable, 
12690 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20  &sMem);.        
126a0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
126b0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  K ){.          g
126c0 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72  oto op_column_er
126d0 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ror;.        }. 
126e0 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28         zData = (
126f0 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20  u8*)sMem.z;.    
12700 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
12710 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f   zData = pC->aRo
12720 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20  w;.      }.  .  
12730 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20 61      /* Fill in a
12740 54 79 70 65 5b 69 5d 20 61 6e 64 20 61 4f 66 66  Type[i] and aOff
12750 73 65 74 5b 69 5d 20 76 61 6c 75 65 73 20 74 68  set[i] values th
12760 72 6f 75 67 68 20 74 68 65 20 70 32 2d 74 68 20  rough the p2-th 
12770 66 69 65 6c 64 2e 20 2a 2f 0a 20 20 20 20 20 20  field. */.      
12780 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  i = pC->nHdrPars
12790 65 64 3b 0a 20 20 20 20 20 20 6f 66 66 73 65 74  ed;.      offset
127a0 20 3d 20 61 4f 66 66 73 65 74 5b 69 5d 3b 0a 20   = aOffset[i];. 
127b0 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 44 61 74       zHdr = zDat
127c0 61 20 2b 20 70 43 2d 3e 69 48 64 72 4f 66 66 73  a + pC->iHdrOffs
127d0 65 74 3b 0a 20 20 20 20 20 20 7a 45 6e 64 48 64  et;.      zEndHd
127e0 72 20 3d 20 7a 44 61 74 61 20 2b 20 61 4f 66 66  r = zData + aOff
127f0 73 65 74 5b 30 5d 3b 0a 20 20 20 20 20 20 61 73  set[0];.      as
12800 73 65 72 74 28 20 69 3c 3d 70 32 20 26 26 20 7a  sert( i<=p2 && z
12810 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 20  Hdr<zEndHdr );. 
12820 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20       do{.       
12830 20 69 66 28 20 7a 48 64 72 5b 30 5d 3c 30 78 38   if( zHdr[0]<0x8
12840 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 74  0 ){.          t
12850 20 3d 20 7a 48 64 72 5b 30 5d 3b 0a 20 20 20 20   = zHdr[0];.    
12860 20 20 20 20 20 20 7a 48 64 72 2b 2b 3b 0a 20 20        zHdr++;.  
12870 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
12880 20 20 20 20 20 20 20 7a 48 64 72 20 2b 3d 20 73         zHdr += s
12890 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
128a0 32 28 7a 48 64 72 2c 20 26 74 29 3b 0a 20 20 20  2(zHdr, &t);.   
128b0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61       }.        a
128c0 54 79 70 65 5b 69 5d 20 3d 20 74 3b 0a 20 20 20  Type[i] = t;.   
128d0 20 20 20 20 20 73 7a 46 69 65 6c 64 20 3d 20 73       szField = s
128e0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
128f0 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20  TypeLen(t);.    
12900 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 7a      offset += sz
12910 46 69 65 6c 64 3b 0a 20 20 20 20 20 20 20 20 69  Field;.        i
12920 66 28 20 6f 66 66 73 65 74 3c 73 7a 46 69 65 6c  f( offset<szFiel
12930 64 20 29 7b 20 20 2f 2a 20 54 72 75 65 20 69 66  d ){  /* True if
12940 20 6f 66 66 73 65 74 20 6f 76 65 72 66 6c 6f 77   offset overflow
12950 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7a  s */.          z
12960 48 64 72 20 3d 20 26 7a 45 6e 64 48 64 72 5b 31  Hdr = &zEndHdr[1
12970 5d 3b 20 20 2f 2a 20 46 6f 72 63 65 73 20 53 51  ];  /* Forces SQ
12980 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 72 65 74  LITE_CORRUPT ret
12990 75 72 6e 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 20  urn below */.   
129a0 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
129b0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
129c0 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20 61 4f 66  i++;.        aOf
129d0 66 73 65 74 5b 69 5d 20 3d 20 6f 66 66 73 65 74  fset[i] = offset
129e0 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20  ;.      }while( 
129f0 69 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45  i<=p2 && zHdr<zE
12a00 6e 64 48 64 72 20 29 3b 0a 20 20 20 20 20 20 70  ndHdr );.      p
12a10 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20  C->nHdrParsed = 
12a20 69 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69 48 64  i;.      pC->iHd
12a30 72 4f 66 66 73 65 74 20 3d 20 28 75 33 32 29 28  rOffset = (u32)(
12a40 7a 48 64 72 20 2d 20 7a 44 61 74 61 29 3b 0a 20  zHdr - zData);. 
12a50 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f       if( pC->aRo
12a60 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  w==0 ){.        
12a70 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
12a80 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20  lease(&sMem);.  
12a90 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73        sMem.flags
12aa0 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
12ab0 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a     }.  .      /*
12ac0 20 49 66 20 77 65 20 68 61 76 65 20 72 65 61 64   If we have read
12ad0 20 6d 6f 72 65 20 68 65 61 64 65 72 20 64 61 74   more header dat
12ae0 61 20 74 68 61 6e 20 77 61 73 20 63 6f 6e 74 61  a than was conta
12af0 69 6e 65 64 20 69 6e 20 74 68 65 20 68 65 61 64  ined in the head
12b00 65 72 2c 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20  er,.      ** or 
12b10 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  if the end of th
12b20 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70 70  e last field app
12b30 65 61 72 73 20 74 6f 20 62 65 20 70 61 73 74 20  ears to be past 
12b40 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0a 20  the end of the. 
12b50 20 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c 20       ** record, 
12b60 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66  or if the end of
12b70 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20   the last field 
12b80 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 62 65  appears to be be
12b90 66 6f 72 65 20 74 68 65 20 65 6e 64 0a 20 20 20  fore the end.   
12ba0 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63     ** of the rec
12bb0 6f 72 64 20 28 77 68 65 6e 20 61 6c 6c 20 66 69  ord (when all fi
12bc0 65 6c 64 73 20 70 72 65 73 65 6e 74 29 2c 20 74  elds present), t
12bd0 68 65 6e 20 77 65 20 6d 75 73 74 20 62 65 20 64  hen we must be d
12be0 65 61 6c 69 6e 67 20 0a 20 20 20 20 20 20 2a 2a  ealing .      **
12bf0 20 77 69 74 68 20 61 20 63 6f 72 72 75 70 74 20   with a corrupt 
12c00 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20 20 20  database..      
12c10 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 7a 48  */.      if( (zH
12c20 64 72 20 3e 20 7a 45 6e 64 48 64 72 29 0a 20 20  dr > zEndHdr).  
12c30 20 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 20       || (offset 
12c40 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  > pC->payloadSiz
12c50 65 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 7a 48  e).       || (zH
12c60 64 72 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20 6f  dr==zEndHdr && o
12c70 66 66 73 65 74 21 3d 70 43 2d 3e 70 61 79 6c 6f  ffset!=pC->paylo
12c80 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20 29 7b  adSize).      ){
12c90 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51  .        rc = SQ
12ca0 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
12cb0 54 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  T;.        goto 
12cc0 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b  op_column_error;
12cd0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a  .      }.    }..
12ce0 20 20 20 20 2f 2a 20 49 66 20 61 66 74 65 72 20      /* If after 
12cf0 74 72 79 69 6e 67 20 74 6f 20 65 78 74 72 61 20  trying to extra 
12d00 6e 65 77 20 65 6e 74 72 69 65 73 20 66 72 6f 6d  new entries from
12d10 20 74 68 65 20 68 65 61 64 65 72 2c 20 6e 48 64   the header, nHd
12d20 72 50 61 72 73 65 64 20 69 73 0a 20 20 20 20 2a  rParsed is.    *
12d30 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74  * still not up t
12d40 6f 20 70 32 2c 20 74 68 61 74 20 6d 65 61 6e 73  o p2, that means
12d50 20 74 68 61 74 20 74 68 65 20 72 65 63 6f 72 64   that the record
12d60 20 68 61 73 20 66 65 77 65 72 20 74 68 61 6e 20   has fewer than 
12d70 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e  p2.    ** column
12d80 73 2e 20 20 53 6f 20 74 68 65 20 72 65 73 75 6c  s.  So the resul
12d90 74 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72  t will be either
12da0 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
12db0 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20  ue or a NULL..  
12dc0 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d    */.    if( pC-
12dd0 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20  >nHdrParsed<=p2 
12de0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  ){.      if( pOp
12df0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d  ->p4type==P4_MEM
12e00 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
12e10 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
12e20 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70  wCopy(pDest, pOp
12e30 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53  ->p4.pMem, MEM_S
12e40 74 61 74 69 63 29 3b 0a 20 20 20 20 20 20 7d 65  tatic);.      }e
12e50 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 4d 65 6d  lse{.        Mem
12e60 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65 73  SetTypeFlag(pDes
12e70 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
12e80 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f      }.      goto
12e90 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
12ea0 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20      }.  }..  /* 
12eb0 45 78 74 72 61 63 74 20 74 68 65 20 63 6f 6e 74  Extract the cont
12ec0 65 6e 74 20 66 6f 72 20 74 68 65 20 70 32 2b 31  ent for the p2+1
12ed0 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e  -th column.  Con
12ee0 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20  trol can only.  
12ef0 2a 2a 20 72 65 61 63 68 20 74 68 69 73 20 70 6f  ** reach this po
12f00 69 6e 74 20 69 66 20 61 4f 66 66 73 65 74 5b 70  int if aOffset[p
12f10 32 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b 31  2], aOffset[p2+1
12f20 5d 2c 20 61 6e 64 20 61 54 79 70 65 5b 70 32 5d  ], and aType[p2]
12f30 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61   are.  ** all va
12f40 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  lid..  */.  asse
12f50 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50  rt( p2<pC->nHdrP
12f60 61 72 73 65 64 20 29 3b 0a 20 20 61 73 73 65 72  arsed );.  asser
12f70 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
12f80 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73 7a   );.  if( pC->sz
12f90 52 6f 77 3e 3d 61 4f 66 66 73 65 74 5b 70 32 2b  Row>=aOffset[p2+
12fa0 31 5d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69  1] ){.    /* Thi
12fb0 73 20 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e 20  s is the common 
12fc0 63 61 73 65 20 77 68 65 72 65 20 74 68 65 20 64  case where the d
12fd0 65 73 69 72 65 64 20 63 6f 6e 74 65 6e 74 20 66  esired content f
12fe0 69 74 73 20 6f 6e 20 74 68 65 20 6f 72 69 67 69  its on the origi
12ff0 6e 61 6c 0a 20 20 20 20 2a 2a 20 70 61 67 65 20  nal.    ** page 
13000 2d 20 77 68 65 72 65 20 74 68 65 20 63 6f 6e 74  - where the cont
13010 65 6e 74 20 69 73 20 6e 6f 74 20 6f 6e 20 61 6e  ent is not on an
13020 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20 2a   overflow page *
13030 2f 0a 20 20 20 20 56 64 62 65 4d 65 6d 52 65 6c  /.    VdbeMemRel
13040 65 61 73 65 28 70 44 65 73 74 29 3b 0a 20 20 20  ease(pDest);.   
13050 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
13060 61 6c 47 65 74 28 70 43 2d 3e 61 52 6f 77 2b 61  alGet(pC->aRow+a
13070 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61 54 79 70  Offset[p2], aTyp
13080 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20  e[p2], pDest);. 
13090 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54   }else{.    /* T
130a0 68 69 73 20 62 72 61 6e 63 68 20 68 61 70 70 65  his branch happe
130b0 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63 6f 6e  ns only when con
130c0 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65 72 66  tent is on overf
130d0 6c 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20 20 20  low pages */.   
130e0 20 74 20 3d 20 61 54 79 70 65 5b 70 32 5d 3b 0a   t = aType[p2];.
130f0 20 20 20 20 69 66 28 20 28 28 70 4f 70 2d 3e 70      if( ((pOp->p
13100 35 20 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e 47  5 & (OPFLAG_LENG
13110 54 48 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59 50  THARG|OPFLAG_TYP
13120 45 4f 46 41 52 47 29 29 21 3d 30 0a 20 20 20 20  EOFARG))!=0.    
13130 20 20 20 20 20 20 26 26 20 28 28 74 3e 3d 31 32        && ((t>=12
13140 20 26 26 20 28 74 26 31 29 3d 3d 30 29 20 7c 7c   && (t&1)==0) ||
13150 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
13160 41 47 5f 54 59 50 45 4f 46 41 52 47 29 21 3d 30  AG_TYPEOFARG)!=0
13170 29 29 0a 20 20 20 20 20 7c 7c 20 28 6c 65 6e 20  )).     || (len 
13180 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
13190 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 29 3d 3d  ialTypeLen(t))==
131a0 30 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 2f  0.    ){.      /
131b0 2a 20 43 6f 6e 74 65 6e 74 20 69 73 20 69 72 72  * Content is irr
131c0 65 6c 65 76 61 6e 74 20 66 6f 72 20 74 68 65 20  elevant for the 
131d0 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f  typeof() functio
131e0 6e 20 61 6e 64 20 66 6f 72 0a 20 20 20 20 20 20  n and for.      
131f0 2a 2a 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29  ** the length(X)
13200 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 58 20 69   function if X i
13210 73 20 61 20 62 6c 6f 62 2e 20 20 53 6f 20 77 65  s a blob.  So we
13220 20 6d 69 67 68 74 20 61 73 20 77 65 6c 6c 20 75   might as well u
13230 73 65 0a 20 20 20 20 20 20 2a 2a 20 62 6f 67 75  se.      ** bogu
13240 73 20 63 6f 6e 74 65 6e 74 20 72 61 74 68 65 72  s content rather
13250 20 74 68 61 6e 20 72 65 61 64 69 6e 67 20 63 6f   than reading co
13260 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e  ntent from disk.
13270 20 20 4e 55 4c 4c 20 77 6f 72 6b 73 0a 20 20 20    NULL works.   
13280 20 20 20 2a 2a 20 66 6f 72 20 74 65 78 74 20 61     ** for text a
13290 6e 64 20 62 6c 6f 62 20 61 6e 64 20 77 68 61 74  nd blob and what
132a0 65 76 65 72 20 69 73 20 69 6e 20 74 68 65 20 70  ever is in the p
132b0 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 76 61 72  ayloadSize64 var
132c0 69 61 62 6c 65 0a 20 20 20 20 20 20 2a 2a 20 77  iable.      ** w
132d0 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20 65 76 65  ill work for eve
132e0 72 79 74 68 69 6e 67 20 65 6c 73 65 2e 20 20 43  rything else.  C
132f0 6f 6e 74 65 6e 74 20 69 73 20 61 6c 73 6f 20 69  ontent is also i
13300 72 72 65 6c 65 76 61 6e 74 20 69 66 0a 20 20 20  rrelevant if.   
13310 20 20 20 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e     ** the conten
13320 74 20 6c 65 6e 67 74 68 20 69 73 20 30 2e 20 2a  t length is 0. *
13330 2f 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20  /.      zData = 
13340 74 3c 3d 31 33 20 3f 20 28 75 38 2a 29 26 70 61  t<=13 ? (u8*)&pa
13350 79 6c 6f 61 64 53 69 7a 65 36 34 20 3a 20 30 3b  yloadSize64 : 0;
13360 0a 20 20 20 20 20 20 73 4d 65 6d 2e 7a 4d 61 6c  .      sMem.zMal
13370 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  loc = 0;.    }el
13380 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d 73 65 74  se{.      memset
13390 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f  (&sMem, 0, sizeo
133a0 66 28 73 4d 65 6d 29 29 3b 0a 20 20 20 20 20 20  f(sMem));.      
133b0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
133c0 76 65 28 26 73 4d 65 6d 2c 20 70 44 65 73 74 29  ve(&sMem, pDest)
133d0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
133e0 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
133f0 74 72 65 65 28 70 43 72 73 72 2c 20 61 4f 66 66  tree(pCrsr, aOff
13400 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 21 70  set[p2], len, !p
13410 43 2d 3e 69 73 54 61 62 6c 65 2c 0a 20 20 20 20  C->isTable,.    
13420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26                 &
13440 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66 28  sMem);.      if(
13450 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
13460 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f  {.        goto o
13470 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a  p_column_error;.
13480 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 44        }.      zD
13490 61 74 61 20 3d 20 28 75 38 2a 29 73 4d 65 6d 2e  ata = (u8*)sMem.
134a0 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  z;.    }.    sql
134b0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65  ite3VdbeSerialGe
134c0 74 28 7a 44 61 74 61 2c 20 74 2c 20 70 44 65 73  t(zData, t, pDes
134d0 74 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 77 65  t);.    /* If we
134e0 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
134f0 6f 63 61 74 65 64 20 73 70 61 63 65 20 74 6f 20  ocated space to 
13500 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20 28 69  hold the data (i
13510 6e 20 74 68 65 0a 20 20 20 20 2a 2a 20 73 71 6c  n the.    ** sql
13520 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
13530 74 72 65 65 28 29 20 63 61 6c 6c 20 61 62 6f 76  tree() call abov
13540 65 29 20 74 68 65 6e 20 74 72 61 6e 73 66 65 72  e) then transfer
13550 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 61 74   control of that
13560 0a 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61  .    ** dynamica
13570 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70  lly allocated sp
13580 61 63 65 20 6f 76 65 72 20 74 6f 20 74 68 65 20  ace over to the 
13590 70 44 65 73 74 20 73 74 72 75 63 74 75 72 65 2e  pDest structure.
135a0 0a 20 20 20 20 2a 2a 20 54 68 69 73 20 70 72 65  .    ** This pre
135b0 76 65 6e 74 73 20 61 20 6d 65 6d 6f 72 79 20 63  vents a memory c
135c0 6f 70 79 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20  opy. */.    if( 
135d0 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 7b 0a  sMem.zMalloc ){.
135e0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 4d        assert( sM
135f0 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d 61 6c 6c  em.z==sMem.zMall
13600 6f 63 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  oc );.      asse
13610 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c 61  rt( !(pDest->fla
13620 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b  gs & MEM_Dyn) );
13630 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 21  .      assert( !
13640 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20  (pDest->flags & 
13650 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74  (MEM_Blob|MEM_St
13660 72 29 29 20 7c 7c 20 70 44 65 73 74 2d 3e 7a 3d  r)) || pDest->z=
13670 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20 20 20 20 20  =sMem.z );.     
13680 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d   pDest->flags &=
13690 20 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c 4d 45 4d   ~(MEM_Ephem|MEM
136a0 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 20 20  _Static);.      
136b0 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 7c 3d 20  pDest->flags |= 
136c0 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20 20 20 20  MEM_Term;.      
136d0 70 44 65 73 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e  pDest->z = sMem.
136e0 7a 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  z;.      pDest->
136f0 7a 4d 61 6c 6c 6f 63 20 3d 20 73 4d 65 6d 2e 7a  zMalloc = sMem.z
13700 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 7d 0a 20 20  Malloc;.    }.  
13710 7d 0a 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d  }.  pDest->enc =
13720 20 65 6e 63 6f 64 69 6e 67 3b 0a 0a 6f 70 5f 63   encoding;..op_c
13730 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 44 65 65  olumn_out:.  Dee
13740 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 44 65 73  phemeralize(pDes
13750 74 29 3b 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72  t);.op_column_er
13760 72 6f 72 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41  ror:.  UPDATE_MA
13770 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74  X_BLOBSIZE(pDest
13780 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
13790 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65  ACE(pOp->p3, pDe
137a0 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  st);.  break;.}.
137b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69  ./* Opcode: Affi
137c0 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50 34 20  nity P1 P2 * P4 
137d0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61  *.** Synopsis: a
137e0 66 66 69 6e 69 74 79 28 72 5b 50 31 40 50 32 5d  ffinity(r[P1@P2]
137f0 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66  ).**.** Apply af
13800 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61  finities to a ra
13810 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69 73 74  nge of P2 regist
13820 65 72 73 20 73 74 61 72 74 69 6e 67 20 77 69 74  ers starting wit
13830 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  h P1..**.** P4 i
13840 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  s a string that 
13850 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73  is P2 characters
13860 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20 63   long. The nth c
13870 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a  haracter of the.
13880 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61  ** string indica
13890 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  tes the column a
138a0 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f  ffinity that sho
138b0 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20  uld be used for 
138c0 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72  the nth.** memor
138d0 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61  y cell in the ra
138e0 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  nge..*/.case OP_
138f0 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f  Affinity: {.  co
13900 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e  nst char *zAffin
13910 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66  ity;   /* The af
13920 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70  finity to be app
13930 6c 69 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 63  lied */.  char c
13940 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Aff;            
13950 20 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63     /* A single c
13960 68 61 72 61 63 74 65 72 20 6f 66 20 61 66 66 69  haracter of affi
13970 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69  nity */..  zAffi
13980 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
13990 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66  ;.  assert( zAff
139a0 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73  inity!=0 );.  as
139b0 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b  sert( zAffinity[
139c0 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20  pOp->p2]==0 );. 
139d0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
139e0 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28  p->p1];.  while(
139f0 20 28 63 41 66 66 20 3d 20 2a 28 7a 41 66 66 69   (cAff = *(zAffi
13a00 6e 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20  nity++))!=0 ){. 
13a10 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 20     assert( pIn1 
13a20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e  <= &p->aMem[(p->
13a30 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
13a40 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ] );.    assert(
13a50 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31   memIsValid(pIn1
13a60 29 20 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42  ) );.    ExpandB
13a70 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20 20 61  lob(pIn1);.    a
13a80 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
13a90 31 2c 20 63 41 66 66 2c 20 65 6e 63 6f 64 69 6e  1, cAff, encodin
13aa0 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a  g);.    pIn1++;.
13ab0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
13ac0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52  /* Opcode: MakeR
13ad0 65 63 6f 72 64 20 50 31 20 50 32 20 50 33 20 50  ecord P1 P2 P3 P
13ae0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
13af0 20 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50   r[P3]=mkrec(r[P
13b00 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e  1@P2]).**.** Con
13b10 76 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72  vert P2 register
13b20 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
13b30 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65   P1 into the [re
13b40 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20  cord format].** 
13b50 75 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65  use as a data re
13b60 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61  cord in a databa
13b70 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61  se table or as a
13b80 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e   key.** in an in
13b90 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  dex.  The OP_Col
13ba0 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64  umn opcode can d
13bb0 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64  ecode the record
13bc0 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34   later..**.** P4
13bd0 20 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67   may be a string
13be0 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72   that is P2 char
13bf0 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68  acters long.  Th
13c00 65 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20  e nth character 
13c10 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67  of the.** string
13c20 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63   indicates the c
13c30 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
13c40 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73  hat should be us
13c50 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a  ed for the nth.*
13c60 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69  * field of the i
13c70 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20  ndex key..**.** 
13c80 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d  The mapping from
13c90 20 63 68 61 72 61 63 74 65 72 20 74 6f 20 61 66   character to af
13ca0 66 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20  finity is given 
13cb0 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  by the SQLITE_AF
13cc0 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66  F_.** macros def
13cd0 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e  ined in sqliteIn
13ce0 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  t.h..**.** If P4
13cf0 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c   is NULL then al
13d00 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68  l index fields h
13d10 61 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79  ave the affinity
13d20 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NONE..*/.case O
13d30 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a  P_MakeRecord: {.
13d40 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64    u8 *zNewRecord
13d50 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75  ;        /* A bu
13d60 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65  ffer to hold the
13d70 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65   data for the ne
13d80 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65  w record */.  Me
13d90 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20  m *pRec;        
13da0 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20       /* The new 
13db0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20  record */.  u64 
13dc0 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20  nData;          
13dd0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13de0 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70  bytes of data sp
13df0 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64  ace */.  int nHd
13e00 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
13e10 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
13e20 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61  es of header spa
13e30 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74  ce */.  i64 nByt
13e40 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
13e50 2a 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71  * Data space req
13e60 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72  uired for this r
13e70 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecord */.  int n
13e80 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20  Zero;           
13e90 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
13ea0 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
13eb0 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
13ec0 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72  rd */.  int nVar
13ed0 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
13ee0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
13ef0 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f  s in a varint */
13f00 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79  .  u32 serial_ty
13f10 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70  pe;       /* Typ
13f20 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d  e field */.  Mem
13f30 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20 20   *pData0;       
13f40 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65      /* First fie
13f50 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65  ld to be combine
13f60 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72  d into the recor
13f70 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73  d */.  Mem *pLas
13f80 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
13f90 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74   Last field of t
13fa0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
13fb0 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  nt nField;      
13fc0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13fd0 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
13fe0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61   record */.  cha
13ff0 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20  r *zAffinity;   
14000 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e      /* The affin
14010 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74  ity string for t
14020 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
14030 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20  nt file_format; 
14040 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f        /* File fo
14050 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20  rmat to use for 
14060 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e  encoding */.  in
14070 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
14080 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73       /* Space us
14090 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64  ed in zNewRecord
140a0 5b 5d 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 69  [] header */.  i
140b0 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20  nt j;           
140c0 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75        /* Space u
140d0 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72  sed in zNewRecor
140e0 64 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20  d[] content */. 
140f0 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20   int len;       
14100 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74          /* Lengt
14110 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a  h of a field */.
14120 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74  .  /* Assuming t
14130 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69  he record contai
14140 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65  ns N fields, the
14150 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c   record format l
14160 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74  ooks.  ** like t
14170 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d  his:.  **.  ** -
14180 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14190 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
141a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
141b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
141c0 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68  -------.  ** | h
141d0 64 72 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30  dr-size | type 0
141e0 20 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20   | type 1 | ... 
141f0 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74  | type N-1 | dat
14200 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20  a0 | ... | data 
14210 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d  N-1 | .  ** ----
14220 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14230 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14240 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14250 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14260 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44  ----.  **.  ** D
14270 61 74 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20  ata(0) is taken 
14280 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31  from register P1
14290 2e 20 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73  .  Data(1) comes
142a0 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
142b0 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20  1+1.  ** and so 
142c0 66 72 6f 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  froth..  **.  **
142d0 20 45 61 63 68 20 74 79 70 65 20 66 69 65 6c 64   Each type field
142e0 20 69 73 20 61 20 76 61 72 69 6e 74 20 72 65 70   is a varint rep
142f0 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65  resenting the se
14300 72 69 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65  rial type of the
14310 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e   .  ** correspon
14320 64 69 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e  ding data elemen
14330 74 20 28 73 65 65 20 73 71 6c 69 74 65 33 56 64  t (see sqlite3Vd
14340 62 65 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e  beSerialType()).
14350 20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69   The.  ** hdr-si
14360 7a 65 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f  ze field is also
14370 20 61 20 76 61 72 69 6e 74 20 77 68 69 63 68 20   a varint which 
14380 69 73 20 74 68 65 20 6f 66 66 73 65 74 20 66 72  is the offset fr
14390 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
143a0 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63  .  ** of the rec
143b0 6f 72 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20  ord to data0..  
143c0 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20  */.  nData = 0; 
143d0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
143e0 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61  r of bytes of da
143f0 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48  ta space */.  nH
14400 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  dr = 0;         
14410 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
14420 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70  tes of header sp
14430 61 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d  ace */.  nZero =
14440 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e   0;         /* N
14450 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79  umber of zero by
14460 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f  tes at the end o
14470 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  f the record */.
14480 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
14490 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20  p1;.  zAffinity 
144a0 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61  = pOp->p4.z;.  a
144b0 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20  ssert( nField>0 
144c0 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  && pOp->p2>0 && 
144d0 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d  pOp->p2+nField<=
144e0 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
144f0 73 6f 72 29 2b 31 20 29 3b 0a 20 20 70 44 61 74  sor)+1 );.  pDat
14500 61 30 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c  a0 = &aMem[nFiel
14510 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70  d];.  nField = p
14520 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20  Op->p2;.  pLast 
14530 3d 20 26 70 44 61 74 61 30 5b 6e 46 69 65 6c 64  = &pData0[nField
14540 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d  -1];.  file_form
14550 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65  at = p->minWrite
14560 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f  FileFormat;..  /
14570 2a 20 49 64 65 6e 74 69 66 79 20 74 68 65 20 6f  * Identify the o
14580 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 2a  utput register *
14590 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
145a0 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70  >p3<pOp->p1 || p
145b0 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b  Op->p3>=pOp->p1+
145c0 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75  pOp->p2 );.  pOu
145d0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
145e0 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
145f0 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
14600 0a 0a 20 20 2f 2a 20 41 70 70 6c 79 20 74 68 65  ..  /* Apply the
14610 20 72 65 71 75 65 73 74 65 64 20 61 66 66 69 6e   requested affin
14620 69 74 79 20 74 6f 20 61 6c 6c 20 69 6e 70 75 74  ity to all input
14630 73 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  s.  */.  assert(
14640 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29   pData0<=pLast )
14650 3b 0a 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74  ;.  if( zAffinit
14660 79 20 29 7b 0a 20 20 20 20 70 52 65 63 20 3d 20  y ){.    pRec = 
14670 70 44 61 74 61 30 3b 0a 20 20 20 20 64 6f 7b 0a  pData0;.    do{.
14680 20 20 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e        applyAffin
14690 69 74 79 28 70 52 65 63 2c 20 2a 28 7a 41 66 66  ity(pRec, *(zAff
146a0 69 6e 69 74 79 2b 2b 29 2c 20 65 6e 63 6f 64 69  inity++), encodi
146b0 6e 67 29 3b 0a 20 20 20 20 7d 77 68 69 6c 65 28  ng);.    }while(
146c0 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74   (++pRec)<=pLast
146d0 20 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c 6f   );.  }..  /* Lo
146e0 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 65  op through the e
146f0 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c  lements that wil
14700 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65  l make up the re
14710 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20  cord to figure. 
14720 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68   ** out how much
14730 20 73 70 61 63 65 20 69 73 20 72 65 71 75 69 72   space is requir
14740 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72  ed for the new r
14750 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 70 52  ecord..  */.  pR
14760 65 63 20 3d 20 70 4c 61 73 74 3b 0a 20 20 64 6f  ec = pLast;.  do
14770 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  {.    assert( me
14780 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29 20 29  mIsValid(pRec) )
14790 3b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70  ;.    serial_typ
147a0 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  e = sqlite3VdbeS
147b0 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20  erialType(pRec, 
147c0 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20  file_format);.  
147d0 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56    len = sqlite3V
147e0 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
147f0 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20  (serial_type);. 
14800 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
14810 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b  gs & MEM_Zero ){
14820 0a 20 20 20 20 20 20 69 66 28 20 6e 44 61 74 61  .      if( nData
14830 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
14840 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64  te3VdbeMemExpand
14850 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20 20 20  Blob(pRec);.    
14860 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
14870 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e   nZero += pRec->
14880 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 20  u.nZero;.       
14890 20 6c 65 6e 20 2d 3d 20 70 52 65 63 2d 3e 75 2e   len -= pRec->u.
148a0 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 7d 0a 20  nZero;.      }. 
148b0 20 20 20 7d 0a 20 20 20 20 6e 44 61 74 61 20 2b     }.    nData +
148c0 3d 20 6c 65 6e 3b 0a 20 20 20 20 74 65 73 74 63  = len;.    testc
148d0 61 73 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65  ase( serial_type
148e0 3d 3d 31 32 37 20 29 3b 0a 20 20 20 20 74 65 73  ==127 );.    tes
148f0 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74 79  tcase( serial_ty
14900 70 65 3d 3d 31 32 38 20 29 3b 0a 20 20 20 20 6e  pe==128 );.    n
14910 48 64 72 20 2b 3d 20 73 65 72 69 61 6c 5f 74 79  Hdr += serial_ty
14920 70 65 3c 3d 31 32 37 20 3f 20 31 20 3a 20 73 71  pe<=127 ? 1 : sq
14930 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 73  lite3VarintLen(s
14940 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 7d  erial_type);.  }
14950 77 68 69 6c 65 28 20 28 2d 2d 70 52 65 63 29 3e  while( (--pRec)>
14960 3d 70 44 61 74 61 30 20 29 3b 0a 0a 20 20 2f 2a  =pData0 );..  /*
14970 20 41 64 64 20 74 68 65 20 69 6e 69 74 69 61 6c   Add the initial
14980 20 68 65 61 64 65 72 20 76 61 72 69 6e 74 20 61   header varint a
14990 6e 64 20 74 6f 74 61 6c 20 74 68 65 20 73 69 7a  nd total the siz
149a0 65 20 2a 2f 0a 20 20 74 65 73 74 63 61 73 65 28  e */.  testcase(
149b0 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b 0a 20 20   nHdr==126 );.  
149c0 74 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d  testcase( nHdr==
149d0 31 32 37 20 29 3b 0a 20 20 69 66 28 20 6e 48 64  127 );.  if( nHd
149e0 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20 20 2f 2a  r<=126 ){.    /*
149f0 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65   The common case
14a00 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20   */.    nHdr += 
14a10 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
14a20 2f 2a 20 52 61 72 65 20 63 61 73 65 20 6f 66 20  /* Rare case of 
14a30 61 20 72 65 61 6c 6c 79 20 6c 61 72 67 65 20 68  a really large h
14a40 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 6e 56 61  eader */.    nVa
14a50 72 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56 61  rint = sqlite3Va
14a60 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20  rintLen(nHdr);. 
14a70 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69     nHdr += nVari
14a80 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e 56 61 72  nt;.    if( nVar
14a90 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69 6e  int<sqlite3Varin
14aa0 74 4c 65 6e 28 6e 48 64 72 29 20 29 20 6e 48 64  tLen(nHdr) ) nHd
14ab0 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65  r++;.  }.  nByte
14ac0 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 3b 0a 20   = nHdr+nData;. 
14ad0 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61   if( nByte>db->a
14ae0 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
14af0 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
14b00 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
14b10 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73    }..  /* Make s
14b20 75 72 65 20 74 68 65 20 6f 75 74 70 75 74 20 72  ure the output r
14b30 65 67 69 73 74 65 72 20 68 61 73 20 61 20 62 75  egister has a bu
14b40 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f 75 67  ffer large enoug
14b50 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a  h to store .  **
14b60 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e   the new record.
14b70 20 54 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   The output regi
14b80 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29 20 69  ster (pOp->p3) i
14b90 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f  s not allowed to
14ba0 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20  .  ** be one of 
14bb0 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
14bc0 65 72 73 20 28 62 65 63 61 75 73 65 20 74 68 65  ers (because the
14bd0 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20   following call 
14be0 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  to.  ** sqlite3V
14bf0 64 62 65 4d 65 6d 47 72 6f 77 28 29 20 63 6f 75  dbeMemGrow() cou
14c00 6c 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20 76  ld clobber the v
14c10 61 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20 69  alue before it i
14c20 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20  s used)..  */.  
14c30 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
14c40 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e  emGrow(pOut, (in
14c50 74 29 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20  t)nByte, 0) ){. 
14c60 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
14c70 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64    }.  zNewRecord
14c80 20 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a   = (u8 *)pOut->z
14c90 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20 74 68  ;..  /* Write th
14ca0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20  e record */.  i 
14cb0 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 7a 4e  = putVarint32(zN
14cc0 65 77 52 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b  ewRecord, nHdr);
14cd0 0a 20 20 6a 20 3d 20 6e 48 64 72 3b 0a 20 20 61  .  j = nHdr;.  a
14ce0 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70  ssert( pData0<=p
14cf0 4c 61 73 74 20 29 3b 0a 20 20 70 52 65 63 20 3d  Last );.  pRec =
14d00 20 70 44 61 74 61 30 3b 0a 20 20 64 6f 7b 0a 20   pData0;.  do{. 
14d10 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d     serial_type =
14d20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
14d30 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c  alType(pRec, fil
14d40 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 69  e_format);.    i
14d50 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28   += putVarint32(
14d60 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20  &zNewRecord[i], 
14d70 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20 20  serial_type);   
14d80 20 20 20 20 20 20 20 20 20 2f 2a 20 73 65 72 69           /* seri
14d90 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 20 20 6a  al type */.    j
14da0 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53   += sqlite3VdbeS
14db0 65 72 69 61 6c 50 75 74 28 26 7a 4e 65 77 52 65  erialPut(&zNewRe
14dc0 63 6f 72 64 5b 6a 5d 2c 20 70 52 65 63 2c 20 73  cord[j], pRec, s
14dd0 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 2f 2a 20  erial_type); /* 
14de0 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 7d 77 68  content */.  }wh
14df0 69 6c 65 28 20 28 2b 2b 70 52 65 63 29 3c 3d 70  ile( (++pRec)<=p
14e00 4c 61 73 74 20 29 3b 0a 20 20 61 73 73 65 72 74  Last );.  assert
14e10 28 20 69 3d 3d 6e 48 64 72 20 29 3b 0a 20 20 61  ( i==nHdr );.  a
14e20 73 73 65 72 74 28 20 6a 3d 3d 6e 42 79 74 65 20  ssert( j==nByte 
14e30 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  );..  assert( pO
14e40 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
14e50 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
14e60 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f  nCursor) );.  pO
14e70 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79  ut->n = (int)nBy
14e80 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  te;.  pOut->flag
14e90 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20 7c 20 4d  s = MEM_Blob | M
14ea0 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75 74 2d 3e  EM_Dyn;.  pOut->
14eb0 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20  xDel = 0;.  if( 
14ec0 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75  nZero ){.    pOu
14ed0 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65  t->u.nZero = nZe
14ee0 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  ro;.    pOut->fl
14ef0 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b  ags |= MEM_Zero;
14f00 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  .  }.  pOut->enc
14f10 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20   = SQLITE_UTF8; 
14f20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20   /* In case the 
14f30 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f 6e  blob is ever con
14f40 76 65 72 74 65 64 20 74 6f 20 74 65 78 74 20 2a  verted to text *
14f50 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  /.  REGISTER_TRA
14f60 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74  CE(pOp->p3, pOut
14f70 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
14f80 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
14f90 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
14fa0 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31 20  pcode: Count P1 
14fb0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
14fc0 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e  psis: r[P2]=coun
14fd0 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  t().**.** Store 
14fe0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e  the number of en
14ff0 74 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65  tries (an intege
15000 72 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20  r value) in the 
15010 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a  table or index .
15020 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72  ** opened by cur
15030 73 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73 74  sor P1 in regist
15040 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66  er P2.*/.#ifndef
15050 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52   SQLITE_OMIT_BTR
15060 45 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f  EECOUNT.case OP_
15070 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  Count: {        
15080 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
15090 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e  ase */.  i64 nEn
150a0 74 72 79 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  try;.  BtCursor 
150b0 2a 70 43 72 73 72 3b 0a 0a 20 20 70 43 72 73 72  *pCrsr;..  pCrsr
150c0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
150d0 3e 70 31 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  >p1]->pCursor;. 
150e0 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29   assert( pCrsr )
150f0 3b 0a 20 20 6e 45 6e 74 72 79 20 3d 20 30 3b 20  ;.  nEntry = 0; 
15100 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
15110 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69   Only used to si
15120 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e  lence a warning.
15130 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
15140 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70 43 72  e3BtreeCount(pCr
15150 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20  sr, &nEntry);.  
15160 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74  pOut->u.i = nEnt
15170 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  ry;.  break;.}.#
15180 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
15190 3a 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a  : Savepoint P1 *
151a0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70   * P4 *.**.** Op
151b0 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72  en, release or r
151c0 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65  ollback the save
151d0 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70  point named by p
151e0 61 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70  arameter P4, dep
151f0 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65  ending.** on the
15200 20 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f   value of P1. To
15210 20 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65   open a new save
15220 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f  point, P1==0. To
15230 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74   release (commit
15240 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67  ) an.** existing
15250 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d   savepoint, P1==
15260 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63  1, or to rollbac
15270 6b 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61  k an existing sa
15280 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a  vepoint P1==2..*
15290 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f  /.case OP_Savepo
152a0 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b  int: {.  int p1;
152b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152c0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
152d0 65 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20  e of P1 operand 
152e0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  */.  char *zName
152f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
15300 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
15310 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69  savepoint */.  i
15320 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65  nt nName;.  Save
15330 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53  point *pNew;.  S
15340 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70  avepoint *pSavep
15350 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e  oint;.  Savepoin
15360 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69  t *pTmp;.  int i
15370 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74  Savepoint;.  int
15380 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70   ii;..  p1 = pOp
15390 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20  ->p1;.  zName = 
153a0 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a  pOp->p4.z;..  /*
153b0 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65   Assert that the
153c0 20 70 31 20 70 61 72 61 6d 65 74 65 72 20 69 73   p1 parameter is
153d0 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61   valid. Also tha
153e0 74 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f  t if there is no
153f0 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73   open.  ** trans
15400 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  action, then the
15410 72 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79  re cannot be any
15420 20 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20   savepoints. .  
15430 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  */.  assert( db-
15440 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c  >pSavepoint==0 |
15450 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  | db->autoCommit
15460 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
15470 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42   p1==SAVEPOINT_B
15480 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f  EGIN||p1==SAVEPO
15490 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d  INT_RELEASE||p1=
154a0 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
154b0 41 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ACK );.  assert(
154c0 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
154d0 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63  || db->isTransac
154e0 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30  tionSavepoint==0
154f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68   );.  assert( ch
15500 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e  eckSavepointCoun
15510 74 28 64 62 29 20 29 3b 0a 20 20 61 73 73 65 72  t(db) );.  asser
15520 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
15530 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41  );..  if( p1==SA
15540 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b  VEPOINT_BEGIN ){
15550 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 56 64  .    if( db->nVd
15560 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20  beWrite>0 ){.   
15570 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65     /* A new save
15580 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20  point cannot be 
15590 63 72 65 61 74 65 64 20 69 66 20 74 68 65 72 65  created if there
155a0 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74   are active writ
155b0 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74  e .      ** stat
155c0 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65  ements (i.e. ope
155d0 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63  n read/write inc
155e0 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61  remental blob ha
155f0 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f  ndles)..      */
15600 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
15610 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
15620 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74  Msg, db, "cannot
15630 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20   open savepoint 
15640 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c  - ".        "SQL
15650 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
15660 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20  rogress");.     
15670 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
15680 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  Y;.    }else{.  
15690 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69      nName = sqli
156a0 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d  te3Strlen30(zNam
156b0 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  e);..#ifndef SQL
156c0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
156d0 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54  TABLE.      /* T
156e0 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65  his call is Ok e
156f0 76 65 6e 20 69 66 20 74 68 69 73 20 73 61 76 65  ven if this save
15700 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c 6c  point is actuall
15710 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  y a transaction.
15720 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69        ** savepoi
15730 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f 72  nt (and therefor
15740 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f  e should not pro
15750 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28 29  mpt xSavepoint()
15760 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20  ) callbacks..   
15770 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69 73     ** If this is
15780 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73   a transaction s
15790 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f  avepoint being o
157a0 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75 61  pened, it is gua
157b0 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a 2a  ranteed.      **
157c0 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61 56   that the db->aV
157d0 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69 73  Trans[] array is
157e0 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20   empty.  */.    
157f0 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 75    assert( db->au
15800 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64  toCommit==0 || d
15810 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b  b->nVTrans==0 );
15820 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
15830 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
15840 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42  (db, SAVEPOINT_B
15850 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20 20  EGIN,.          
15860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15870 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65        db->nState
15880 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f  ment+db->nSavepo
15890 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20  int);.      if( 
158a0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
158b0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
158c0 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a  o_error;.#endif.
158d0 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65  .      /* Create
158e0 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74   a new savepoint
158f0 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20   structure. */. 
15900 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c 69       pNew = sqli
15910 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64  te3DbMallocRaw(d
15920 62 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70 6f  b, sizeof(Savepo
15930 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20  int)+nName+1);. 
15940 20 20 20 20 20 69 66 28 20 70 4e 65 77 20 29 7b       if( pNew ){
15950 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a  .        pNew->z
15960 4e 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29 26  Name = (char *)&
15970 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20  pNew[1];.       
15980 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e   memcpy(pNew->zN
15990 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d  ame, zName, nNam
159a0 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20 20  e+1);.    .     
159b0 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69     /* If there i
159c0 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61  s no open transa
159d0 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b  ction, then mark
159e0 20 74 68 69 73 20 61 73 20 61 20 73 70 65 63 69   this as a speci
159f0 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 74  al.        ** "t
15a00 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
15a10 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20  oint". */.      
15a20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f    if( db->autoCo
15a30 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20  mmit ){.        
15a40 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
15a50 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
15a60 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
15a70 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a  nSavepoint = 1;.
15a80 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
15a90 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61           db->nSa
15aa0 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20  vepoint++;.     
15ab0 20 20 20 7d 0a 20 20 20 20 0a 20 20 20 20 20 20     }.    .      
15ac0 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65    /* Link the ne
15ad0 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f  w savepoint into
15ae0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
15af0 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a  ndle's list. */.
15b00 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e          pNew->pN
15b10 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70  ext = db->pSavep
15b20 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62  oint;.        db
15b30 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70  ->pSavepoint = p
15b40 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e 65  New;.        pNe
15b50 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  w->nDeferredCons
15b60 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   = db->nDeferred
15b70 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70 4e  Cons;.        pN
15b80 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  ew->nDeferredImm
15b90 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
15ba0 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20  rredImmCons;.   
15bb0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
15bc0 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69  se{.    iSavepoi
15bd0 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20  nt = 0;..    /* 
15be0 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73  Find the named s
15bf0 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65  avepoint. If the
15c00 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61  re is no such sa
15c10 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e  vepoint, then an
15c20 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72  .    ** an error
15c30 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20   is returned to 
15c40 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20  the user.  */.  
15c50 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61    for(.      pSa
15c60 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53  vepoint = db->pS
15c70 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20  avepoint; .     
15c80 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73   pSavepoint && s
15c90 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70 53  qlite3StrICmp(pS
15ca0 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c  avepoint->zName,
15cb0 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70   zName);.      p
15cc0 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76  Savepoint = pSav
15cd0 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20  epoint->pNext.  
15ce0 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65    ){.      iSave
15cf0 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20  point++;.    }. 
15d00 20 20 20 69 66 28 20 21 70 53 61 76 65 70 6f 69     if( !pSavepoi
15d10 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  nt ){.      sqli
15d20 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
15d30 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e  >zErrMsg, db, "n
15d40 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74  o such savepoint
15d50 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20  : %s", zName);. 
15d60 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
15d70 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73  _ERROR;.    }els
15d80 65 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57  e if( db->nVdbeW
15d90 72 69 74 65 3e 30 20 26 26 20 70 31 3d 3d 53 41  rite>0 && p1==SA
15da0 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
15db0 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69  ){.      /* It i
15dc0 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74  s not possible t
15dd0 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69  o release (commi
15de0 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69  t) a savepoint i
15df0 66 20 74 68 65 72 65 20 61 72 65 20 0a 20 20 20  f there are .   
15e00 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69     ** active wri
15e10 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20  te statements.. 
15e20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71       */.      sq
15e30 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
15e40 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
15e50 0a 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74  .        "cannot
15e60 20 72 65 6c 65 61 73 65 20 73 61 76 65 70 6f 69   release savepoi
15e70 6e 74 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65  nt - SQL stateme
15e80 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
15e90 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20  .      );.      
15ea0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
15eb0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20  ;.    }else{..  
15ec0 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65      /* Determine
15ed0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
15ee0 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61  this is a transa
15ef0 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e  ction savepoint.
15f00 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a   If so,.      **
15f10 20 61 6e 64 20 74 68 69 73 20 69 73 20 61 20 52   and this is a R
15f20 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20  ELEASE command, 
15f30 74 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74  then the current
15f40 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20   transaction .  
15f50 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74      ** is commit
15f60 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20  ted. .      */. 
15f70 20 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73       int isTrans
15f80 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f  action = pSavepo
15f90 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26  int->pNext==0 &&
15fa0 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
15fb0 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  onSavepoint;.   
15fc0 20 20 20 69 66 28 20 69 73 54 72 61 6e 73 61 63     if( isTransac
15fd0 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45  tion && p1==SAVE
15fe0 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
15ff0 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 72 63  .        if( (rc
16000 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
16010 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51  eckFk(p, 1))!=SQ
16020 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
16030 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
16040 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d  eturn;.        }
16050 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74  .        db->aut
16060 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20  oCommit = 1;.   
16070 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
16080 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c  VdbeHalt(p)==SQL
16090 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
160a0 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63        p->pc = pc
160b0 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
160c0 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a  autoCommit = 0;.
160d0 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20            p->rc 
160e0 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
160f0 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  SY;.          go
16100 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
16110 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
16120 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74    db->isTransact
16130 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30  ionSavepoint = 0
16140 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 70  ;.        rc = p
16150 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ->rc;.      }els
16160 65 7b 0a 20 20 20 20 20 20 20 20 69 53 61 76 65  e{.        iSave
16170 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76  point = db->nSav
16180 65 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f  epoint - iSavepo
16190 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20  int - 1;.       
161a0 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49   if( p1==SAVEPOI
161b0 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20  NT_ROLLBACK ){. 
161c0 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d           for(ii=
161d0 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  0; ii<db->nDb; i
161e0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
161f0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 54 72    sqlite3BtreeTr
16200 69 70 41 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d  ipAllCursors(db-
16210 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 53 51  >aDb[ii].pBt, SQ
16220 4c 49 54 45 5f 41 42 4f 52 54 29 3b 0a 20 20 20  LITE_ABORT);.   
16230 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
16240 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69   }.        for(i
16250 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b  i=0; ii<db->nDb;
16260 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20   ii++){.        
16270 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
16280 72 65 65 53 61 76 65 70 6f 69 6e 74 28 64 62 2d  reeSavepoint(db-
16290 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31  >aDb[ii].pBt, p1
162a0 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20  , iSavepoint);. 
162b0 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21           if( rc!
162c0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
162d0 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61            goto a
162e0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
162f0 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  r;.          }. 
16300 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
16310 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49   if( p1==SAVEPOI
16320 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20 28  NT_ROLLBACK && (
16330 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45  db->flags&SQLITE
16340 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 21  _InternChanges)!
16350 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
16360 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
16370 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
16380 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  db);.          s
16390 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63  qlite3ResetAllSc
163a0 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f  hemasOfConnectio
163b0 6e 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20  n(db);.         
163c0 20 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62   db->flags = (db
163d0 2d 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49 54 45  ->flags | SQLITE
163e0 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 3b  _InternChanges);
163f0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
16400 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52   }.  .      /* R
16410 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
16420 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20 52  ther this is a R
16430 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41  ELEASE or ROLLBA
16440 43 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20  CK, destroy all 
16450 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f  .      ** savepo
16460 69 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69  ints nested insi
16470 64 65 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f  de of the savepo
16480 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74  int being operat
16490 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20  ed on. */.      
164a0 77 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65  while( db->pSave
164b0 70 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e  point!=pSavepoin
164c0 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d  t ){.        pTm
164d0 70 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  p = db->pSavepoi
164e0 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  nt;.        db->
164f0 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d  pSavepoint = pTm
16500 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20  p->pNext;.      
16510 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
16520 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20  db, pTmp);.     
16530 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
16540 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  t--;.      }..  
16550 20 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20      /* If it is 
16560 61 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20  a RELEASE, then 
16570 64 65 73 74 72 6f 79 20 74 68 65 20 73 61 76 65  destroy the save
16580 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72  point being oper
16590 61 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a  ated on .      *
165a0 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20  * too. If it is 
165b0 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74  a ROLLBACK TO, t
165c0 68 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62  hen set the numb
165d0 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a  er of deferred .
165e0 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61        ** constra
165f0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70  int violations p
16600 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61  resent in the da
16610 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 76 61  tabase to the va
16620 6c 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20  lue stored.     
16630 20 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76   ** when the sav
16640 65 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74  epoint was creat
16650 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66  ed.  */.      if
16660 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
16670 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
16680 20 20 20 61 73 73 65 72 74 28 20 70 53 61 76 65     assert( pSave
16690 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65  point==db->pSave
166a0 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20  point );.       
166b0 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
166c0 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e  = pSavepoint->pN
166d0 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ext;.        sql
166e0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
166f0 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
16700 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73      if( !isTrans
16710 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20  action ){.      
16720 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
16730 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt--;.        }.
16740 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
16750 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72       db->nDeferr
16760 65 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f  edCons = pSavepo
16770 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f  int->nDeferredCo
16780 6e 73 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  ns;.        db->
16790 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
167a0 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e   = pSavepoint->n
167b0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
167c0 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
167d0 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69  if( !isTransacti
167e0 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  on ){.        rc
167f0 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61   = sqlite3VtabSa
16800 76 65 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c 20  vepoint(db, p1, 
16810 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  iSavepoint);.   
16820 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
16830 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
16840 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
16850 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
16860 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a    }..  break;.}.
16870 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f  ./* Opcode: Auto
16880 43 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a 20 2a  Commit P1 P2 * *
16890 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65   *.**.** Set the
168a0 20 64 61 74 61 62 61 73 65 20 61 75 74 6f 2d 63   database auto-c
168b0 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20 50 31  ommit flag to P1
168c0 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20 50 32   (1 or 0). If P2
168d0 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a   is true, roll.*
168e0 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72 72 65  * back any curre
168f0 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74 72 65  ntly active btre
16900 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20  e transactions. 
16910 49 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79  If there are any
16920 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28   active.** VMs (
16930 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69 73 20  apart from this 
16940 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c  one), then a ROL
16950 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20 20 41 20  LBACK fails.  A 
16960 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 66 0a  COMMIT fails if.
16970 2a 2a 20 74 68 65 72 65 20 61 72 65 20 61 63 74  ** there are act
16980 69 76 65 20 77 72 69 74 69 6e 67 20 56 4d 73 20  ive writing VMs 
16990 6f 72 20 61 63 74 69 76 65 20 56 4d 73 20 74 68  or active VMs th
169a0 61 74 20 75 73 65 20 73 68 61 72 65 64 20 63 61  at use shared ca
169b0 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  che..**.** This 
169c0 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75 73  instruction caus
169d0 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61 6c  es the VM to hal
169e0 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75  t..*/.case OP_Au
169f0 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e  toCommit: {.  in
16a00 74 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  t desiredAutoCom
16a10 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c  mit;.  int iRoll
16a20 62 61 63 6b 3b 0a 20 20 69 6e 74 20 74 75 72 6e  back;.  int turn
16a30 4f 6e 41 43 3b 0a 0a 20 20 64 65 73 69 72 65 64  OnAC;..  desired
16a40 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70  AutoCommit = pOp
16a50 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63  ->p1;.  iRollbac
16a60 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 74  k = pOp->p2;.  t
16a70 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72 65  urnOnAC = desire
16a80 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 21  dAutoCommit && !
16a90 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a  db->autoCommit;.
16aa0 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65    assert( desire
16ab0 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c  dAutoCommit==1 |
16ac0 7c 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  | desiredAutoCom
16ad0 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  mit==0 );.  asse
16ae0 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
16af0 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c  ommit==1 || iRol
16b00 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73  lback==0 );.  as
16b10 73 65 72 74 28 20 64 62 2d 3e 6e 56 64 62 65 41  sert( db->nVdbeA
16b20 63 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20 41  ctive>0 );  /* A
16b30 74 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e 65  t least this one
16b40 20 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a 2f   VM is active */
16b50 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
16b60 73 52 65 61 64 65 72 20 29 3b 0a 0a 23 69 66 20  sReader );..#if 
16b70 30 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43  0.  if( turnOnAC
16b80 20 26 26 20 69 52 6f 6c 6c 62 61 63 6b 20 26 26   && iRollback &&
16b90 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65   db->nVdbeActive
16ba0 3e 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  >1 ){.    /* If 
16bb0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
16bc0 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 52 4f   implements a RO
16bd0 4c 4c 42 41 43 4b 20 61 6e 64 20 6f 74 68 65 72  LLBACK and other
16be0 20 56 4d 73 20 61 72 65 0a 20 20 20 20 2a 2a 20   VMs are.    ** 
16bf0 73 74 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20 61  still running, a
16c00 6e 64 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  nd a transaction
16c10 20 69 73 20 61 63 74 69 76 65 2c 20 72 65 74 75   is active, retu
16c20 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69  rn an error indi
16c30 63 61 74 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68  cating.    ** th
16c40 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73  at the other VMs
16c50 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66   must complete f
16c60 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20  irst. .    */.  
16c70 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
16c80 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
16c90 64 62 2c 20 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c  db, "cannot roll
16ca0 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e  back transaction
16cb0 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51   - ".        "SQ
16cc0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
16cd0 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
16ce0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
16cf0 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66  ;.  }else.#endif
16d00 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20  .  if( turnOnAC 
16d10 26 26 20 21 69 52 6f 6c 6c 62 61 63 6b 20 26 26  && !iRollback &&
16d20 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e   db->nVdbeWrite>
16d30 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  0 ){.    /* If t
16d40 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
16d50 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d  implements a COM
16d60 4d 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d  MIT and other VM
16d70 73 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20  s are writing.  
16d80 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65    ** return an e
16d90 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20  rror indicating 
16da0 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56  that the other V
16db0 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65  Ms must complete
16dc0 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a   first. .    */.
16dd0 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
16de0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
16df0 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f  , db, "cannot co
16e00 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  mmit transaction
16e10 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51   - ".        "SQ
16e20 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
16e30 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
16e40 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
16e50 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65  ;.  }else if( de
16e60 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21  siredAutoCommit!
16e70 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20  =db->autoCommit 
16e80 29 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c 6c  ){.    if( iRoll
16e90 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73  back ){.      as
16ea0 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74  sert( desiredAut
16eb0 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20  oCommit==1 );.  
16ec0 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62      sqlite3Rollb
16ed0 61 63 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54  ackAll(db, SQLIT
16ee0 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b  E_ABORT_ROLLBACK
16ef0 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74  );.      db->aut
16f00 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20  oCommit = 1;.   
16f10 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d   }else if( (rc =
16f20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
16f30 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49  kFk(p, 1))!=SQLI
16f40 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
16f50 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
16f60 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
16f70 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
16f80 20 3d 20 28 75 38 29 64 65 73 69 72 65 64 41 75   = (u8)desiredAu
16f90 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 20 20  toCommit;.      
16fa0 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48  if( sqlite3VdbeH
16fb0 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42  alt(p)==SQLITE_B
16fc0 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 70  USY ){.        p
16fd0 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20  ->pc = pc;.     
16fe0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
16ff0 74 20 3d 20 28 75 38 29 28 31 2d 64 65 73 69 72  t = (u8)(1-desir
17000 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20  edAutoCommit);. 
17010 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72         p->rc = r
17020 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
17030 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64  .        goto vd
17040 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
17050 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73   }.    }.    ass
17060 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d  ert( db->nStatem
17070 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71  ent==0 );.    sq
17080 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
17090 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66  ints(db);.    if
170a0 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
170b0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  OK ){.      rc =
170c0 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
170d0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
170e0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
170f0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f  ;.    }.    goto
17100 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
17110 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
17120 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
17130 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20  zErrMsg, db,.   
17140 20 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75       (!desiredAu
17150 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f  toCommit)?"canno
17160 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61  t start a transa
17170 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74  ction within a t
17180 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20  ransaction":(.  
17190 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b        (iRollback
171a0 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61  )?"cannot rollba
171b0 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  ck - no transact
171c0 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a  ion is active":.
171d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171e0 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69     "cannot commi
171f0 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  t - no transacti
17200 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b  on is active"));
17210 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72  .         .    r
17220 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
17230 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
17240 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61  ../* Opcode: Tra
17250 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 50  nsaction P1 P2 P
17260 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65  3 P4 P5.**.** Be
17270 67 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  gin a transactio
17280 6e 2e 20 20 54 68 65 20 74 72 61 6e 73 61 63 74  n.  The transact
17290 69 6f 6e 20 65 6e 64 73 20 77 68 65 6e 20 61 20  ion ends when a 
172a0 43 6f 6d 6d 69 74 20 6f 72 20 52 6f 6c 6c 62 61  Commit or Rollba
172b0 63 6b 0a 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20  ck.** opcode is 
172c0 65 6e 63 6f 75 6e 74 65 72 65 64 2e 20 20 44 65  encountered.  De
172d0 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 4f  pending on the O
172e0 4e 20 43 4f 4e 46 4c 49 43 54 20 73 65 74 74 69  N CONFLICT setti
172f0 6e 67 2c 20 74 68 65 0a 2a 2a 20 74 72 61 6e 73  ng, the.** trans
17300 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 61 6c 73  action might als
17310 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
17320 20 69 66 20 61 6e 20 65 72 72 6f 72 20 69 73 20   if an error is 
17330 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a  encountered..**.
17340 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64  ** P1 is the ind
17350 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ex of the databa
17360 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68  se file on which
17370 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
17380 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20   is.** started. 
17390 20 49 6e 64 65 78 20 30 20 69 73 20 74 68 65 20   Index 0 is the 
173a0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
173b0 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69  le and index 1 i
173c0 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73  s the.** file us
173d0 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ed for temporary
173e0 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65   tables.  Indice
173f0 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61  s of 2 or more a
17400 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61  re used for.** a
17410 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
17420 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69  s..**.** If P2 i
17430 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
17440 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63   a write-transac
17450 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e  tion is started.
17460 20 20 41 20 52 45 53 45 52 56 45 44 20 6c 6f 63    A RESERVED loc
17470 6b 20 69 73 0a 2a 2a 20 6f 62 74 61 69 6e 65 64  k is.** obtained
17480 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
17490 20 66 69 6c 65 20 77 68 65 6e 20 61 20 77 72 69   file when a wri
174a0 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  te-transaction i
174b0 73 20 73 74 61 72 74 65 64 2e 20 20 4e 6f 0a 2a  s started.  No.*
174c0 2a 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20  * other process 
174d0 63 61 6e 20 73 74 61 72 74 20 61 6e 6f 74 68 65  can start anothe
174e0 72 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74  r write transact
174f0 69 6f 6e 20 77 68 69 6c 65 20 74 68 69 73 20 74  ion while this t
17500 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a  ransaction is.**
17510 20 75 6e 64 65 72 77 61 79 2e 20 20 53 74 61 72   underway.  Star
17520 74 69 6e 67 20 61 20 77 72 69 74 65 20 74 72 61  ting a write tra
17530 6e 73 61 63 74 69 6f 6e 20 61 6c 73 6f 20 63 72  nsaction also cr
17540 65 61 74 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b  eates a rollback
17550 20 6a 6f 75 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77   journal. A.** w
17560 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  rite transaction
17570 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64   must be started
17580 20 62 65 66 6f 72 65 20 61 6e 79 20 63 68 61 6e   before any chan
17590 67 65 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20  ges can be made 
175a0 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61  to the.** databa
175b0 73 65 2e 20 20 49 66 20 50 32 20 69 73 20 67 72  se.  If P2 is gr
175c0 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
175d0 75 61 6c 20 74 6f 20 32 20 74 68 65 6e 20 61 6e  ual to 2 then an
175e0 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20   EXCLUSIVE lock 
175f0 69 73 0a 2a 2a 20 61 6c 73 6f 20 6f 62 74 61 69  is.** also obtai
17600 6e 65 64 20 6f 6e 20 74 68 65 20 66 69 6c 65 2e  ned on the file.
17610 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74  .**.** If a writ
17620 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e-transaction is
17630 20 73 74 61 72 74 65 64 20 61 6e 64 20 74 68 65   started and the
17640 20 56 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f   Vdbe.usesStmtJo
17650 75 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a  urnal flag is.**
17660 20 74 72 75 65 20 28 74 68 69 73 20 66 6c 61 67   true (this flag
17670 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20 56   is set if the V
17680 64 62 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d  dbe may modify m
17690 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77  ore than one row
176a0 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f   and may.** thro
176b0 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70  w an ABORT excep
176c0 74 69 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65  tion), a stateme
176d0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  nt transaction m
176e0 61 79 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65  ay also be opene
176f0 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69  d..** More speci
17700 66 69 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65  fically, a state
17710 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
17720 20 69 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74   is opened iff t
17730 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  he database.** c
17740 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72  onnection is cur
17750 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75  rently not in au
17760 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f  tocommit mode, o
17770 72 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6f  r if there are o
17780 74 68 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73  ther.** active s
17790 74 61 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61  tatements. A sta
177a0 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
177b0 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20 63 68  on allows the ch
177c0 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 74 68  anges made by th
177d0 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62 65  is.** VDBE to be
177e0 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66 74   rolled back aft
177f0 65 72 20 61 6e 20 65 72 72 6f 72 20 77 69 74 68  er an error with
17800 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 72 6f  out having to ro
17810 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65  ll back the.** e
17820 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f  ntire transactio
17830 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f 72 20 69  n. If no error i
17840 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74  s encountered, t
17850 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
17860 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c  nsaction.** will
17870 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
17880 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56  ommit when the V
17890 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a  DBE halts..**.**
178a0 20 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20   If P2 is zero, 
178b0 74 68 65 6e 20 61 20 72 65 61 64 2d 6c 6f 63 6b  then a read-lock
178c0 20 69 73 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20   is obtained on 
178d0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
178e0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d  e..**.** If P5!=
178f0 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  0 then this opco
17900 64 65 20 61 6c 73 6f 20 63 68 65 63 6b 73 20 74  de also checks t
17910 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
17920 20 61 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61   against P3.** a
17930 6e 64 20 74 68 65 20 73 63 68 65 6d 61 20 67 65  nd the schema ge
17940 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
17950 20 61 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20   against P4..** 
17960 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67  The cookie chang
17970 65 73 20 69 74 73 20 76 61 6c 75 65 20 77 68 65  es its value whe
17980 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61  never the databa
17990 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  se schema change
179a0 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  s..** This opera
179b0 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
179c0 64 65 74 65 63 74 20 77 68 65 6e 20 74 68 61 74  detect when that
179d0 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20   the cookie has 
179e0 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74  changed.** and t
179f0 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74 20  hat the current 
17a00 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f  process needs to
17a10 20 72 65 72 65 61 64 20 74 68 65 20 73 63 68 65   reread the sche
17a20 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  ma..*/.case OP_T
17a30 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20  ransaction: {.  
17a40 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 69 6e  Btree *pBt;.  in
17a50 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69  t iMeta;.  int i
17a60 47 65 6e 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  Gen;..  assert( 
17a70 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
17a80 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
17a90 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d  dOnly==0 || pOp-
17aa0 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p2==0 );.  asse
17ab0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
17ac0 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
17ad0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
17ae0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
17af0 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f  ((yDbMask)1)<<pO
17b00 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  p->p1))!=0 );.  
17b10 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 28  if( pOp->p2 && (
17b20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
17b30 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30  TE_QueryOnly)!=0
17b40 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
17b50 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20  ITE_READONLY;.  
17b60 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
17b70 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
17b80 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
17b90 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20  Op->p1].pBt;..  
17ba0 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72  if( pBt ){.    r
17bb0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
17bc0 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20  BeginTrans(pBt, 
17bd0 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 69 66  pOp->p2);.    if
17be0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
17bf0 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63  Y ){.      p->pc
17c00 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e   = pc;.      p->
17c10 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
17c20 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74  _BUSY;.      got
17c30 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
17c40 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21     }.    if( rc!
17c50 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
17c60 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
17c70 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
17c80 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   }..    if( pOp-
17c90 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73 53 74  >p2 && p->usesSt
17ca0 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20  mtJournal .     
17cb0 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  && (db->autoComm
17cc0 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 64  it==0 || db->nVd
17cd0 62 65 52 65 61 64 3e 31 29 20 0a 20 20 20 20 29  beRead>1) .    )
17ce0 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
17cf0 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e  sqlite3BtreeIsIn
17d00 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20 20  Trans(pBt) );.  
17d10 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61 74      if( p->iStat
17d20 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20  ement==0 ){.    
17d30 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
17d40 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26  nStatement>=0 &&
17d50 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e   db->nSavepoint>
17d60 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62  =0 );.        db
17d70 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20  ->nStatement++; 
17d80 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74 61  .        p->iSta
17d90 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61  tement = db->nSa
17da0 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53  vepoint + db->nS
17db0 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20  tatement;.      
17dc0 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  }..      rc = sq
17dd0 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
17de0 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54  nt(db, SAVEPOINT
17df0 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74  _BEGIN, p->iStat
17e00 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20  ement-1);.      
17e10 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
17e20 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  K ){.        rc 
17e30 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65  = sqlite3BtreeBe
17e40 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e  ginStmt(pBt, p->
17e50 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20  iStatement);.   
17e60 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53     }..      /* S
17e70 74 6f 72 65 20 74 68 65 20 63 75 72 72 65 6e 74  tore the current
17e80 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61   value of the da
17e90 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73 20 64  tabase handles d
17ea0 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
17eb0 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e  nt.      ** coun
17ec0 74 65 72 2e 20 49 66 20 74 68 65 20 73 74 61 74  ter. If the stat
17ed0 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
17ee0 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  n needs to be ro
17ef0 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20 20 20  lled back,.     
17f00 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66   ** the value of
17f10 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20 6e 65   this counter ne
17f20 65 64 73 20 74 6f 20 62 65 20 72 65 73 74 6f 72  eds to be restor
17f30 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20  ed too.  */.    
17f40 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e    p->nStmtDefCon
17f50 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
17f60 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 70 2d 3e  dCons;.      p->
17f70 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f 6e 73 20  nStmtDefImmCons 
17f80 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  = db->nDeferredI
17f90 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 0a 20  mmCons;.    }.. 
17fa0 20 20 20 2f 2a 20 47 61 74 68 65 72 20 74 68 65     /* Gather the
17fb0 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20   schema version 
17fc0 6e 75 6d 62 65 72 20 66 6f 72 20 63 68 65 63 6b  number for check
17fd0 69 6e 67 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  ing */.    sqlit
17fe0 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 70  e3BtreeGetMeta(p
17ff0 42 74 2c 20 42 54 52 45 45 5f 53 43 48 45 4d 41  Bt, BTREE_SCHEMA
18000 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a  _VERSION, (u32 *
18010 29 26 69 4d 65 74 61 29 3b 0a 20 20 20 20 69 47  )&iMeta);.    iG
18020 65 6e 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  en = db->aDb[pOp
18030 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69  ->p1].pSchema->i
18040 47 65 6e 65 72 61 74 69 6f 6e 3b 0a 20 20 7d 65  Generation;.  }e
18050 6c 73 65 7b 0a 20 20 20 20 69 47 65 6e 20 3d 20  lse{.    iGen = 
18060 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20  iMeta = 0;.  }. 
18070 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
18080 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79  ==0 || pOp->p4ty
18090 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
180a0 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 26    if( pOp->p5 &&
180b0 20 28 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 33   (iMeta!=pOp->p3
180c0 20 7c 7c 20 69 47 65 6e 21 3d 70 4f 70 2d 3e 70   || iGen!=pOp->p
180d0 34 2e 69 29 20 29 7b 0a 20 20 20 20 73 71 6c 69  4.i) ){.    sqli
180e0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d  te3DbFree(db, p-
180f0 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70  >zErrMsg);.    p
18100 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69  ->zErrMsg = sqli
18110 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c 20  te3DbStrDup(db, 
18120 22 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61  "database schema
18130 20 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a   has changed");.
18140 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63      /* If the sc
18150 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d  hema-cookie from
18160 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
18170 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65 20 63  le matches the c
18180 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74  ookie .    ** st
18190 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 69 6e  ored with the in
181a0 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e  -memory represen
181b0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63  tation of the sc
181c0 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20  hema, do.    ** 
181d0 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73  not reload the s
181e0 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64  chema from the d
181f0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20  atabase file..  
18200 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76    **.    ** If v
18210 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72  irtual-tables ar
18220 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69  e in use, this i
18230 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70  s not just an op
18240 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20  timization..    
18250 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c  ** Often, v-tabl
18260 65 73 20 73 74 6f 72 65 20 74 68 65 69 72 20 64  es store their d
18270 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c  ata in other SQL
18280 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63  ite tables, whic
18290 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65  h.    ** are que
182a0 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  ried from within
182b0 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68   xNext() and oth
182c0 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f  er v-table metho
182d0 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20  ds using.    ** 
182e0 70 72 65 70 61 72 65 64 20 71 75 65 72 69 65 73  prepared queries
182f0 2e 20 49 66 20 73 75 63 68 20 61 20 71 75 65 72  . If such a quer
18300 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65  y is out-of-date
18310 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74  , we do not want
18320 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61   to.    ** disca
18330 72 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  rd the database 
18340 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75  schema, as the u
18350 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65  ser code impleme
18360 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a  nting the.    **
18370 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68   v-table would h
18380 61 76 65 20 74 6f 20 62 65 20 72 65 61 64 79 20  ave to be ready 
18390 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f  for the sqlite3_
183a0 76 74 61 62 20 73 74 72 75 63 74 75 72 65 20 69  vtab structure i
183b0 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20  tself.    ** to 
183c0 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77  be invalidated w
183d0 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f  henever sqlite3_
183e0 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64  step() is called
183f0 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20   from within .  
18400 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d    ** a v-table m
18410 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20  ethod..    */.  
18420 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f    if( db->aDb[pO
18430 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e  p->p1].pSchema->
18440 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69  schema_cookie!=i
18450 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71  Meta ){.      sq
18460 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68  lite3ResetOneSch
18470 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29  ema(db, pOp->p1)
18480 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 65  ;.    }.    p->e
18490 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 20 20  xpired = 1;.    
184a0 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45  rc = SQLITE_SCHE
184b0 4d 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  MA;.  }.  break;
184c0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
184d0 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  eadCookie P1 P2 
184e0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61  P3 * *.**.** Rea
184f0 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20  d cookie number 
18500 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65  P3 from database
18510 20 50 31 20 61 6e 64 20 77 72 69 74 65 20 69 74   P1 and write it
18520 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
18530 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74  2..** P3==1 is t
18540 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
18550 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65  n.  P3==2 is the
18560 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
18570 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68  ..** P3==3 is th
18580 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
18590 67 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20  ger cache size, 
185a0 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50  and so forth.  P
185b0 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d  1==0 is.** the m
185c0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
185d0 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74  e and P1==1 is t
185e0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
185f0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a   used to store.*
18600 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  * temporary tabl
18610 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  es..**.** There 
18620 6d 75 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c  must be a read-l
18630 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ock on the datab
18640 61 73 65 20 28 65 69 74 68 65 72 20 61 20 74 72  ase (either a tr
18650 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73  ansaction.** mus
18660 74 20 62 65 20 73 74 61 72 74 65 64 20 6f 72 20  t be started or 
18670 74 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e  there must be an
18680 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65   open cursor) be
18690 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e  fore.** executin
186a0 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
186b0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  on..*/.case OP_R
186c0 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20  eadCookie: {    
186d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
186e0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
186f0 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20  .  int iMeta;.  
18700 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69  int iDb;.  int i
18710 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72  Cookie;..  asser
18720 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
18730 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  );.  iDb = pOp->
18740 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20  p1;.  iCookie = 
18750 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
18760 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54  t( pOp->p3<SQLIT
18770 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29  E_N_BTREE_META )
18780 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
18790 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
187a0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  b );.  assert( d
187b0 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21  b->aDb[iDb].pBt!
187c0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
187d0 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
187e0 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 69  (((yDbMask)1)<<i
187f0 44 62 29 29 21 3d 30 20 29 3b 0a 0a 20 20 73 71  Db))!=0 );..  sq
18800 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74  lite3BtreeGetMet
18810 61 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  a(db->aDb[iDb].p
18820 42 74 2c 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33  Bt, iCookie, (u3
18830 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 70  2 *)&iMeta);.  p
18840 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61  Out->u.i = iMeta
18850 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
18860 20 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b   Opcode: SetCook
18870 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ie P1 P2 P3 * *.
18880 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
18890 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
188a0 74 65 72 20 50 33 20 28 69 6e 74 65 72 70 72 65  ter P3 (interpre
188b0 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ted as an intege
188c0 72 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69  r).** into cooki
188d0 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64  e number P2 of d
188e0 61 74 61 62 61 73 65 20 50 31 2e 20 20 50 32 3d  atabase P1.  P2=
188f0 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61  =1 is the schema
18900 20 76 65 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50   version.  .** P
18910 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  2==2 is the data
18920 62 61 73 65 20 66 6f 72 6d 61 74 2e 20 50 32 3d  base format. P2=
18930 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d  =3 is the recomm
18940 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68  ended pager cach
18950 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20  e .** size, and 
18960 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30  so forth.  P1==0
18970 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
18980 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50  abase file and P
18990 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a 20  1==1 is the .** 
189a0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73  database file us
189b0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70  ed to store temp
189c0 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
189d0 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f  .** A transactio
189e0 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65  n must be starte
189f0 64 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69  d before executi
18a00 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
18a10 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f  */.case OP_SetCo
18a20 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a  okie: {       /*
18a30 20 69 6e 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44   in3 */.  Db *pD
18a40 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  b;.  assert( pOp
18a50 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p2<SQLITE_N_BT
18a60 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73  REE_META );.  as
18a70 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
18a80 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
18a90 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
18aa0 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
18ab0 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c   (((yDbMask)1)<<
18ac0 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
18ad0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
18ae0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44  dOnly==0 );.  pD
18af0 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
18b00 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
18b10 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
18b20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
18b30 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
18b40 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29  (db, pOp->p1, 0)
18b50 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d   );.  pIn3 = &aM
18b60 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73  em[pOp->p3];.  s
18b70 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
18b80 65 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 20  egerify(pIn3);. 
18b90 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f   /* See note abo
18ba0 75 74 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e  ut index shiftin
18bb0 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b  g on OP_ReadCook
18bc0 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  ie */.  rc = sql
18bd0 69 74 65 33 42 74 72 65 65 55 70 64 61 74 65 4d  ite3BtreeUpdateM
18be0 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f  eta(pDb->pBt, pO
18bf0 70 2d 3e 70 32 2c 20 28 69 6e 74 29 70 49 6e 33  p->p2, (int)pIn3
18c00 2d 3e 75 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f  ->u.i);.  if( pO
18c10 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43 48  p->p2==BTREE_SCH
18c20 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20  EMA_VERSION ){. 
18c30 20 20 20 2f 2a 20 57 68 65 6e 20 74 68 65 20 73     /* When the s
18c40 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61  chema cookie cha
18c50 6e 67 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65  nges, record the
18c60 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65   new cookie inte
18c70 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44  rnally */.    pD
18c80 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  b->pSchema->sche
18c90 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 28 69 6e 74  ma_cookie = (int
18ca0 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20  )pIn3->u.i;.    
18cb0 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c  db->flags |= SQL
18cc0 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
18cd0 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  s;.  }else if( p
18ce0 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49  Op->p2==BTREE_FI
18cf0 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20  LE_FORMAT ){.   
18d00 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67   /* Record chang
18d10 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66  es in the file f
18d20 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62  ormat */.    pDb
18d30 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
18d40 66 6f 72 6d 61 74 20 3d 20 28 75 38 29 70 49 6e  format = (u8)pIn
18d50 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 69 66  3->u.i;.  }.  if
18d60 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a  ( pOp->p1==1 ){.
18d70 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74      /* Invalidat
18d80 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73  e all prepared s
18d90 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76  tatements whenev
18da0 65 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  er the TEMP data
18db0 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65  base.    ** sche
18dc0 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20  ma is changed.  
18dd0 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a  Ticket #1644 */.
18de0 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
18df0 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
18e00 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e  nts(db);.    p->
18e10 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d  expired = 0;.  }
18e20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
18e30 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64  Opcode: OpenRead
18e40 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
18e50 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f  ** Synopsis: roo
18e60 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a  t=P2 iDb=P3.**.*
18e70 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e  * Open a read-on
18e80 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68  ly cursor for th
18e90 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
18ea0 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
18eb0 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64   is.** P2 in a d
18ec0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54  atabase file.  T
18ed0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
18ee0 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
18ef0 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20  y P3. .** P3==0 
18f00 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64  means the main d
18f10 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d  atabase, P3==1 m
18f20 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73  eans the databas
18f30 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74  e used for .** t
18f40 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c  emporary tables,
18f50 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20   and P3>1 means 
18f60 75 73 65 64 20 74 68 65 20 63 6f 72 72 65 73 70  used the corresp
18f70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a  onding attached.
18f80 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47 69  ** database.  Gi
18f90 76 65 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f  ve the new curso
18fa0 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  r an identifier 
18fb0 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a  of P1.  The P1.*
18fc0 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f  * values need no
18fd0 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20  t be contiguous 
18fe0 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65  but all P1 value
18ff0 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c  s should be smal
19000 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49  l integers..** I
19010 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f  t is an error fo
19020 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74  r P1 to be negat
19030 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ive..**.** If P5
19040 21 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68 65  !=0 then use the
19050 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
19060 73 74 65 72 20 50 32 20 61 73 20 74 68 65 20 72  ster P2 as the r
19070 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a  oot page, not.**
19080 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32   the value of P2
19090 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54   itself..**.** T
190a0 68 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72  here will be a r
190b0 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20  ead lock on the 
190c0 64 61 74 61 62 61 73 65 20 77 68 65 6e 65 76 65  database wheneve
190d0 72 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a  r there is an.**
190e0 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49   open cursor.  I
190f0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  f the database w
19100 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f  as unlocked prio
19110 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75  r to this instru
19120 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20  ction.** then a 
19130 72 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71  read lock is acq
19140 75 69 72 65 64 20 61 73 20 70 61 72 74 20 6f 66  uired as part of
19150 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
19160 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f  n.  A read.** lo
19170 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20  ck allows other 
19180 70 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61  processes to rea
19190 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62  d the database b
191a0 75 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20  ut prohibits.** 
191b0 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73  any other proces
191c0 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67  s from modifying
191d0 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
191e0 54 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73  The read lock is
191f0 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65  .** released whe
19200 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72  n all cursors ar
19210 65 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68  e closed.  If th
19220 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  is instruction a
19230 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65  ttempts.** to ge
19240 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75  t a read lock bu
19250 74 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72  t fails, the scr
19260 69 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77  ipt terminates w
19270 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45  ith an.** SQLITE
19280 5f 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65  _BUSY error code
19290 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76  ..**.** The P4 v
192a0 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68  alue may be eith
192b0 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50  er an integer (P
192c0 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f  4_INT32) or a po
192d0 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65  inter to.** a Ke
192e0 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
192f0 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66  (P4_KEYINFO). If
19300 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72   it is a pointer
19310 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a   to a KeyInfo .*
19320 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65  * structure, the
19330 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65  n said structure
19340 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e   defines the con
19350 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69  tent and collati
19360 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20  ng .** sequence 
19370 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69  of the index bei
19380 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72  ng opened. Other
19390 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61  wise, if P4 is a
193a0 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61  n integer .** va
193b0 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74  lue, it is set t
193c0 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
193d0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
193e0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  able..**.** See 
193f0 61 6c 73 6f 20 4f 70 65 6e 57 72 69 74 65 2e 0a  also OpenWrite..
19400 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  */./* Opcode: Op
19410 65 6e 57 72 69 74 65 20 50 31 20 50 32 20 50 33  enWrite P1 P2 P3
19420 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
19430 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d  is: root=P2 iDb=
19440 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  P3.**.** Open a 
19450 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f  read/write curso
19460 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68  r named P1 on th
19470 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
19480 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70   whose root.** p
19490 61 67 65 20 69 73 20 50 32 2e 20 20 4f 72 20 69  age is P2.  Or i
194a0 66 20 50 35 21 3d 30 20 75 73 65 20 74 68 65 20  f P5!=0 use the 
194b0 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
194c0 74 65 72 20 50 32 20 74 6f 20 66 69 6e 64 20 74  ter P2 to find t
194d0 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e  he.** root page.
194e0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61  .**.** The P4 va
194f0 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65  lue may be eithe
19500 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34  r an integer (P4
19510 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69  _INT32) or a poi
19520 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79  nter to.** a Key
19530 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28  Info structure (
19540 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20  P4_KEYINFO). If 
19550 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  it is a pointer 
19560 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a  to a KeyInfo .**
19570 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e   structure, then
19580 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20   said structure 
19590 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74  defines the cont
195a0 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e  ent and collatin
195b0 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f  g .** sequence o
195c0 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e  f the index bein
195d0 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77  g opened. Otherw
195e0 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e  ise, if P4 is an
195f0 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c   integer .** val
19600 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f  ue, it is set to
19610 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
19620 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
19630 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a  ble, or to the.*
19640 2a 20 6c 61 72 67 65 73 74 20 69 6e 64 65 78 20  * largest index 
19650 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66  of any column of
19660 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
19670 69 73 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64  is actually used
19680 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
19690 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a  truction works j
196a0 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61  ust like OpenRea
196b0 64 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74  d except that it
196c0 20 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f   opens the curso
196d0 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69  r.** in read/wri
196e0 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20  te mode.  For a 
196f0 67 69 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65  given table, the
19700 72 65 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72  re can be one or
19710 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a   more read-only.
19720 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20  ** cursors or a 
19730 73 69 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74  single read/writ
19740 65 20 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74  e cursor but not
19750 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   both..**.** See
19760 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a   also OpenRead..
19770 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52  */.case OP_OpenR
19780 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ead:.case OP_Ope
19790 6e 57 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20  nWrite: {.  int 
197a0 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66  nField;.  KeyInf
197b0 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69  o *pKeyInfo;.  i
197c0 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62  nt p2;.  int iDb
197d0 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a  ;.  int wrFlag;.
197e0 20 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56    Btree *pX;.  V
197f0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
19800 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 61  .  Db *pDb;..  a
19810 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 26  ssert( (pOp->p5&
19820 28 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 7c  (OPFLAG_P2ISREG|
19830 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 29 29  OPFLAG_BULKCSR))
19840 3d 3d 70 4f 70 2d 3e 70 35 20 29 3b 0a 20 20 61  ==pOp->p5 );.  a
19850 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
19860 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65  de==OP_OpenWrite
19870 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29   || pOp->p5==0 )
19880 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ;.  assert( p->b
19890 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73  IsReader );.  as
198a0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
198b0 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c  e==OP_OpenRead |
198c0 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  | p->readOnly==0
198d0 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78   );..  if( p->ex
198e0 70 69 72 65 64 20 29 7b 0a 20 20 20 20 72 63 20  pired ){.    rc 
198f0 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a  = SQLITE_ABORT;.
19900 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
19910 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20    nField = 0;.  
19920 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20  pKeyInfo = 0;.  
19930 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
19940 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  iDb = pOp->p3;. 
19950 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
19960 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
19970 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
19980 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79  btreeMask & (((y
19990 44 62 4d 61 73 6b 29 31 29 3c 3c 69 44 62 29 29  DbMask)1)<<iDb))
199a0 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  !=0 );.  pDb = &
199b0 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20  db->aDb[iDb];.  
199c0 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20  pX = pDb->pBt;. 
199d0 20 61 73 73 65 72 74 28 20 70 58 21 3d 30 20 29   assert( pX!=0 )
199e0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
199f0 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74  ode==OP_OpenWrit
19a00 65 20 29 7b 0a 20 20 20 20 77 72 46 6c 61 67 20  e ){.    wrFlag 
19a10 3d 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28  = 1;.    assert(
19a20 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
19a30 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c  texHeld(db, iDb,
19a40 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 70   0) );.    if( p
19a50 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
19a60 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69  e_format < p->mi
19a70 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
19a80 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e   ){.      p->min
19a90 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20  WriteFileFormat 
19aa0 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  = pDb->pSchema->
19ab0 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20  file_format;.   
19ac0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
19ad0 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a  wrFlag = 0;.  }.
19ae0 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
19af0 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 29  OPFLAG_P2ISREG )
19b00 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  {.    assert( p2
19b10 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  >0 );.    assert
19b20 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ( p2<=(p->nMem-p
19b30 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
19b40 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
19b50 32 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  2];.    assert( 
19b60 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 32 29  memIsValid(pIn2)
19b70 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
19b80 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn2->flags & M
19b90 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20  EM_Int)!=0 );.  
19ba0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
19bb0 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29  Integerify(pIn2)
19bc0 3b 0a 20 20 20 20 70 32 20 3d 20 28 69 6e 74 29  ;.    p2 = (int)
19bd0 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f  pIn2->u.i;.    /
19be0 2a 20 54 68 65 20 70 32 20 76 61 6c 75 65 20 61  * The p2 value a
19bf0 6c 77 61 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d  lways comes from
19c00 20 61 20 70 72 69 6f 72 20 4f 50 5f 43 72 65 61   a prior OP_Crea
19c10 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 61  teTable opcode a
19c20 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 6f  nd.    ** that o
19c30 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79  pcode will alway
19c40 73 20 73 65 74 20 74 68 65 20 70 32 20 76 61 6c  s set the p2 val
19c50 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20  ue to 2 or more 
19c60 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20  or else fail..  
19c70 20 20 2a 2a 20 49 66 20 74 68 65 72 65 20 77 65    ** If there we
19c80 72 65 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68  re a failure, th
19c90 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
19ca0 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20  ment would have 
19cb0 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62 65  halted.    ** be
19cc0 66 6f 72 65 20 72 65 61 63 68 69 6e 67 20 74 68  fore reaching th
19cd0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  is instruction. 
19ce0 2a 2f 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52  */.    if( NEVER
19cf0 28 70 32 3c 32 29 20 29 20 7b 0a 20 20 20 20 20  (p2<2) ) {.     
19d00 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
19d10 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
19d20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
19d30 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
19d40 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
19d50 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46  4type==P4_KEYINF
19d60 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66  O ){.    pKeyInf
19d70 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
19d80 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73 65 72 74  Info;.    assert
19d90 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d  ( pKeyInfo->enc=
19da0 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20  =ENC(db) );.    
19db0 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
19dc0 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20  ->db==db );.    
19dd0 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66  nField = pKeyInf
19de0 6f 2d 3e 6e 46 69 65 6c 64 2b 70 4b 65 79 49 6e  o->nField+pKeyIn
19df0 66 6f 2d 3e 6e 58 46 69 65 6c 64 3b 0a 20 20 7d  fo->nXField;.  }
19e00 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34  else if( pOp->p4
19e10 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
19e20 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  {.    nField = p
19e30 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20  Op->p4.i;.  }.  
19e40 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
19e50 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
19e60 6e 46 69 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74  nField>=0 );.  t
19e70 65 73 74 63 61 73 65 28 20 6e 46 69 65 6c 64 3d  estcase( nField=
19e80 3d 30 20 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20  =0 );  /* Table 
19e90 77 69 74 68 20 49 4e 54 45 47 45 52 20 50 52 49  with INTEGER PRI
19ea0 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74  MARY KEY and not
19eb0 68 69 6e 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70  hing else */.  p
19ec0 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  Cur = allocateCu
19ed0 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
19ee0 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 31 29   nField, iDb, 1)
19ef0 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20  ;.  if( pCur==0 
19f00 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
19f10 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d   pCur->nullRow =
19f20 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72   1;.  pCur->isOr
19f30 64 65 72 65 64 20 3d 20 31 3b 0a 20 20 72 63 20  dered = 1;.  rc 
19f40 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  = sqlite3BtreeCu
19f50 72 73 6f 72 28 70 58 2c 20 70 32 2c 20 77 72 46  rsor(pX, p2, wrF
19f60 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70  lag, pKeyInfo, p
19f70 43 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  Cur->pCursor);. 
19f80 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20   pCur->pKeyInfo 
19f90 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73  = pKeyInfo;.  as
19fa0 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c  sert( OPFLAG_BUL
19fb0 4b 43 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b  KCSR==BTREE_BULK
19fc0 4c 4f 41 44 20 29 3b 0a 20 20 73 71 6c 69 74 65  LOAD );.  sqlite
19fd0 33 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74  3BtreeCursorHint
19fe0 73 28 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 2c  s(pCur->pCursor,
19ff0 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
1a000 41 47 5f 42 55 4c 4b 43 53 52 29 29 3b 0a 0a 20  AG_BULKCSR));.. 
1a010 20 2f 2a 20 53 69 6e 63 65 20 69 74 20 70 65 72   /* Since it per
1a020 66 6f 72 6d 73 20 6e 6f 20 6d 65 6d 6f 72 79 20  forms no memory 
1a030 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 72 20 49 4f  allocation or IO
1a040 2c 20 74 68 65 20 6f 6e 6c 79 20 76 61 6c 75 65  , the only value
1a050 20 74 68 61 74 0a 20 20 2a 2a 20 73 71 6c 69 74   that.  ** sqlit
1a060 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 29 20  e3BtreeCursor() 
1a070 6d 61 79 20 72 65 74 75 72 6e 20 69 73 20 53 51  may return is SQ
1a080 4c 49 54 45 5f 4f 4b 2e 20 2a 2f 0a 20 20 61 73  LITE_OK. */.  as
1a090 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
1a0a0 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20 53 65 74  _OK );..  /* Set
1a0b0 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e   the VdbeCursor.
1a0c0 69 73 54 61 62 6c 65 20 76 61 72 69 61 62 6c 65  isTable variable
1a0d0 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69  . Previous versi
1a0e0 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69  ons of.  ** SQLi
1a0f0 74 65 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b  te used to check
1a100 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67   if the root-pag
1a110 65 20 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e  e flags were san
1a120 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a  e at this point.
1a130 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20    ** and report 
1a140 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
1a150 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65 72 65  ion if they were
1a160 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63   not, but this c
1a170 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69  heck has.  ** si
1a180 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74  nce moved into t
1a190 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20  he btree layer. 
1a1a0 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73   */  .  pCur->is
1a1b0 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74  Table = pOp->p4t
1a1c0 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b  ype!=P4_KEYINFO;
1a1d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1a1e0 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65  Opcode: OpenEphe
1a1f0 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34  meral P1 P2 * P4
1a200 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
1a210 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a   nColumn=P2.**.*
1a220 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72  * Open a new cur
1a230 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e  sor P1 to a tran
1a240 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20  sient table..** 
1a250 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c  The cursor is al
1a260 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64  ways opened read
1a270 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a  /write even if .
1a280 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
1a290 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c  base is read-onl
1a2a0 79 2e 20 20 54 68 65 20 65 70 68 65 6d 65 72 61  y.  The ephemera
1a2b0 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65  l.** table is de
1a2c0 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  leted automatica
1a2d0 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75 72  lly when the cur
1a2e0 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a  sor is closed..*
1a2f0 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e  *.** P2 is the n
1a300 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1a310 20 69 6e 20 74 68 65 20 65 70 68 65 6d 65 72 61   in the ephemera
1a320 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  l table..** The 
1a330 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f  cursor points to
1a340 20 61 20 42 54 72 65 65 20 74 61 62 6c 65 20 69   a BTree table i
1a350 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61  f P4==0 and to a
1a360 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20   BTree index.** 
1a370 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e 20  if P4 is not 0. 
1a380 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
1a390 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  LL, it points to
1a3a0 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
1a3b0 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66  ture.** that def
1a3c0 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20  ines the format 
1a3d0 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69  of keys in the i
1a3e0 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ndex..**.** The 
1a3f0 50 35 20 70 61 72 61 6d 65 74 65 72 20 63 61 6e  P5 parameter can
1a400 20 62 65 20 61 20 6d 61 73 6b 20 6f 66 20 74 68   be a mask of th
1a410 65 20 42 54 52 45 45 5f 2a 20 66 6c 61 67 73 20  e BTREE_* flags 
1a420 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e 20 62 74  defined.** in bt
1a430 72 65 65 2e 68 2e 20 20 54 68 65 73 65 20 66 6c  ree.h.  These fl
1a440 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61 73 70 65  ags control aspe
1a450 63 74 73 20 6f 66 20 74 68 65 20 6f 70 65 72 61  cts of the opera
1a460 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62  tion of.** the b
1a470 74 72 65 65 2e 20 20 54 68 65 20 42 54 52 45 45  tree.  The BTREE
1a480 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e  _OMIT_JOURNAL an
1a490 64 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 66  d BTREE_SINGLE f
1a4a0 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61 64 64 65  lags are.** adde
1a4b0 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  d automatically.
1a4c0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
1a4d0 70 65 6e 41 75 74 6f 69 6e 64 65 78 20 50 31 20  penAutoindex P1 
1a4e0 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
1a4f0 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50  opsis: nColumn=P
1a500 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  2.**.** This opc
1a510 6f 64 65 20 77 6f 72 6b 73 20 74 68 65 20 73 61  ode works the sa
1a520 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68  me as OP_OpenEph
1a530 65 6d 65 72 61 6c 2e 20 20 49 74 20 68 61 73 20  emeral.  It has 
1a540 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 6e  a.** different n
1a550 61 6d 65 20 74 6f 20 64 69 73 74 69 6e 67 75 69  ame to distingui
1a560 73 68 20 69 74 73 20 75 73 65 2e 20 20 54 61 62  sh its use.  Tab
1a570 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  les created usin
1a580 67 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f 70 63  g.** by this opc
1a590 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64  ode will be used
1a5a0 20 66 6f 72 20 61 75 74 6f 6d 61 74 69 63 61 6c   for automatical
1a5b0 6c 79 20 63 72 65 61 74 65 64 20 74 72 61 6e 73  ly created trans
1a5c0 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20  ient.** indices 
1a5d0 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73  in joins..*/.cas
1a5e0 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64  e OP_OpenAutoind
1a5f0 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ex: .case OP_Ope
1a600 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20  nEphemeral: {.  
1a610 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1a620 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
1a630 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74 69 63 20  Info;..  static 
1a640 63 6f 6e 73 74 20 69 6e 74 20 76 66 73 46 6c 61  const int vfsFla
1a650 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49  gs = .      SQLI
1a660 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54  TE_OPEN_READWRIT
1a670 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1a680 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20  _OPEN_CREATE |. 
1a690 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1a6a0 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20  _EXCLUSIVE |.   
1a6b0 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44     SQLITE_OPEN_D
1a6c0 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20  ELETEONCLOSE |. 
1a6d0 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1a6e0 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 20  _TRANSIENT_DB;. 
1a6f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1a700 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >=0 );.  assert(
1a710 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20   pOp->p2>=0 );. 
1a720 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
1a730 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1a740 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31  , pOp->p2, -1, 1
1a750 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
1a760 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1a770 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20   pCx->nullRow = 
1a780 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  1;.  rc = sqlite
1a790 33 42 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70  3BtreeOpen(db->p
1a7a0 56 66 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78  Vfs, 0, db, &pCx
1a7b0 2d 3e 70 42 74 2c 20 0a 20 20 20 20 20 20 20 20  ->pBt, .        
1a7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7d0 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e  BTREE_OMIT_JOURN
1a7e0 41 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c  AL | BTREE_SINGL
1a7f0 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73  E | pOp->p5, vfs
1a800 46 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63  Flags);.  if( rc
1a810 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
1a820 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1a830 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70  treeBeginTrans(p
1a840 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d  Cx->pBt, 1);.  }
1a850 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
1a860 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49  E_OK ){.    /* I
1a870 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  f a transient in
1a880 64 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2c  dex is required,
1a890 20 63 72 65 61 74 65 20 69 74 20 62 79 20 63 61   create it by ca
1a8a0 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c  lling.    ** sql
1a8b0 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
1a8c0 61 62 6c 65 28 29 20 77 69 74 68 20 74 68 65 20  able() with the 
1a8d0 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c  BTREE_BLOBKEY fl
1a8e0 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a  ag before.    **
1a8f0 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20   opening it. If 
1a900 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c  a transient tabl
1a910 65 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a  e is required, j
1a920 75 73 74 20 75 73 65 20 74 68 65 0a 20 20 20 20  ust use the.    
1a930 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ** automatically
1a940 20 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 77   created table w
1a950 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20  ith root-page 1 
1a960 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20  (an BLOB_INTKEY 
1a970 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20  table)..    */. 
1a980 20 20 20 69 66 28 20 28 70 4b 65 79 49 6e 66 6f     if( (pKeyInfo
1a990 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
1a9a0 6e 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  nfo)!=0 ){.     
1a9b0 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20   int pgno;.     
1a9c0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
1a9d0 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f  type==P4_KEYINFO
1a9e0 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
1a9f0 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
1aa00 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 2c  eTable(pCx->pBt,
1aa10 20 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c   &pgno, BTREE_BL
1aa20 4f 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29  OBKEY | pOp->p5)
1aa30 3b 20 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  ; .      if( rc=
1aa40 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1aa50 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 67        assert( pg
1aa60 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b  no==MASTER_ROOT+
1aa70 31 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  1 );.        ass
1aa80 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64  ert( pKeyInfo->d
1aa90 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20 20 20  b==db );.       
1aaa0 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1aab0 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20  o->enc==ENC(db) 
1aac0 29 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e  );.        pCx->
1aad0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49  pKeyInfo = pKeyI
1aae0 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20 72 63 20  nfo;.        rc 
1aaf0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  = sqlite3BtreeCu
1ab00 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 70  rsor(pCx->pBt, p
1ab10 67 6e 6f 2c 20 31 2c 20 70 4b 65 79 49 6e 66 6f  gno, 1, pKeyInfo
1ab20 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  , pCx->pCursor);
1ab30 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
1ab40 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b  Cx->isTable = 0;
1ab50 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1ab60 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1ab70 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70  reeCursor(pCx->p
1ab80 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c  Bt, MASTER_ROOT,
1ab90 20 31 2c 20 30 2c 20 70 43 78 2d 3e 70 43 75 72   1, 0, pCx->pCur
1aba0 73 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d  sor);.      pCx-
1abb0 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20  >isTable = 1;.  
1abc0 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69    }.  }.  pCx->i
1abd0 73 4f 72 64 65 72 65 64 20 3d 20 28 70 4f 70 2d  sOrdered = (pOp-
1abe0 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44  >p5!=BTREE_UNORD
1abf0 45 52 45 44 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ERED);.  break;.
1ac00 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  }../* Opcode: So
1ac10 72 74 65 72 4f 70 65 6e 20 50 31 20 50 32 20 2a  rterOpen P1 P2 *
1ac20 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73   P4 *.**.** This
1ac30 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69   opcode works li
1ac40 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  ke OP_OpenEpheme
1ac50 72 61 6c 20 65 78 63 65 70 74 20 74 68 61 74 20  ral except that 
1ac60 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72  it opens.** a tr
1ac70 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 74 68  ansient index th
1ac80 61 74 20 69 73 20 73 70 65 63 69 66 69 63 61 6c  at is specifical
1ac90 6c 79 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73  ly designed to s
1aca0 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62  ort large.** tab
1acb0 6c 65 73 20 75 73 69 6e 67 20 61 6e 20 65 78 74  les using an ext
1acc0 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74  ernal merge-sort
1acd0 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2f 0a 63   algorithm..*/.c
1ace0 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65  ase OP_SorterOpe
1acf0 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  n: {.  VdbeCurso
1ad00 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72  r *pCx;..  asser
1ad10 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b  t( pOp->p1>=0 );
1ad20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1ad30 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d  p2>=0 );.  pCx =
1ad40 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
1ad50 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  p, pOp->p1, pOp-
1ad60 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69  >p2, -1, 1);.  i
1ad70 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f  f( pCx==0 ) goto
1ad80 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e   no_mem;.  pCx->
1ad90 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1ada0 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61  p4.pKeyInfo;.  a
1adb0 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79  ssert( pCx->pKey
1adc0 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a  Info->db==db );.
1add0 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70    assert( pCx->p
1ade0 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e  KeyInfo->enc==EN
1adf0 43 28 64 62 29 20 29 3b 0a 20 20 72 63 20 3d 20  C(db) );.  rc = 
1ae00 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
1ae10 72 49 6e 69 74 28 64 62 2c 20 70 43 78 29 3b 0a  rInit(db, pCx);.
1ae20 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1ae30 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64  pcode: OpenPseud
1ae40 6f 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a  o P1 P2 P3 * P5.
1ae50 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 63 6f 6e  ** Synopsis: con
1ae60 74 65 6e 74 20 69 6e 20 72 5b 50 32 40 50 33 5d  tent in r[P2@P3]
1ae70 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65  .**.** Open a ne
1ae80 77 20 63 75 72 73 6f 72 20 74 68 61 74 20 70 6f  w cursor that po
1ae90 69 6e 74 73 20 74 6f 20 61 20 66 61 6b 65 20 74  ints to a fake t
1aea0 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69  able that contai
1aeb0 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72  ns a single.** r
1aec0 6f 77 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65  ow of data.  The
1aed0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61 74   content of that
1aee0 20 6f 6e 65 20 72 6f 77 20 69 6e 20 74 68 65 20   one row in the 
1aef0 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72  content of memor
1af00 79 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  y.** register P2
1af10 20 77 68 65 6e 20 50 35 3d 3d 30 2e 20 20 49 6e   when P5==0.  In
1af20 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 63 75   other words, cu
1af30 72 73 6f 72 20 50 31 20 62 65 63 6f 6d 65 73 20  rsor P1 becomes 
1af40 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
1af50 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f   .** MEM_Blob co
1af60 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20  ntent contained 
1af70 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  in register P2. 
1af80 20 57 68 65 6e 20 50 35 3d 3d 31 2c 20 74 68 65   When P5==1, the
1af90 6e 20 74 68 65 0a 2a 2a 20 72 6f 77 20 69 73 20  n the.** row is 
1afa0 72 65 70 72 65 73 65 6e 74 65 64 20 62 79 20 50  represented by P
1afb0 33 20 63 6f 6e 73 65 63 75 74 69 76 65 20 72 65  3 consecutive re
1afc0 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
1afd0 67 20 77 69 74 68 20 50 32 2e 0a 2a 2a 0a 2a 2a  g with P2..**.**
1afe0 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   A pseudo-table 
1aff0 63 72 65 61 74 65 64 20 62 79 20 74 68 69 73 20  created by this 
1b000 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74  opcode is used t
1b010 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a  o hold a single.
1b020 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72  ** row output fr
1b030 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f  om the sorter so
1b040 20 74 68 61 74 20 74 68 65 20 72 6f 77 20 63 61   that the row ca
1b050 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20  n be decomposed 
1b060 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75  into.** individu
1b070 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67  al columns using
1b080 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   the OP_Column o
1b090 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43  pcode.  The OP_C
1b0a0 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20  olumn opcode.** 
1b0b0 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73  is the only curs
1b0c0 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77  or opcode that w
1b0d0 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73 65 75  orks with a pseu
1b0e0 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  do-table..**.** 
1b0f0 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P3 is the number
1b100 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68   of fields in th
1b110 65 20 72 65 63 6f 72 64 73 20 74 68 61 74 20 77  e records that w
1b120 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79  ill be stored by
1b130 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74  .** the pseudo-t
1b140 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
1b150 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20  _OpenPseudo: {. 
1b160 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1b170 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
1b180 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73  ->p1>=0 );.  ass
1b190 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20  ert( pOp->p3>=0 
1b1a0 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  );.  pCx = alloc
1b1b0 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1b1c0 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d  ->p1, pOp->p3, -
1b1d0 31 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 43 78  1, 0);.  if( pCx
1b1e0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1b1f0 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f  m;.  pCx->nullRo
1b200 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73  w = 1;.  pCx->ps
1b210 65 75 64 6f 54 61 62 6c 65 52 65 67 20 3d 20 70  eudoTableReg = p
1b220 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69  Op->p2;.  pCx->i
1b230 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43  sTable = 1;.  pC
1b240 78 2d 3e 6d 75 6c 74 69 50 73 65 75 64 6f 20 3d  x->multiPseudo =
1b250 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 62 72 65 61   pOp->p5;.  brea
1b260 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1b270 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20   Close P1 * * * 
1b280 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20  *.**.** Close a 
1b290 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c  cursor previousl
1b2a0 79 20 6f 70 65 6e 65 64 20 61 73 20 50 31 2e 20  y opened as P1. 
1b2b0 20 49 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a   If P1 is not.**
1b2c0 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c   currently open,
1b2d0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1b2e0 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f  n is a no-op..*/
1b2f0 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20  .case OP_Close: 
1b300 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
1b310 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1b320 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1b330 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65    sqlite3VdbeFre
1b340 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70  eCursor(p, p->ap
1b350 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20  Csr[pOp->p1]);. 
1b360 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1b370 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  1] = 0;.  break;
1b380 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1b390 65 65 6b 47 65 20 50 31 20 50 32 20 50 33 20 50  eekGe P1 P2 P3 P
1b3a0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1b3b0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1b3c0 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1b3d0 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1b3e0 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1b3f0 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1b400 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1b410 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1b420 67 69 73 74 65 72 20 50 33 20 61 73 20 74 68 65  gister P3 as the
1b430 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73 6f 72   key.  If cursor
1b440 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1b450 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1b460 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1b470 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1b480 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1b490 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1b4a0 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1b4b0 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1b4c0 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1b4d0 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1b4e0 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
1b4f0 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72  he smallest entr
1b500 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72  y that .** is gr
1b510 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
1b520 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
1b530 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1b540 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a  re no records .*
1b550 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  * greater than o
1b560 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1b570 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1b580 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1b590 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65   to P2..**.** Se
1b5a0 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1b5b0 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63  otFound, Distinc
1b5c0 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47  t, SeekLt, SeekG
1b5d0 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20  t, SeekLe.*/./* 
1b5e0 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 74 20 50  Opcode: SeekGt P
1b5f0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
1b600 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
1b610 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
1b620 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1b630 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
1b640 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
1b650 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
1b660 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
1b670 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
1b680 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20  P3 as a key. If 
1b690 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1b6a0 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
1b6b0 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
1b6c0 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
1b6d0 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
1b6e0 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
1b6f0 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
1b700 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
1b710 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
1b720 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
1b730 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74  o that  it point
1b740 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73  s to the smalles
1b750 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
1b760 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
1b770 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1b780 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1b790 72 65 63 6f 72 64 73 20 67 72 65 61 74 65 72 20  records greater 
1b7a0 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79  than .** the key
1b7b0 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
1b7c0 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
1b7d0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  o P2..**.** See 
1b7e0 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1b7f0 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c  Found, Distinct,
1b800 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c   SeekLt, SeekGe,
1b810 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekLe.*/./* Op
1b820 63 6f 64 65 3a 20 53 65 65 6b 4c 74 20 50 31 20  code: SeekLt P1 
1b830 50 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a 20 53  P2 P3 P4 * .** S
1b840 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1b850 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
1b860 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1b870 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1b880 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1b890 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1b8a0 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1b8b0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1b8c0 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
1b8d0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1b8e0 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
1b8f0 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
1b900 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
1b910 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
1b920 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
1b930 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
1b940 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1b950 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
1b960 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
1b970 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
1b980 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20   to the largest 
1b990 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
1b9a0 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  s less than the 
1b9b0 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1b9c0 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1b9d0 64 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a  ds less than .**
1b9e0 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
1b9f0 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
1ba00 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
1ba10 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1ba20 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44  und, NotFound, D
1ba30 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c  istinct, SeekGt,
1ba40 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a   SeekGe, SeekLe.
1ba50 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
1ba60 65 6b 4c 65 20 50 31 20 50 32 20 50 33 20 50 34  ekLe P1 P2 P3 P4
1ba70 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1ba80 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
1ba90 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
1baa0 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
1bab0 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
1bac0 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
1bad0 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
1bae0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
1baf0 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
1bb00 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
1bb10 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
1bb20 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
1bb30 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1bb40 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
1bb50 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
1bb60 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
1bb70 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
1bb80 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
1bb90 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
1bba0 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
1bbb0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61  points to the la
1bbc0 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  rgest entry that
1bbd0 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61   .** is less tha
1bbe0 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
1bbf0 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
1bc00 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
1bc10 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68  ords .** less th
1bc20 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1bc30 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
1bc40 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
1bc50 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
1bc60 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1bc70 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73  d, NotFound, Dis
1bc80 74 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c 20 53  tinct, SeekGt, S
1bc90 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f  eekGe, SeekLt.*/
1bca0 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 74 3a  .case OP_SeekLt:
1bcb0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
1bcc0 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1bcd0 5f 53 65 65 6b 4c 65 3a 20 20 20 20 20 20 20 20  _SeekLe:        
1bce0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1bcf0 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 65 3a  .case OP_SeekGe:
1bd00 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
1bd10 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1bd20 5f 53 65 65 6b 47 74 3a 20 7b 20 20 20 20 20 20  _SeekGt: {      
1bd30 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1bd40 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e  .  int res;.  in
1bd50 74 20 6f 63 3b 0a 20 20 56 64 62 65 43 75 72 73  t oc;.  VdbeCurs
1bd60 6f 72 20 2a 70 43 3b 0a 20 20 55 6e 70 61 63 6b  or *pC;.  Unpack
1bd70 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 69 6e  edRecord r;.  in
1bd80 74 20 6e 46 69 65 6c 64 3b 0a 20 20 69 36 34 20  t nField;.  i64 
1bd90 69 4b 65 79 3b 20 20 20 20 20 20 2f 2a 20 54 68  iKey;      /* Th
1bda0 65 20 72 6f 77 69 64 20 77 65 20 61 72 65 20 74  e rowid we are t
1bdb0 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20  o seek to */..  
1bdc0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1bdd0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1bde0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
1bdf0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30  sert( pOp->p2!=0
1be00 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1be10 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1be20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1be30 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
1be40 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30  seudoTableReg==0
1be50 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
1be60 5f 53 65 65 6b 4c 65 20 3d 3d 20 4f 50 5f 53 65  _SeekLe == OP_Se
1be70 65 6b 4c 74 2b 31 20 29 3b 0a 20 20 61 73 73 65  ekLt+1 );.  asse
1be80 72 74 28 20 4f 50 5f 53 65 65 6b 47 65 20 3d 3d  rt( OP_SeekGe ==
1be90 20 4f 50 5f 53 65 65 6b 4c 74 2b 32 20 29 3b 0a   OP_SeekLt+2 );.
1bea0 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1beb0 6b 47 74 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74  kGt == OP_SeekLt
1bec0 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +3 );.  assert( 
1bed0 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b  pC->isOrdered );
1bee0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
1bef0 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 6f  Cursor!=0 );.  o
1bf00 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  c = pOp->opcode;
1bf10 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
1bf20 20 30 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73   0;.  if( pC->is
1bf30 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Table ){.    /* 
1bf40 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20  The input value 
1bf50 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f  in P3 might be o
1bf60 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65  f any type: inte
1bf70 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e  ger, real, strin
1bf80 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20  g,.    ** blob, 
1bf90 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74  or NULL.  But it
1bfa0 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20   needs to be an 
1bfb0 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20 77  integer before w
1bfc0 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 2a 2a 20  e can do.    ** 
1bfd0 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f 76  the seek, so cov
1bfe0 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20 70  ert it. */.    p
1bff0 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
1c000 3e 70 33 5d 3b 0a 20 20 20 20 61 70 70 6c 79 4e  >p3];.    applyN
1c010 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
1c020 49 6e 33 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d  In3);.    iKey =
1c030 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
1c040 61 6c 75 65 28 70 49 6e 33 29 3b 0a 20 20 20 20  alue(pIn3);.    
1c050 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1c060 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 49 66   = 0;..    /* If
1c070 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f   the P3 value co
1c080 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65  uld not be conve
1c090 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74  rted into an int
1c0a0 65 67 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20  eger without.   
1c0b0 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f   ** loss of info
1c0c0 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70  rmation, then sp
1c0d0 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67  ecial processing
1c0e0 20 69 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20   is required... 
1c0f0 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33  */.    if( (pIn3
1c100 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
1c110 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  t)==0 ){.      i
1c120 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
1c130 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29  & MEM_Real)==0 )
1c140 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20  {.        /* If 
1c150 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 61 6e  the P3 value can
1c160 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64  not be converted
1c170 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f   into any kind o
1c180 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20  f a number,.    
1c190 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20      ** then the 
1c1a0 73 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73  seek is not poss
1c1b0 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f  ible, so jump to
1c1c0 20 50 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 70   P2 */.        p
1c1d0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1c1e0 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
1c1f0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
1c200 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69  * If the approxi
1c210 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c  mation iKey is l
1c220 61 72 67 65 72 20 74 68 61 6e 20 74 68 65 20 61  arger than the a
1c230 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63  ctual real searc
1c240 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c  h.      ** term,
1c250 20 73 75 62 73 74 69 74 75 74 65 20 3e 3d 20 66   substitute >= f
1c260 6f 72 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c  or > and < for <
1c270 3d 2e 20 65 2e 67 2e 20 69 66 20 74 68 65 20 73  =. e.g. if the s
1c280 65 61 72 63 68 20 74 65 72 6d 0a 20 20 20 20 20  earch term.     
1c290 20 2a 2a 20 69 73 20 34 2e 39 20 61 6e 64 20 74   ** is 4.9 and t
1c2a0 68 65 20 69 6e 74 65 67 65 72 20 61 70 70 72 6f  he integer appro
1c2b0 78 69 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20  ximation 5:.    
1c2c0 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20    **.      **   
1c2d0 20 20 20 20 20 28 78 20 3e 20 20 34 2e 39 29 20       (x >  4.9) 
1c2e0 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20     ->     (x >= 
1c2f0 35 29 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20  5).      **     
1c300 20 20 20 28 78 20 3c 3d 20 34 2e 39 29 20 20 20     (x <= 4.9)   
1c310 20 2d 3e 20 20 20 20 20 28 78 20 3c 20 20 35 29   ->     (x <  5)
1c320 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
1c330 69 66 28 20 70 49 6e 33 2d 3e 72 3c 28 64 6f 75  if( pIn3->r<(dou
1c340 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20  ble)iKey ){.    
1c350 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
1c360 65 65 6b 47 65 3d 3d 28 4f 50 5f 53 65 65 6b 47  eekGe==(OP_SeekG
1c370 74 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  t-1) );.        
1c380 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c  assert( OP_SeekL
1c390 74 3d 3d 28 4f 50 5f 53 65 65 6b 4c 65 2d 31 29  t==(OP_SeekLe-1)
1c3a0 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1c3b0 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 65 20 26  rt( (OP_SeekLe &
1c3c0 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
1c3d0 65 6b 47 74 20 26 20 30 78 30 30 30 31 29 20 29  ekGt & 0x0001) )
1c3e0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f  ;.        if( (o
1c3f0 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50  c & 0x0001)==(OP
1c400 5f 53 65 65 6b 47 74 20 26 20 30 78 30 30 30 31  _SeekGt & 0x0001
1c410 29 20 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20  ) ) oc--;.      
1c420 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  }..      /* If t
1c430 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e  he approximation
1c440 20 69 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65 72   iKey is smaller
1c450 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c   than the actual
1c460 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20   real search.   
1c470 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73     ** term, subs
1c480 74 69 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20  titute <= for < 
1c490 61 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a  and > for >=.  *
1c4a0 2f 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 28  /.      else if(
1c4b0 20 70 49 6e 33 2d 3e 72 3e 28 64 6f 75 62 6c 65   pIn3->r>(double
1c4c0 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20  )iKey ){.       
1c4d0 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1c4e0 4c 65 3d 3d 28 4f 50 5f 53 65 65 6b 4c 74 2b 31  Le==(OP_SeekLt+1
1c4f0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
1c500 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 74 3d 3d  ert( OP_SeekGt==
1c510 28 4f 50 5f 53 65 65 6b 47 65 2b 31 29 20 29 3b  (OP_SeekGe+1) );
1c520 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1c530 20 28 4f 50 5f 53 65 65 6b 4c 74 20 26 20 30 78   (OP_SeekLt & 0x
1c540 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47  0001)==(OP_SeekG
1c550 65 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20  e & 0x0001) );. 
1c560 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26         if( (oc &
1c570 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
1c580 65 6b 4c 74 20 26 20 30 78 30 30 30 31 29 20 29  ekLt & 0x0001) )
1c590 20 6f 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20   oc++;.      }. 
1c5a0 20 20 20 7d 20 0a 20 20 20 20 72 63 20 3d 20 73     } .    rc = s
1c5b0 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1c5c0 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43  oUnpacked(pC->pC
1c5d0 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69  ursor, 0, (u64)i
1c5e0 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  Key, 0, &res);. 
1c5f0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1c600 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
1c610 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1c620 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20  error;.    }.   
1c630 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20   if( res==0 ){. 
1c640 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73       pC->rowidIs
1c650 56 61 6c 69 64 20 3d 20 31 3b 0a 20 20 20 20 20  Valid = 1;.     
1c660 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   pC->lastRowid =
1c670 20 69 4b 65 79 3b 0a 20 20 20 20 7d 0a 20 20 7d   iKey;.    }.  }
1c680 65 6c 73 65 7b 0a 20 20 20 20 6e 46 69 65 6c 64  else{.    nField
1c690 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
1c6a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1c6b0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
1c6c0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e  );.    assert( n
1c6d0 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72  Field>0 );.    r
1c6e0 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
1c6f0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
1c700 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46  nField = (u16)nF
1c710 69 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68  ield;..    /* Th
1c720 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63  e next line of c
1c730 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20  ode computes as 
1c740 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61  follows, only fa
1c750 73 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69  ster:.    **   i
1c760 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74  f( oc==OP_SeekGt
1c770 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   || oc==OP_SeekL
1c780 65 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20  e ){.    **     
1c790 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b  r.flags = UNPACK
1c7a0 45 44 5f 49 4e 43 52 4b 45 59 3b 0a 20 20 20 20  ED_INCRKEY;.    
1c7b0 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  **   }else{.    
1c7c0 2a 2a 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  **     r.flags =
1c7d0 20 30 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 0a 20   0;.    **   }. 
1c7e0 20 20 20 2a 2f 0a 20 20 20 20 72 2e 66 6c 61 67     */.    r.flag
1c7f0 73 20 3d 20 28 75 38 29 28 55 4e 50 41 43 4b 45  s = (u8)(UNPACKE
1c800 44 5f 49 4e 43 52 4b 45 59 20 2a 20 28 31 20 26  D_INCRKEY * (1 &
1c810 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 74   (oc - OP_SeekLt
1c820 29 29 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  )));.    assert(
1c830 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 74 20 7c   oc!=OP_SeekGt |
1c840 7c 20 72 2e 66 6c 61 67 73 3d 3d 55 4e 50 41 43  | r.flags==UNPAC
1c850 4b 45 44 5f 49 4e 43 52 4b 45 59 20 29 3b 0a 20  KED_INCRKEY );. 
1c860 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
1c870 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 72 2e 66 6c  P_SeekLe || r.fl
1c880 61 67 73 3d 3d 55 4e 50 41 43 4b 45 44 5f 49 4e  ags==UNPACKED_IN
1c890 43 52 4b 45 59 20 29 3b 0a 20 20 20 20 61 73 73  CRKEY );.    ass
1c8a0 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1c8b0 47 65 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 30  Ge || r.flags==0
1c8c0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1c8d0 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c  oc!=OP_SeekLt ||
1c8e0 20 72 2e 66 6c 61 67 73 3d 3d 30 20 29 3b 0a 0a   r.flags==0 );..
1c8f0 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d      r.aMem = &aM
1c900 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66  em[pOp->p3];.#if
1c910 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
1c920 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f  .    { int i; fo
1c930 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c  r(i=0; i<r.nFiel
1c940 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20  d; i++) assert( 
1c950 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d  memIsValid(&r.aM
1c960 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64  em[i]) ); }.#end
1c970 69 66 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f  if.    ExpandBlo
1c980 62 28 72 2e 61 4d 65 6d 29 3b 0a 20 20 20 20 72  b(r.aMem);.    r
1c990 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1c9a0 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1c9b0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20  C->pCursor, &r, 
1c9c0 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  0, 0, &res);.   
1c9d0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1c9e0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
1c9f0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1ca00 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  ror;.    }.    p
1ca10 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1ca20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 64  = 0;.  }.  pC->d
1ca30 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1ca40 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
1ca50 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1ca60 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  LE;.#ifdef SQLIT
1ca70 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33  E_TEST.  sqlite3
1ca80 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b  _search_count++;
1ca90 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 6f 63  .#endif.  if( oc
1caa0 3e 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 20 20  >=OP_SeekGe ){  
1cab0 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
1cac0 65 65 6b 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekGe || oc==OP_
1cad0 53 65 65 6b 47 74 20 29 3b 0a 20 20 20 20 69 66  SeekGt );.    if
1cae0 28 20 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d  ( res<0 || (res=
1caf0 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65  =0 && oc==OP_See
1cb00 6b 47 74 29 20 29 7b 0a 20 20 20 20 20 20 72 65  kGt) ){.      re
1cb10 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20  s = 0;.      rc 
1cb20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  = sqlite3BtreeNe
1cb30 78 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  xt(pC->pCursor, 
1cb40 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28  &res);.      if(
1cb50 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1cb60 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1cb70 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1cb80 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1cb90 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 0;.    }else{
1cba0 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a  .      res = 0;.
1cbb0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
1cbc0 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f     assert( oc==O
1cbd0 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d  P_SeekLt || oc==
1cbe0 4f 50 5f 53 65 65 6b 4c 65 20 29 3b 0a 20 20 20  OP_SeekLe );.   
1cbf0 20 69 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72   if( res>0 || (r
1cc00 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f  es==0 && oc==OP_
1cc10 53 65 65 6b 4c 74 29 20 29 7b 0a 20 20 20 20 20  SeekLt) ){.     
1cc20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20   res = 0;.      
1cc30 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1cc40 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 70 43  ePrevious(pC->pC
1cc50 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
1cc60 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1cc70 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
1cc80 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1cc90 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  .      pC->rowid
1cca0 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  IsValid = 0;.   
1ccb0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a   }else{.      /*
1ccc0 20 72 65 73 20 6d 69 67 68 74 20 62 65 20 6e 65   res might be ne
1ccd0 67 61 74 69 76 65 20 62 65 63 61 75 73 65 20 74  gative because t
1cce0 68 65 20 74 61 62 6c 65 20 69 73 20 65 6d 70 74  he table is empt
1ccf0 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20 20 20  y.  Check to.   
1cd00 20 20 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69     ** see if thi
1cd10 73 20 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20  s is the case.. 
1cd20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 65       */.      re
1cd30 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  s = sqlite3Btree
1cd40 45 6f 66 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  Eof(pC->pCursor)
1cd50 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73  ;.    }.  }.  as
1cd60 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
1cd70 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a  );.  if( res ){.
1cd80 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1cd90 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
1cda0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1cdb0 20 53 65 65 6b 20 50 31 20 50 32 20 2a 20 2a 20   Seek P1 P2 * * 
1cdc0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
1cdd0 69 6e 74 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a  intkey=r[P2].**.
1cde0 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e  ** P1 is an open
1cdf0 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 61 6e   table cursor an
1ce00 64 20 50 32 20 69 73 20 61 20 72 6f 77 69 64 20  d P2 is a rowid 
1ce10 69 6e 74 65 67 65 72 2e 20 20 41 72 72 61 6e 67  integer.  Arrang
1ce20 65 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d  e.** for P1 to m
1ce30 6f 76 65 20 73 6f 20 74 68 61 74 20 69 74 20 70  ove so that it p
1ce40 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 72 6f 77  oints to the row
1ce50 69 64 20 67 69 76 65 6e 20 62 79 20 50 32 2e 0a  id given by P2..
1ce60 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 63  **.** This is ac
1ce70 74 75 61 6c 6c 79 20 61 20 64 65 66 65 72 72 65  tually a deferre
1ce80 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67  d seek.  Nothing
1ce90 20 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e   actually happen
1cea0 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63  s until.** the c
1ceb0 75 72 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f  ursor is used to
1cec0 20 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20   read a record. 
1ced0 20 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f   That way, if no
1cee0 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c   reads.** occur,
1cef0 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20   no unnecessary 
1cf00 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a  I/O happens..*/.
1cf10 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20  case OP_Seek: { 
1cf20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56     /* in2 */.  V
1cf30 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
1cf40 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1cf50 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1cf60 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1cf70 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1cf80 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1cf90 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
1cfa0 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
1cfb0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1cfc0 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
1cfd0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
1cfe0 30 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  0;.  pIn2 = &aMe
1cff0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43  m[pOp->p2];.  pC
1d000 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d  ->movetoTarget =
1d010 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
1d020 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 70 43  alue(pIn2);.  pC
1d030 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1d040 20 30 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72   0;.  pC->deferr
1d050 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20  edMoveto = 1;.  
1d060 62 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20  break;.}.  ../* 
1d070 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31  Opcode: Found P1
1d080 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1d090 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1d0a0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50  3@P4].**.** If P
1d0b0 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74  4==0 then regist
1d0c0 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
1d0d0 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
1d0e0 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49  y MakeRecord.  I
1d0f0 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72  f.** P4>0 then r
1d100 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
1d110 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65  e first of P4 re
1d120 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72  gisters that for
1d130 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a  m an unpacked.**
1d140 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43   record..**.** C
1d150 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
1d160 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
1d170 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
1d180 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
1d190 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61 20 70 72  nd P4.** is a pr
1d1a0 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72  efix of any entr
1d1b0 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a  y in P1 then a j
1d1c0 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50  ump is made to P
1d1d0 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c  2 and.** P1 is l
1d1e0 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
1d1f0 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74  the matching ent
1d200 72 79 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ry..**.** See al
1d210 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f  so: NotFound, No
1d220 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45 78 69  Conflict, NotExi
1d230 73 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f  sts. SeekGe.*/./
1d240 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75  * Opcode: NotFou
1d250 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  nd P1 P2 P3 P4 *
1d260 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1d270 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1d280 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
1d290 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
1d2a0 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
1d2b0 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
1d2c0 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
1d2d0 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1d2e0 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
1d2f0 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
1d300 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
1d310 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
1d320 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69   .** Cursor P1 i
1d330 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74  s on an index bt
1d340 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63  ree.  If the rec
1d350 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62  ord identified b
1d360 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69  y P3 and P4.** i
1d370 73 20 6e 6f 74 20 74 68 65 20 70 72 65 66 69 78  s not the prefix
1d380 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e   of any entry in
1d390 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20   P1 then a jump 
1d3a0 69 73 20 6d 61 64 65 20 74 6f 20 50 32 2e 20 20  is made to P2.  
1d3b0 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63  If P1 .** does c
1d3c0 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72 79 20  ontain an entry 
1d3d0 77 68 6f 73 65 20 70 72 65 66 69 78 20 6d 61 74  whose prefix mat
1d3e0 63 68 65 73 20 74 68 65 20 50 33 2f 50 34 20 72  ches the P3/P4 r
1d3f0 65 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74 72  ecord then contr
1d400 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f  ol.** falls thro
1d410 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
1d420 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e 64 20  instruction and 
1d430 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  P1 is left point
1d440 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61  ing at the.** ma
1d450 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a  tching entry..**
1d460 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1d470 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20  und, NotExists, 
1d480 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a  NoConflict.*/./*
1d490 20 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c   Opcode: NoConfl
1d4a0 69 63 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ict P1 P2 P3 P4 
1d4b0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
1d4c0 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
1d4d0 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20  * If P4==0 then 
1d4e0 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64  register P3 hold
1d4f0 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75  s a blob constru
1d500 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f  cted by MakeReco
1d510 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20  rd.  If.** P4>0 
1d520 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
1d530 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66   is the first of
1d540 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68   P4 registers th
1d550 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  at form an unpac
1d560 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a  ked.** record..*
1d570 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  * .** Cursor P1 
1d580 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  is on an index b
1d590 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65  tree.  If the re
1d5a0 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20  cord identified 
1d5b0 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20  by P3 and P4.** 
1d5c0 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 4e 55 4c  contains any NUL
1d5d0 4c 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d  L value, jump im
1d5e0 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
1d5f0 20 20 49 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f    If all terms o
1d600 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20  f the.** record 
1d610 61 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65  are not-NULL the
1d620 6e 20 61 20 63 68 65 63 6b 20 69 73 20 64 6f 6e  n a check is don
1d630 65 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69  e to determine i
1d640 66 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68 65  f any row in the
1d650 0a 2a 2a 20 50 31 20 69 6e 64 65 78 20 62 74 72  .** P1 index btr
1d660 65 65 20 68 61 73 20 61 20 6d 61 74 63 68 69 6e  ee has a matchin
1d670 67 20 6b 65 79 20 70 72 65 66 69 78 2e 20 20 49  g key prefix.  I
1d680 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d  f there are no m
1d690 61 74 63 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20  atches, jump.** 
1d6a0 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
1d6b0 32 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  2.  If there is 
1d6c0 61 20 6d 61 74 63 68 2c 20 66 61 6c 6c 20 74 68  a match, fall th
1d6d0 72 6f 75 67 68 20 61 6e 64 20 6c 65 61 76 65 20  rough and leave 
1d6e0 74 68 65 20 50 31 0a 2a 2a 20 63 75 72 73 6f 72  the P1.** cursor
1d6f0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65   pointing to the
1d700 20 6d 61 74 63 68 69 6e 67 20 72 6f 77 2e 0a 2a   matching row..*
1d710 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1d720 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4f   is similar to O
1d730 50 5f 4e 6f 74 46 6f 75 6e 64 20 77 69 74 68 20  P_NotFound with 
1d740 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20 74  the exceptions t
1d750 68 61 74 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63  hat the.** branc
1d760 68 20 69 73 20 61 6c 77 61 79 73 20 74 61 6b 65  h is always take
1d770 6e 20 69 66 20 61 6e 79 20 70 61 72 74 20 6f 66  n if any part of
1d780 20 74 68 65 20 73 65 61 72 63 68 20 6b 65 79 20   the search key 
1d790 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  input is NULL..*
1d7a0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e  *.** See also: N
1d7b0 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c 20  otFound, Found, 
1d7c0 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63 61 73  NotExists.*/.cas
1d7d0 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 3a  e OP_NoConflict:
1d7e0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1d7f0 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  3 */.case OP_Not
1d800 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20  Found:       /* 
1d810 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1d820 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20  e OP_Found: {   
1d830 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1d840 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61  3 */.  int alrea
1d850 64 79 45 78 69 73 74 73 3b 0a 20 20 69 6e 74 20  dyExists;.  int 
1d860 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ii;.  VdbeCursor
1d870 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
1d880 0a 20 20 63 68 61 72 20 2a 70 46 72 65 65 3b 0a  .  char *pFree;.
1d890 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
1d8a0 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70   *pIdxKey;.  Unp
1d8b0 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20  ackedRecord r;. 
1d8c0 20 63 68 61 72 20 61 54 65 6d 70 52 65 63 5b 52   char aTempRec[R
1d8d0 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e 70  OUND8(sizeof(Unp
1d8e0 61 63 6b 65 64 52 65 63 6f 72 64 29 29 20 2b 20  ackedRecord)) + 
1d8f0 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 34 20 2b 20  sizeof(Mem)*4 + 
1d900 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  7];..#ifdef SQLI
1d910 54 45 5f 54 45 53 54 0a 20 20 69 66 28 20 70 4f  TE_TEST.  if( pO
1d920 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f  p->opcode!=OP_No
1d930 43 6f 6e 66 6c 69 63 74 20 29 20 73 71 6c 69 74  Conflict ) sqlit
1d940 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b  e3_found_count++
1d950 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73 73 65  ;.#endif..  asse
1d960 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1d970 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1d980 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
1d990 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1d9a0 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 43 20  4_INT32 );.  pC 
1d9b0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1d9c0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1d9d0 43 21 3d 30 20 29 3b 0a 20 20 70 49 6e 33 20 3d  C!=0 );.  pIn3 =
1d9e0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1d9f0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
1da00 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61  Cursor!=0 );.  a
1da10 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1da20 6c 65 3d 3d 30 20 29 3b 0a 20 20 70 46 72 65 65  le==0 );.  pFree
1da30 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
1da40 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64  eded.  Only used
1da50 20 74 6f 20 73 75 70 70 72 65 73 73 20 61 20 63   to suppress a c
1da60 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e  ompiler warning.
1da70 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
1da80 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70  4.i>0 ){.    r.p
1da90 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
1daa0 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
1dab0 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d  ield = (u16)pOp-
1dac0 3e 70 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65  >p4.i;.    r.aMe
1dad0 6d 20 3d 20 70 49 6e 33 3b 0a 23 69 66 64 65 66  m = pIn3;.#ifdef
1dae0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
1daf0 20 20 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b    {.      int i;
1db00 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
1db10 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
1db20 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
1db30 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
1db40 61 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20  aMem[i]) );.    
1db50 20 20 20 20 69 66 28 20 69 20 29 20 52 45 47 49      if( i ) REGI
1db60 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
1db70 70 33 2b 69 2c 20 26 72 2e 61 4d 65 6d 5b 69 5d  p3+i, &r.aMem[i]
1db80 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
1db90 0a 23 65 6e 64 69 66 0a 20 20 20 20 72 2e 66 6c  .#endif.    r.fl
1dba0 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50  ags = UNPACKED_P
1dbb0 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20  REFIX_MATCH;.   
1dbc0 20 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20   pIdxKey = &r;. 
1dbd0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 64 78   }else{.    pIdx
1dbe0 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62  Key = sqlite3Vdb
1dbf0 65 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65  eAllocUnpackedRe
1dc00 63 6f 72 64 28 0a 20 20 20 20 20 20 20 20 70 43  cord(.        pC
1dc10 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 61 54 65 6d  ->pKeyInfo, aTem
1dc20 70 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54 65  pRec, sizeof(aTe
1dc30 6d 70 52 65 63 29 2c 20 26 70 46 72 65 65 0a 20  mpRec), &pFree. 
1dc40 20 20 20 29 3b 20 0a 20 20 20 20 69 66 28 20 70     ); .    if( p
1dc50 49 64 78 4b 65 79 3d 3d 30 20 29 20 67 6f 74 6f  IdxKey==0 ) goto
1dc60 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73   no_mem;.    ass
1dc70 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
1dc80 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
1dc90 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 33     assert( (pIn3
1dca0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65  ->flags & MEM_Ze
1dcb0 72 6f 29 3d 3d 30 20 29 3b 20 20 2f 2a 20 7a 65  ro)==0 );  /* ze
1dcc0 72 6f 62 6c 6f 62 73 20 61 6c 72 65 61 64 79 20  roblobs already 
1dcd0 65 78 70 61 6e 64 65 64 20 2a 2f 0a 20 20 20 20  expanded */.    
1dce0 73 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72  sqlite3VdbeRecor
1dcf0 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79  dUnpack(pC->pKey
1dd00 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70  Info, pIn3->n, p
1dd10 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29  In3->z, pIdxKey)
1dd20 3b 0a 20 20 20 20 70 49 64 78 4b 65 79 2d 3e 66  ;.    pIdxKey->f
1dd30 6c 61 67 73 20 7c 3d 20 55 4e 50 41 43 4b 45 44  lags |= UNPACKED
1dd40 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20  _PREFIX_MATCH;. 
1dd50 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70   }.  if( pOp->op
1dd60 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c  code==OP_NoConfl
1dd70 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f  ict ){.    /* Fo
1dd80 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c  r the OP_NoConfl
1dd90 69 63 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65  ict opcode, take
1dda0 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 79   the jump if any
1ddb0 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 69   of the.    ** i
1ddc0 6e 70 75 74 20 66 69 65 6c 64 73 20 61 72 65 20  nput fields are 
1ddd0 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20  NULL, since any 
1dde0 6b 65 79 20 77 69 74 68 20 61 20 4e 55 4c 4c 20  key with a NULL 
1ddf0 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20  will not.    ** 
1de00 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20  conflict */.    
1de10 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e  for(ii=0; ii<r.n
1de20 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20  Field; ii++){.  
1de30 20 20 20 20 69 66 28 20 72 2e 61 4d 65 6d 5b 69      if( r.aMem[i
1de40 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  i].flags & MEM_N
1de50 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ull ){.        p
1de60 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1de70 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
1de80 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
1de90 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
1dea0 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1deb0 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
1dec0 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20   pIdxKey, 0, 0, 
1ded0 26 72 65 73 29 3b 0a 20 20 69 66 28 20 70 4f 70  &res);.  if( pOp
1dee0 2d 3e 70 34 2e 69 3d 3d 30 20 29 7b 0a 20 20 20  ->p4.i==0 ){.   
1def0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
1df00 62 2c 20 70 46 72 65 65 29 3b 0a 20 20 7d 0a 20  b, pFree);.  }. 
1df10 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1df20 4f 4b 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b  OK ){.    break;
1df30 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52  .  }.  pC->seekR
1df40 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61  esult = res;.  a
1df50 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28  lreadyExists = (
1df60 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e  res==0);.  pC->n
1df70 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61  ullRow = 1-alrea
1df80 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e  dyExists;.  pC->
1df90 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1dfa0 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
1dfb0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1dfc0 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ALE;.  if( pOp->
1dfd0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64  opcode==OP_Found
1dfe0 20 29 7b 0a 20 20 20 20 69 66 28 20 61 6c 72 65   ){.    if( alre
1dff0 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20 3d  adyExists ) pc =
1e000 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1e010 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 21  }else{.    if( !
1e020 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20  alreadyExists ) 
1e030 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1e040 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1e050 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
1e060 45 78 69 73 74 73 20 50 31 20 50 32 20 50 33 20  Exists P1 P2 P3 
1e070 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
1e080 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a   intkey=r[P3].**
1e090 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
1e0a0 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20  dex of a cursor 
1e0b0 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74  open on an SQL t
1e0c0 61 62 6c 65 20 62 74 72 65 65 20 28 77 69 74 68  able btree (with
1e0d0 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73   integer.** keys
1e0e0 29 2e 20 20 50 33 20 69 73 20 61 6e 20 69 6e 74  ).  P3 is an int
1e0f0 65 67 65 72 20 72 6f 77 69 64 2e 20 20 49 66 20  eger rowid.  If 
1e100 50 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74  P1 does not cont
1e110 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74  ain a record wit
1e120 68 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20 74 68  h.** rowid P3 th
1e130 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  en jump immediat
1e140 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 50  ely to P2.  If P
1e150 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61  1 does contain a
1e160 20 72 65 63 6f 72 64 0a 2a 2a 20 77 69 74 68 20   record.** with 
1e170 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6c 65  rowid P3 then le
1e180 61 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 70  ave the cursor p
1e190 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20  ointing at that 
1e1a0 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 0a  record and fall.
1e1b0 2a 2a 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ** through to th
1e1c0 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
1e1d0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50  on..**.** The OP
1e1e0 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65  _NotFound opcode
1e1f0 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61   performs the sa
1e200 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20  me operation on 
1e210 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20  index btrees.** 
1e220 28 77 69 74 68 20 61 72 62 69 74 72 61 72 79 20  (with arbitrary 
1e230 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73  multi-value keys
1e240 29 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  )..**.** See als
1e250 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1e260 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a  nd, NoConflict.*
1e270 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69  /.case OP_NotExi
1e280 73 74 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  sts: {        /*
1e290 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
1e2a0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1e2b0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
1e2c0 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  r;.  int res;.  
1e2d0 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e  u64 iKey;..  pIn
1e2e0 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
1e2f0 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  3];.  assert( pI
1e300 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1e310 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Int );.  assert(
1e320 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1e330 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1e340 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
1e350 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1e360 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1e370 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1e380 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73  isTable );.  ass
1e390 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
1e3a0 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20  ableReg==0 );.  
1e3b0 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
1e3c0 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
1e3d0 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 65 73  Crsr!=0 );.  res
1e3e0 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20 70   = 0;.  iKey = p
1e3f0 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20 3d  In3->u.i;.  rc =
1e400 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1e410 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
1e420 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26  r, 0, iKey, 0, &
1e430 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6c 61 73 74  res);.  pC->last
1e440 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75 2e  Rowid = pIn3->u.
1e450 69 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  i;.  pC->rowidIs
1e460 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30 20 3f  Valid = res==0 ?
1e470 31 3a 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  1:0;.  pC->nullR
1e480 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  ow = 0;.  pC->ca
1e490 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1e4a0 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64  E_STALE;.  pC->d
1e4b0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1e4c0 30 3b 0a 20 20 69 66 28 20 72 65 73 21 3d 30 20  0;.  if( res!=0 
1e4d0 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
1e4e0 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 61 73 73  >p2 - 1;.    ass
1e4f0 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73  ert( pC->rowidIs
1e500 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 7d 0a  Valid==0 );.  }.
1e510 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
1e520 20 3d 20 72 65 73 3b 0a 20 20 62 72 65 61 6b 3b   = res;.  break;
1e530 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1e540 65 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20  equence P1 P2 * 
1e550 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
1e560 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a   r[P2]=rowid.**.
1e570 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74  ** Find the next
1e580 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65   available seque
1e590 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63  nce number for c
1e5a0 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69  ursor P1..** Wri
1e5b0 74 65 20 74 68 65 20 73 65 71 75 65 6e 63 65 20  te the sequence 
1e5c0 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69  number into regi
1e5d0 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20  ster P2..** The 
1e5e0 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
1e5f0 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  on the cursor is
1e600 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74   incremented aft
1e610 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72  er this.** instr
1e620 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73  uction.  .*/.cas
1e630 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b  e OP_Sequence: {
1e640 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
1e650 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
1e660 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1e670 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1e680 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1e690 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
1e6a0 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b  r[pOp->p1]!=0 );
1e6b0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
1e6c0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1e6d0 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20  ->seqCount++;.  
1e6e0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
1e6f0 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50  code: NewRowid P
1e700 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
1e710 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
1e720 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61  owid.**.** Get a
1e730 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65 63   new integer rec
1e740 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e  ord number (a.k.
1e750 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64 20  a "rowid") used 
1e760 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20  as the key to a 
1e770 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65  table..** The re
1e780 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e  cord number is n
1e790 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
1e7a0 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74  ed as a key in t
1e7b0 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74  he database.** t
1e7c0 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72  able that cursor
1e7d0 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20   P1 points to.  
1e7e0 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e  The new record n
1e7f0 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65 6e  umber is written
1e800 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72  .** written to r
1e810 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
1e820 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50  * If P3>0 then P
1e830 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  3 is a register 
1e840 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  in the root fram
1e850 65 20 6f 66 20 74 68 69 73 20 56 44 42 45 20 74  e of this VDBE t
1e860 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68  hat holds .** th
1e870 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f  e largest previo
1e880 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72  usly generated r
1e890 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f  ecord number. No
1e8a0 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62   new record numb
1e8b0 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77  ers are.** allow
1e8c0 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68  ed to be less th
1e8d0 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57  an this value. W
1e8e0 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72  hen this value r
1e8f0 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d  eaches its maxim
1e900 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54  um, .** an SQLIT
1e910 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20  E_FULL error is 
1e920 67 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50  generated. The P
1e930 33 20 72 65 67 69 73 74 65 72 20 69 73 20 75 70  3 register is up
1e940 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20 27  dated with the '
1e950 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65  .** generated re
1e960 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69  cord number. Thi
1e970 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69  s P3 mechanism i
1e980 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69  s used to help i
1e990 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20  mplement the.** 
1e9a0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65  AUTOINCREMENT fe
1e9b0 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ature..*/.case O
1e9c0 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20  P_NewRowid: {   
1e9d0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
1e9e0 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
1e9f0 69 36 34 20 76 3b 20 20 20 20 20 20 20 20 20 20  i64 v;          
1ea00 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
1ea10 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62  w rowid */.  Vdb
1ea20 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
1ea30 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66      /* Cursor of
1ea40 20 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68   table to get th
1ea50 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20  e new rowid */. 
1ea60 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20   int res;       
1ea70 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
1ea80 74 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42  t of an sqlite3B
1ea90 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20  treeLast() */.  
1eaa0 69 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20  int cnt;        
1eab0 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65         /* Counte
1eac0 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e  r to limit the n
1ead0 75 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68 65  umber of searche
1eae0 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  s */.  Mem *pMem
1eaf0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1eb00 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
1eb10 67 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20  g largest rowid 
1eb20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  for AUTOINCREMEN
1eb30 54 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  T */.  VdbeFrame
1eb40 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a   *pFrame;     /*
1eb50 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56   Root frame of V
1eb60 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b  DBE */..  v = 0;
1eb70 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73  .  res = 0;.  as
1eb80 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1eb90 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1eba0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1ebb0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1ebc0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1ebd0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 4e 45 56  !=0 );.  if( NEV
1ebe0 45 52 28 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d  ER(pC->pCursor==
1ebf0 30 29 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  0) ){.    /* The
1ec00 20 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61   zero initializa
1ec10 74 69 6f 6e 20 61 62 6f 76 65 20 69 73 20 61 6c  tion above is al
1ec20 6c 20 74 68 61 74 20 69 73 20 6e 65 65 64 65 64  l that is needed
1ec30 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   */.  }else{.   
1ec40 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77   /* The next row
1ec50 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d  id or record num
1ec60 62 65 72 20 28 64 69 66 66 65 72 65 6e 74 20 74  ber (different t
1ec70 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d  erms for the sam
1ec80 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20  e.    ** thing) 
1ec90 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61  is obtained in a
1eca0 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69   two-step algori
1ecb0 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  thm..    **.    
1ecc0 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74 74 65  ** First we atte
1ecd0 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20  mpt to find the 
1ece0 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67  largest existing
1ecf0 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f   rowid and add o
1ed00 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61  ne.    ** to tha
1ed10 74 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 6c  t.  But if the l
1ed20 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20  argest existing 
1ed30 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64 79  rowid is already
1ed40 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20   the maximum.   
1ed50 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74   ** positive int
1ed60 65 67 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f  eger, we have to
1ed70 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
1ed80 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20   the second.    
1ed90 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63  ** probabilistic
1eda0 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a   algorithm.    *
1edb0 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63  *.    ** The sec
1edc0 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ond algorithm is
1edd0 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77   to select a row
1ede0 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64  id at random and
1edf0 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69   see if.    ** i
1ee00 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73  t already exists
1ee10 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
1ee20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65  If it does not e
1ee30 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20  xist, we have.  
1ee40 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20    ** succeeded. 
1ee50 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72   If the random r
1ee60 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c  owid does exist,
1ee70 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77   we select a new
1ee80 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20   one.    ** and 
1ee90 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f  try again, up to
1eea0 20 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20   100 times..    
1eeb0 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  */.    assert( p
1eec0 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23  C->isTable );..#
1eed0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32 42  ifdef SQLITE_32B
1eee0 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65 66  IT_ROWID.#   def
1eef0 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30 78  ine MAX_ROWID 0x
1ef00 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a 20  7fffffff.#else. 
1ef10 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69     /* Some compi
1ef20 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62  lers complain ab
1ef30 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66  out constants of
1ef40 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66 66   the form 0x7fff
1ef50 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20 20  ffffffffffff..  
1ef60 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70    ** Others comp
1ef70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66 66  lain about 0x7ff
1ef80 66 66 66 66 66 66 66 66 66 66 66 66 66 66 4c 4c  ffffffffffffffLL
1ef90 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
1efa0 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20 20   macro seems.   
1efb0 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20 74   ** to provide t
1efc0 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c  he constant whil
1efd0 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d  e making all com
1efe0 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20 20  pilers happy..  
1eff0 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65 20    */.#   define 
1f000 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34 29  MAX_ROWID  (i64)
1f010 28 20 28 28 28 75 36 34 29 30 78 37 66 66 66 66  ( (((u64)0x7ffff
1f020 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36 34  fff)<<32) | (u64
1f030 29 30 78 66 66 66 66 66 66 66 66 20 29 0a 23 65  )0xffffffff ).#e
1f040 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21 70  ndif..    if( !p
1f050 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
1f060 64 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73  d ){.      v = s
1f070 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 43 61  qlite3BtreeGetCa
1f080 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43  chedRowid(pC->pC
1f090 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 69 66  ursor);.      if
1f0a0 28 20 76 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ( v==0 ){.      
1f0b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1f0c0 72 65 65 4c 61 73 74 28 70 43 2d 3e 70 43 75 72  reeLast(pC->pCur
1f0d0 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
1f0e0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1f0f0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
1f100 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1f110 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1f120 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
1f130 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20  ( res ){.       
1f140 20 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49     v = 1;   /* I
1f150 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34 38 30 37  MP: R-61914-4807
1f160 34 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 65 6c  4 */.        }el
1f170 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 61 73  se{.          as
1f180 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
1f190 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
1f1a0 70 43 2d 3e 70 43 75 72 73 6f 72 29 20 29 3b 0a  pC->pCursor) );.
1f1b0 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73            rc = s
1f1c0 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
1f1d0 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ze(pC->pCursor, 
1f1e0 26 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61  &v);.          a
1f1f0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
1f200 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 43 61 6e  E_OK );   /* Can
1f210 6e 6f 74 20 66 61 69 6c 20 66 6f 6c 6c 6f 77 69  not fail followi
1f220 6e 67 20 42 74 72 65 65 4c 61 73 74 28 29 20 2a  ng BtreeLast() *
1f230 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  /.          if( 
1f240 76 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a  v>=MAX_ROWID ){.
1f250 20 20 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e              pC->
1f260 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d  useRandomRowid =
1f270 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65   1;.          }e
1f280 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
1f290 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20   v++;   /* IMP: 
1f2a0 52 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a 2f  R-29538-34987 */
1f2b0 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
1f2c0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a       }.      }..
1f2d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1f2e0 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
1f2f0 54 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  T.      if( pOp-
1f300 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  >p3 ){.        /
1f310 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33  * Assert that P3
1f320 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f   is a valid memo
1f330 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20  ry cell. */.    
1f340 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1f350 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  >p3>0 );.       
1f360 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29   if( p->pFrame )
1f370 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28  {.          for(
1f380 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
1f390 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  ; pFrame->pParen
1f3a0 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
1f3b0 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
1f3c0 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20        /* Assert 
1f3d0 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c  that P3 is a val
1f3e0 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20  id memory cell. 
1f3f0 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  */.          ass
1f400 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46  ert( pOp->p3<=pF
1f410 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  rame->nMem );.  
1f420 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26          pMem = &
1f430 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
1f440 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 7d  ->p3];.        }
1f450 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
1f460 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50  /* Assert that P
1f470 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
1f480 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20  ory cell. */.   
1f490 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1f4a0 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
1f4b0 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
1f4c0 20 20 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d            pMem =
1f4d0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1f4e0 0a 20 20 20 20 20 20 20 20 20 20 6d 65 6d 41 62  .          memAb
1f4f0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
1f500 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  Mem);.        }.
1f510 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1f520 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29  memIsValid(pMem)
1f530 20 29 3b 0a 0a 20 20 20 20 20 20 20 20 52 45 47   );..        REG
1f540 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
1f550 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20  >p3, pMem);.    
1f560 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
1f570 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65  emIntegerify(pMe
1f580 6d 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  m);.        asse
1f590 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73  rt( (pMem->flags
1f5a0 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
1f5b0 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f  ;  /* mem(P3) ho
1f5c0 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a  lds an integer *
1f5d0 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4d  /.        if( pM
1f5e0 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57  em->u.i==MAX_ROW
1f5f0 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e  ID || pC->useRan
1f600 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
1f610 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
1f620 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50  E_FULL;   /* IMP
1f630 3a 20 52 2d 31 32 32 37 35 2d 36 31 33 33 38 20  : R-12275-61338 
1f640 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  */.          got
1f650 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1f660 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a  rror;.        }.
1f670 20 20 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d          if( v<pM
1f680 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20  em->u.i+1 ){.   
1f690 20 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d         v = pMem-
1f6a0 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20  >u.i + 1;.      
1f6b0 20 20 7d 0a 20 20 20 20 20 20 20 20 70 4d 65 6d    }.        pMem
1f6c0 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 20  ->u.i = v;.     
1f6d0 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20   }.#endif..     
1f6e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
1f6f0 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e  CachedRowid(pC->
1f700 70 43 75 72 73 6f 72 2c 20 76 3c 4d 41 58 5f 52  pCursor, v<MAX_R
1f710 4f 57 49 44 20 3f 20 76 2b 31 20 3a 20 30 29 3b  OWID ? v+1 : 0);
1f720 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
1f730 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
1f740 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d  d ){.      /* IM
1f750 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a  PLEMENTATION-OF:
1f760 20 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49   R-07677-41881 I
1f770 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f  f the largest RO
1f780 57 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20  WID is equal to 
1f790 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72  the.      ** lar
1f7a0 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e  gest possible in
1f7b0 74 65 67 65 72 20 28 39 32 32 33 33 37 32 30 33  teger (922337203
1f7c0 36 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e  6854775807) then
1f7d0 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20   the database.  
1f7e0 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74      ** engine st
1f7f0 61 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73  arts picking pos
1f800 69 74 69 76 65 20 63 61 6e 64 69 64 61 74 65 20  itive candidate 
1f810 52 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d  ROWIDs at random
1f820 20 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20   until.      ** 
1f830 69 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61  it finds one tha
1f840 74 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75  t is not previou
1f850 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20  sly used. */.   
1f860 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1f870 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20  p3==0 );  /* We 
1f880 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e  cannot be in ran
1f890 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69  dom rowid mode i
1f8a0 66 20 74 68 69 73 20 69 73 0a 20 20 20 20 20 20  f this is.      
1f8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8c0 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54         ** an AUT
1f8d0 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65  OINCREMENT table
1f8e0 2e 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 6f 6e  . */.      /* on
1f8f0 20 74 68 65 20 66 69 72 73 74 20 61 74 74 65 6d   the first attem
1f900 70 74 2c 20 73 69 6d 70 6c 79 20 64 6f 20 6f 6e  pt, simply do on
1f910 65 20 6d 6f 72 65 20 74 68 61 6e 20 70 72 65 76  e more than prev
1f920 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 76 20  ious */.      v 
1f930 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20  = lastRowid;.   
1f940 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57     v &= (MAX_ROW
1f950 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72  ID>>1); /* ensur
1f960 65 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67  e doesn't go neg
1f970 61 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20 76  ative */.      v
1f980 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f  ++; /* ensure no
1f990 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20  n-zero */.      
1f9a0 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 77  cnt = 0;.      w
1f9b0 68 69 6c 65 28 20 20 20 28 28 72 63 20 3d 20 73  hile(   ((rc = s
1f9c0 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1f9d0 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43  oUnpacked(pC->pC
1f9e0 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76  ursor, 0, (u64)v
1f9f0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1fa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa20 20 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51     0, &res))==SQ
1fa30 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20  LITE_OK).       
1fa40 20 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29       && (res==0)
1fa50 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20  .            && 
1fa60 28 2b 2b 63 6e 74 3c 31 30 30 29 29 7b 0a 20 20  (++cnt<100)){.  
1fa70 20 20 20 20 20 20 2f 2a 20 63 6f 6c 6c 69 73 69        /* collisi
1fa80 6f 6e 20 2d 20 74 72 79 20 61 6e 6f 74 68 65 72  on - try another
1fa90 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 2a 2f   random rowid */
1faa0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
1fab0 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65  _randomness(size
1fac0 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20  of(v), &v);.    
1fad0 20 20 20 20 69 66 28 20 63 6e 74 3c 35 20 29 7b      if( cnt<5 ){
1fae0 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72  .          /* tr
1faf0 79 20 22 73 6d 61 6c 6c 22 20 72 61 6e 64 6f 6d  y "small" random
1fb00 20 72 6f 77 69 64 73 20 66 6f 72 20 74 68 65 20   rowids for the 
1fb10 69 6e 69 74 69 61 6c 20 61 74 74 65 6d 70 74 73  initial attempts
1fb20 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 76 20   */.          v 
1fb30 26 3d 20 30 78 66 66 66 66 66 66 3b 0a 20 20 20  &= 0xffffff;.   
1fb40 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1fb50 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f        v &= (MAX_
1fb60 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e  ROWID>>1); /* en
1fb70 73 75 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20  sure doesn't go 
1fb80 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20  negative */.    
1fb90 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 76 2b      }.        v+
1fba0 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e  +; /* ensure non
1fbb0 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d  -zero */.      }
1fbc0 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
1fbd0 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d  QLITE_OK && res=
1fbe0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =0 ){.        rc
1fbf0 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20   = SQLITE_FULL; 
1fc00 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31    /* IMP: R-3821
1fc10 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20  9-53002 */.     
1fc20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1fc30 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1fc40 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74    }.      assert
1fc50 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a  ( v>0 );  /* EV:
1fc60 20 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a   R-40812-03570 *
1fc70 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  /.    }.    pC->
1fc80 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1fc90 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
1fca0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
1fcb0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1fcc0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1fcd0 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
1fce0 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = v;.  break;.}
1fcf0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73  ../* Opcode: Ins
1fd00 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ert P1 P2 P3 P4 
1fd10 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
1fd20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61 74  intkey=r[P3] dat
1fd30 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72  a=r[P2].**.** Wr
1fd40 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74  ite an entry int
1fd50 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63  o the table of c
1fd60 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77  ursor P1.  A new
1fd70 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65   entry is.** cre
1fd80 61 74 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e  ated if it doesn
1fd90 27 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  't already exist
1fda0 20 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f 72   or the data for
1fdb0 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20   an existing.** 
1fdc0 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72 69  entry is overwri
1fdd0 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20  tten.  The data 
1fde0 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d  is the value MEM
1fdf0 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20  _Blob stored in 
1fe00 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62  register.** numb
1fe10 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69  er P2. The key i
1fe20 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
1fe30 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79  ster P3. The key
1fe40 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45   must.** be a ME
1fe50 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  M_Int..**.** If 
1fe60 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
1fe70 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  GE flag of P5 is
1fe80 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
1fe90 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20  ow change count 
1fea0 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
1feb0 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
1fec0 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41  ).  If the OPFLA
1fed0 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67  G_LASTROWID flag
1fee0 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a   of P5 is set,.*
1fef0 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20  * then rowid is 
1ff00 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65  stored for subse
1ff10 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20  quent return by 
1ff20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c  the.** sqlite3_l
1ff30 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
1ff40 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68  () function (oth
1ff50 65 72 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d  erwise it is unm
1ff60 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20  odified)..**.** 
1ff70 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53  If the OPFLAG_US
1ff80 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
1ff90 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e   of P5 is set an
1ffa0 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  d if the result 
1ffb0 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73  of.** the last s
1ffc0 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f  eek operation (O
1ffd0 50 5f 4e 6f 74 45 78 69 73 74 73 29 20 77 61 73  P_NotExists) was
1ffe0 20 61 20 73 75 63 63 65 73 73 2c 20 74 68 65 6e   a success, then
1fff0 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69   this.** operati
20000 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65  on will not atte
20010 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20  mpt to find the 
20020 61 70 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20  appropriate row 
20030 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20  before doing.** 
20040 74 68 65 20 69 6e 73 65 72 74 20 62 75 74 20 77  the insert but w
20050 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72  ill instead over
20060 77 72 69 74 65 20 74 68 65 20 72 6f 77 20 74 68  write the row th
20070 61 74 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  at the cursor is
20080 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f  .** currently po
20090 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73  inting to.  Pres
200a0 75 6d 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f  umably, the prio
200b0 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  r OP_NotExists o
200c0 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72  pcode.** has alr
200d0 65 61 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20  eady positioned 
200e0 74 68 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65  the cursor corre
200f0 63 74 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61  ctly.  This is a
20100 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a  n optimization.*
20110 2a 20 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65  * that boosts pe
20120 72 66 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f  rformance by avo
20130 69 64 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20  iding redundant 
20140 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  seeks..**.** If 
20150 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  the OPFLAG_ISUPD
20160 41 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c  ATE flag is set,
20170 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   then this opcod
20180 65 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a  e is part of an.
20190 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61 74  ** UPDATE operat
201a0 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20  ion.  Otherwise 
201b0 28 69 66 20 74 68 65 20 66 6c 61 67 20 69 73 20  (if the flag is 
201c0 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69 73  clear) then this
201d0 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61   opcode.** is pa
201e0 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20  rt of an INSERT 
201f0 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20  operation.  The 
20200 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e  difference is on
20210 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a  ly important to.
20220 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 68 6f  ** the update ho
20230 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65  ok..**.** Parame
20240 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74  ter P4 may point
20250 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e   to a string con
20260 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c  taining the tabl
20270 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61  e-name, or.** ma
20280 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74  y be NULL. If it
20290 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68   is not NULL, th
202a0 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  en the update-ho
202b0 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e  ok .** (sqlite3.
202c0 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29  xUpdateCallback)
202d0 20 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c   is invoked foll
202e0 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73 73 66  owing a successf
202f0 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a  ul insert..**.**
20300 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20   (WARNING/TODO: 
20310 49 66 20 50 31 20 69 73 20 61 20 70 73 65 75 64  If P1 is a pseud
20320 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20  o-cursor and P2 
20330 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a  is dynamically.*
20340 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  * allocated, the
20350 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50  n ownership of P
20360 32 20 69 73 20 74 72 61 6e 73 66 65 72 72 65 64  2 is transferred
20370 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63   to the pseudo-c
20380 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67  ursor.** and reg
20390 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73  ister P2 becomes
203a0 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20   ephemeral.  If 
203b0 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 68  the cursor is ch
203c0 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61  anged, the.** va
203d0 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
203e0 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61  P2 will then cha
203f0 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20  nge.  Make sure 
20400 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a  this does not.**
20410 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c   cause any probl
20420 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ems.).**.** This
20430 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c   instruction onl
20440 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65  y works on table
20450 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65  s.  The equivale
20460 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  nt instruction.*
20470 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73  * for indices is
20480 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a   OP_IdxInsert..*
20490 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73  /./* Opcode: Ins
204a0 65 72 74 49 6e 74 20 50 31 20 50 32 20 50 33 20  ertInt P1 P2 P3 
204b0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
204c0 73 3a 20 20 69 6e 74 6b 65 79 3d 50 33 20 64 61  s:  intkey=P3 da
204d0 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  ta=r[P2].**.** T
204e0 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74 6c  his works exactl
204f0 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74  y like OP_Insert
20500 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
20510 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20 69   key is the.** i
20520 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 33 2c  nteger value P3,
20530 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f   not the value o
20540 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 73 74  f the integer st
20550 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
20560 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P3..*/.case OP_
20570 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f 50  Insert: .case OP
20580 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20  _InsertInt: {.  
20590 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20  Mem *pData;     
205a0 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f    /* MEM cell ho
205b0 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74  lding data for t
205c0 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20  he record to be 
205d0 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65  inserted */.  Me
205e0 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20  m *pKey;        
205f0 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64  /* MEM cell hold
20600 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65  ing key  for the
20610 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34   record */.  i64
20620 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f   iKey;         /
20630 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20 52 4f  * The integer RO
20640 57 49 44 20 6f 72 20 6b 65 79 20 66 6f 72 20 74  WID or key for t
20650 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20  he record to be 
20660 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 56 64  inserted */.  Vd
20670 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
20680 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62  /* Cursor to tab
20690 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e  le into which in
206a0 73 65 72 74 20 69 73 20 77 72 69 74 74 65 6e 20  sert is written 
206b0 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20  */.  int nZero; 
206c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
206d0 20 6f 66 20 7a 65 72 6f 2d 62 79 74 65 73 20 74   of zero-bytes t
206e0 6f 20 61 70 70 65 6e 64 20 2a 2f 0a 20 20 69 6e  o append */.  in
206f0 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20  t seekResult;   
20700 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69  /* Result of pri
20710 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20  or seek or 0 if 
20720 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54  no USESEEKRESULT
20730 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74   flag */.  const
20740 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20   char *zDb;  /* 
20750 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20  database name - 
20760 75 73 65 64 20 62 79 20 74 68 65 20 75 70 64 61  used by the upda
20770 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e  te hook */.  con
20780 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 3b 20 2f  st char *zTbl; /
20790 2a 20 54 61 62 6c 65 20 6e 61 6d 65 20 2d 20 75  * Table name - u
207a0 73 65 64 20 62 79 20 74 68 65 20 6f 70 64 61 74  sed by the opdat
207b0 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20  e hook */.  int 
207c0 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  op;           /*
207d0 20 4f 70 63 6f 64 65 20 66 6f 72 20 75 70 64 61   Opcode for upda
207e0 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f  te hook: SQLITE_
207f0 55 50 44 41 54 45 20 6f 72 20 53 51 4c 49 54 45  UPDATE or SQLITE
20800 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a 20 20 70 44  _INSERT */..  pD
20810 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  ata = &aMem[pOp-
20820 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
20830 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
20840 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
20850 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65   );.  assert( me
20860 6d 49 73 56 61 6c 69 64 28 70 44 61 74 61 29 20  mIsValid(pData) 
20870 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
20880 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
20890 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
208a0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
208b0 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
208c0 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
208d0 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20  TableReg==0 );. 
208e0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
208f0 61 62 6c 65 20 29 3b 0a 20 20 52 45 47 49 53 54  able );.  REGIST
20900 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
20910 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66 28  , pData);..  if(
20920 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
20930 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 70  _Insert ){.    p
20940 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Key = &aMem[pOp-
20950 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  >p3];.    assert
20960 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20  ( pKey->flags & 
20970 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61  MEM_Int );.    a
20980 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
20990 64 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20 52  d(pKey) );.    R
209a0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
209b0 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20  p->p3, pKey);.  
209c0 20 20 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75    iKey = pKey->u
209d0 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  .i;.  }else{.   
209e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
209f0 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49  code==OP_InsertI
20a00 6e 74 20 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d  nt );.    iKey =
20a10 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20   pOp->p3;.  }.. 
20a20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
20a30 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
20a40 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
20a50 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
20a60 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29  FLAG_LASTROWID )
20a70 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   db->lastRowid =
20a80 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65   lastRowid = iKe
20a90 79 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e  y;.  if( pData->
20aa0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
20ab0 20 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a   ){.    pData->z
20ac0 20 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d   = 0;.    pData-
20ad0 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  >n = 0;.  }else{
20ae0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61  .    assert( pDa
20af0 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  ta->flags & (MEM
20b00 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29  _Blob|MEM_Str) )
20b10 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75  ;.  }.  seekResu
20b20 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26  lt = ((pOp->p5 &
20b30 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
20b40 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
20b50 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20  kResult : 0);.  
20b60 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  if( pData->flags
20b70 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
20b80 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61     nZero = pData
20b90 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c  ->u.nZero;.  }el
20ba0 73 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20  se{.    nZero = 
20bb0 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  0;.  }.  sqlite3
20bc0 42 74 72 65 65 53 65 74 43 61 63 68 65 64 52 6f  BtreeSetCachedRo
20bd0 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  wid(pC->pCursor,
20be0 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69   0);.  rc = sqli
20bf0 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70  te3BtreeInsert(p
20c00 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69  C->pCursor, 0, i
20c10 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20  Key,.           
20c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
20c30 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e  Data->z, pData->
20c40 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20  n, nZero,.      
20c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c60 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f      (pOp->p5 & O
20c70 50 46 4c 41 47 5f 41 50 50 45 4e 44 29 21 3d 30  PFLAG_APPEND)!=0
20c80 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20 20 29  , seekResult.  )
20c90 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  ;.  pC->rowidIsV
20ca0 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  alid = 0;.  pC->
20cb0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
20cc0 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
20cd0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
20ce0 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  ALE;..  /* Invok
20cf0 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  e the update-hoo
20d00 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
20d10 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  /.  if( rc==SQLI
20d20 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70  TE_OK && db->xUp
20d30 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20  dateCallback && 
20d40 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
20d50 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70   zDb = db->aDb[p
20d60 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20  C->iDb].zName;. 
20d70 20 20 20 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70     zTbl = pOp->p
20d80 34 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28  4.z;.    op = ((
20d90 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
20da0 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c  _ISUPDATE) ? SQL
20db0 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c  ITE_UPDATE : SQL
20dc0 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20 20  ITE_INSERT);.   
20dd0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
20de0 61 62 6c 65 20 29 3b 0a 20 20 20 20 64 62 2d 3e  able );.    db->
20df0 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28  xUpdateCallback(
20e00 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20  db->pUpdateArg, 
20e10 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69  op, zDb, zTbl, i
20e20 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Key);.    assert
20e30 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a  ( pC->iDb>=0 );.
20e40 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
20e50 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74  /* Opcode: Delet
20e60 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  e P1 P2 * P4 *.*
20e70 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20  *.** Delete the 
20e80 72 65 63 6f 72 64 20 61 74 20 77 68 69 63 68 20  record at which 
20e90 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 69 73  the P1 cursor is
20ea0 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
20eb0 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ing..**.** The c
20ec0 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65  ursor will be le
20ed0 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 65  ft pointing at e
20ee0 69 74 68 65 72 20 74 68 65 20 6e 65 78 74 20 6f  ither the next o
20ef0 72 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a 2a  r the previous.*
20f00 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68 65 20  * record in the 
20f10 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69 73 20  table. If it is 
20f20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
20f30 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f 72 64   the next record
20f40 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65  , then.** the ne
20f50 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  xt Next instruct
20f60 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f  ion will be a no
20f70 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69 74 20 69  -op.  Hence it i
20f80 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65 0a 2a  s OK to delete.*
20f90 2a 20 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20  * a record from 
20fa0 77 69 74 68 69 6e 20 61 6e 20 4e 65 78 74 20 6c  within an Next l
20fb0 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  oop..**.** If th
20fc0 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
20fd0 20 66 6c 61 67 20 6f 66 20 50 32 20 69 73 20 73   flag of P2 is s
20fe0 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77  et, then the row
20ff0 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73   change count is
21000 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  .** incremented 
21010 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e  (otherwise not).
21020 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e  .**.** P1 must n
21030 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74 61 62  ot be pseudo-tab
21040 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f 20 62  le.  It has to b
21050 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20 77  e a real table w
21060 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20  ith.** multiple 
21070 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  rows..**.** If P
21080 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74  4 is not NULL, t
21090 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e 61  hen it is the na
210a0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
210b0 74 68 61 74 20 50 31 20 69 73 0a 2a 2a 20 70 6f  that P1 is.** po
210c0 69 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68 65 20  inting to.  The 
210d0 75 70 64 61 74 65 20 68 6f 6f 6b 20 77 69 6c 6c  update hook will
210e0 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69 66 20   be invoked, if 
210f0 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20 49 66  it exists..** If
21100 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20   P4 is not NULL 
21110 74 68 65 6e 20 74 68 65 20 50 31 20 63 75 72 73  then the P1 curs
21120 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62 65 65  or must have bee
21130 6e 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a 20  n positioned.** 
21140 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e  using OP_NotFoun
21150 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b  d prior to invok
21160 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  ing this opcode.
21170 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65  .*/.case OP_Dele
21180 74 65 3a 20 7b 0a 20 20 69 36 34 20 69 4b 65 79  te: {.  i64 iKey
21190 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
211a0 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  pC;..  assert( p
211b0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
211c0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
211d0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
211e0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
211f0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
21200 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
21210 75 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20  ursor!=0 );  /* 
21220 4f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72 20 72  Only valid for r
21230 65 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70  eal tables, no p
21240 73 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 20  seudotables */. 
21250 20 69 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73 74   iKey = pC->last
21260 52 6f 77 69 64 3b 20 20 20 20 20 20 2f 2a 20 4f  Rowid;      /* O
21270 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74 68 65  nly used for the
21280 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a   update hook */.
21290 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 44 65 6c  .  /* The OP_Del
212a0 65 74 65 20 6f 70 63 6f 64 65 20 61 6c 77 61 79  ete opcode alway
212b0 73 20 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f 50 5f  s follows an OP_
212c0 4e 6f 74 45 78 69 73 74 73 20 6f 72 20 4f 50 5f  NotExists or OP_
212d0 4c 61 73 74 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f  Last or.  ** OP_
212e0 43 6f 6c 75 6d 6e 20 6f 6e 20 74 68 65 20 73 61  Column on the sa
212f0 6d 65 20 74 61 62 6c 65 20 77 69 74 68 6f 75 74  me table without
21300 20 61 6e 79 20 69 6e 74 65 72 76 65 6e 69 6e 67   any intervening
21310 20 6f 70 65 72 61 74 69 6f 6e 73 20 74 68 61 74   operations that
21320 0a 20 20 2a 2a 20 6d 69 67 68 74 20 6d 6f 76 65  .  ** might move
21330 20 6f 72 20 69 6e 76 61 6c 69 64 61 74 65 20 74   or invalidate t
21340 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65 6e 63  he cursor.  Henc
21350 65 20 63 75 72 73 6f 72 20 70 43 20 69 73 20 61  e cursor pC is a
21360 6c 77 61 79 73 20 70 6f 69 6e 74 69 6e 67 0a 20  lways pointing. 
21370 20 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77 20 74   ** to the row t
21380 6f 20 62 65 20 64 65 6c 65 74 65 64 20 61 6e 64  o be deleted and
21390 20 74 68 65 20 73 71 6c 69 74 65 33 56 64 62 65   the sqlite3Vdbe
213a0 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 6f  CursorMoveto() o
213b0 70 65 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 62 65  peration.  ** be
213c0 6c 6f 77 20 69 73 20 61 6c 77 61 79 73 20 61 20  low is always a 
213d0 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 6e 6f 74  no-op and cannot
213e0 20 66 61 69 6c 2e 20 20 57 65 20 77 69 6c 6c 20   fail.  We will 
213f0 72 75 6e 20 69 74 20 61 6e 79 68 6f 77 2c 20 74  run it anyhow, t
21400 68 6f 75 67 68 2c 0a 20 20 2a 2a 20 74 6f 20 67  hough,.  ** to g
21410 75 61 72 64 20 61 67 61 69 6e 73 74 20 66 75 74  uard against fut
21420 75 72 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74  ure changes to t
21430 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
21440 72 2e 0a 20 20 2a 2a 2f 0a 20 20 61 73 73 65 72  r..  **/.  asser
21450 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
21460 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63  oveto==0 );.  rc
21470 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
21480 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
21490 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d    if( NEVER(rc!=
214a0 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74  SQLITE_OK) ) got
214b0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
214c0 72 72 6f 72 3b 0a 0a 20 20 73 71 6c 69 74 65 33  rror;..  sqlite3
214d0 42 74 72 65 65 53 65 74 43 61 63 68 65 64 52 6f  BtreeSetCachedRo
214e0 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  wid(pC->pCursor,
214f0 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69   0);.  rc = sqli
21500 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70  te3BtreeDelete(p
21510 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70  C->pCursor);.  p
21520 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
21530 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20   CACHE_STALE;.. 
21540 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75   /* Invoke the u
21550 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65  pdate-hook if re
21560 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28  quired. */.  if(
21570 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
21580 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c  & db->xUpdateCal
21590 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34  lback && pOp->p4
215a0 2e 7a 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c  .z && pC->isTabl
215b0 65 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 55 70  e ){.    db->xUp
215c0 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d  dateCallback(db-
215d0 3e 70 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c  >pUpdateArg, SQL
215e0 49 54 45 5f 44 45 4c 45 54 45 2c 0a 20 20 20 20  ITE_DELETE,.    
215f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21600 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e      db->aDb[pC->
21610 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 70 4f 70 2d  iDb].zName, pOp-
21620 3e 70 34 2e 7a 2c 20 69 4b 65 79 29 3b 0a 20 20  >p4.z, iKey);.  
21630 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44    assert( pC->iD
21640 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 69 66  b>=0 );.  }.  if
21650 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c  ( pOp->p2 & OPFL
21660 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e  AG_NCHANGE ) p->
21670 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 62 72 65  nChange++;.  bre
21680 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ak;.}./* Opcode:
21690 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20   ResetCount * * 
216a0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
216b0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 68 61  value of the cha
216c0 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63  nge counter is c
216d0 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64 61 74  opied to the dat
216e0 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20  abase handle.** 
216f0 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 28  change counter (
21700 72 65 74 75 72 6e 65 64 20 62 79 20 73 75 62 73  returned by subs
21710 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20  equent calls to 
21720 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
21730 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20  ))..** Then the 
21740 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63 68 61  VMs internal cha
21750 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65 73 65  nge counter rese
21760 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73  ts to 0..** This
21770 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67   is used by trig
21780 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f  ger programs..*/
21790 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 43 6f  .case OP_ResetCo
217a0 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  unt: {.  sqlite3
217b0 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 64  VdbeSetChanges(d
217c0 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a  b, p->nChange);.
217d0 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30    p->nChange = 0
217e0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
217f0 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 43   Opcode: SorterC
21800 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33 20  ompare P1 P2 P3 
21810 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P4.** Synopsis: 
21820 20 69 66 20 6b 65 79 28 50 31 29 21 3d 72 74 72   if key(P1)!=rtr
21830 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f 74  im(r[P3],P4) got
21840 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  o P2.**.** P1 is
21850 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72   a sorter cursor
21860 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  . This instructi
21870 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61 20 70 72  on compares a pr
21880 65 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20 74  efix of the.** t
21890 68 65 20 72 65 63 6f 72 64 20 62 6c 6f 62 20 69  he record blob i
218a0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 67  n register P3 ag
218b0 61 69 6e 73 74 20 61 20 70 72 65 66 69 78 20 6f  ainst a prefix o
218c0 66 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74  f the entry that
218d0 20 0a 2a 2a 20 74 68 65 20 73 6f 72 74 65 72 20   .** the sorter 
218e0 63 75 72 73 6f 72 20 63 75 72 72 65 6e 74 6c 79  cursor currently
218f0 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65   points to.  The
21900 20 66 69 6e 61 6c 20 50 34 20 66 69 65 6c 64 73   final P4 fields
21910 20 6f 66 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20   of both.** the 
21920 50 33 20 61 6e 64 20 73 6f 72 74 65 72 20 72 65  P3 and sorter re
21930 63 6f 72 64 20 61 72 65 20 69 67 6e 6f 72 65 64  cord are ignored
21940 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
21950 72 20 50 33 20 6f 72 20 74 68 65 20 73 6f 72 74  r P3 or the sort
21960 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55  er contains a NU
21970 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65  LL in one of the
21980 69 72 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 2a  ir significant.*
21990 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74 20 63 6f  * fields (not co
219a0 75 6e 74 69 6e 67 20 74 68 65 20 50 34 20 66 69  unting the P4 fi
219b0 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 20  elds at the end 
219c0 77 68 69 63 68 20 61 72 65 20 69 67 6e 6f 72 65  which are ignore
219d0 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63  d) then.** the c
219e0 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 73 73  omparison is ass
219f0 75 6d 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c  umed to be equal
21a00 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72  ..**.** Fall thr
21a10 6f 75 67 68 20 74 6f 20 6e 65 78 74 20 69 6e 73  ough to next ins
21a20 74 72 75 63 74 69 6f 6e 20 69 66 20 74 68 65 20  truction if the 
21a30 74 77 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d 70  two records comp
21a40 61 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a 20  are equal to.** 
21a50 65 61 63 68 20 6f 74 68 65 72 2e 20 20 4a 75 6d  each other.  Jum
21a60 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 79 20  p to P2 if they 
21a70 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a  are different..*
21a80 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
21a90 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64 62  Compare: {.  Vdb
21aa0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
21ab0 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e 49  nt res;.  int nI
21ac0 67 6e 6f 72 65 3b 0a 0a 20 20 70 43 20 3d 20 70  gnore;..  pC = p
21ad0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
21ae0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
21af0 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 61 73  rter(pC) );.  as
21b00 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
21b10 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
21b20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
21b30 70 2d 3e 70 33 5d 3b 0a 20 20 6e 49 67 6e 6f 72  p->p3];.  nIgnor
21b40 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  e = pOp->p4.i;. 
21b50 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
21b60 65 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 28 70  eSorterCompare(p
21b70 43 2c 20 70 49 6e 33 2c 20 6e 49 67 6e 6f 72 65  C, pIn3, nIgnore
21b80 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72  , &res);.  if( r
21b90 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  es ){.    pc = p
21ba0 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20  Op->p2-1;.  }.  
21bb0 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70  break;.};../* Op
21bc0 63 6f 64 65 3a 20 53 6f 72 74 65 72 44 61 74 61  code: SorterData
21bd0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
21be0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
21bf0 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  data.**.** Write
21c00 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
21c10 32 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 6f  2 the current so
21c20 72 74 65 72 20 64 61 74 61 20 66 6f 72 20 73 6f  rter data for so
21c30 72 74 65 72 20 63 75 72 73 6f 72 20 50 31 2e 0a  rter cursor P1..
21c40 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
21c50 72 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43  rData: {.  VdbeC
21c60 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f  ursor *pC;..  pO
21c70 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
21c80 70 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  p2];.  pC = p->a
21c90 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
21ca0 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
21cb0 72 28 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20  r(pC) );.  rc = 
21cc0 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
21cd0 72 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74  rRowkey(pC, pOut
21ce0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
21cf0 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74  * Opcode: RowDat
21d00 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  a P1 P2 * * *.**
21d10 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
21d20 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74  =data.**.** Writ
21d30 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
21d40 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  P2 the complete 
21d50 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75 72  row data for cur
21d60 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65  sor P1..** There
21d70 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74   is no interpret
21d80 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
21d90 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75  a.  .** It is ju
21da0 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74  st copied onto t
21db0 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65  he P2 register e
21dc0 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74  xactly as .** it
21dd0 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
21de0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
21df0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
21e00 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70  cursor must be p
21e10 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c  ointing to a val
21e20 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55  id row (not a NU
21e30 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20  LL row).** of a 
21e40 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
21e50 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
21e60 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  */./* Opcode: Ro
21e70 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  wKey P1 P2 * * *
21e80 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
21e90 50 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20 57 72  P2]=key.**.** Wr
21ea0 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
21eb0 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74  r P2 the complet
21ec0 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75  e row key for cu
21ed0 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72  rsor P1..** Ther
21ee0 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65  e is no interpre
21ef0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61  tation of the da
21f00 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79  ta.  .** The key
21f10 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20   is copied onto 
21f20 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20  the P2 register 
21f30 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69  exactly as .** i
21f40 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  t is found in th
21f50 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
21f60 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
21f70 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
21f80 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61  pointing to a va
21f90 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e  lid row (not a N
21fa0 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61  ULL row).** of a
21fb0 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
21fc0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
21fd0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b  .*/.case OP_RowK
21fe0 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44  ey:.case OP_RowD
21ff0 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ata: {.  VdbeCur
22000 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
22010 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33  sor *pCrsr;.  u3
22020 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a  2 n;.  i64 n64;.
22030 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
22040 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41  pOp->p2];.  memA
22050 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
22060 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74  pOut);..  /* Not
22070 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e  e that RowKey an
22080 64 20 52 6f 77 44 61 74 61 20 61 72 65 20 72 65  d RowData are re
22090 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65  ally exactly the
220a0 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f   same instructio
220b0 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  n */.  assert( p
220c0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
220d0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
220e0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
220f0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
22100 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
22110 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  pC)==0 );.  asse
22120 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
22130 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  || pOp->opcode!=
22140 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20  OP_RowData );.  
22150 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
22160 62 6c 65 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f  ble==0 || pOp->o
22170 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74  pcode==OP_RowDat
22180 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  a );.  assert( p
22190 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
221a0 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30  ( pC->nullRow==0
221b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
221c0 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
221d0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
221e0 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
221f0 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
22200 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  >pCursor;.  asse
22210 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
22220 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43  CursorIsValid(pC
22230 72 73 72 29 20 29 3b 0a 0a 20 20 2f 2a 20 54 68  rsr) );..  /* Th
22240 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20  e OP_RowKey and 
22250 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64  OP_RowData opcod
22260 65 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77  es always follow
22270 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72   OP_NotExists or
22280 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f  .  ** OP_Rewind/
22290 4f 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20  Op_Next with no 
222a0 69 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74  intervening inst
222b0 72 75 63 74 69 6f 6e 73 20 74 68 61 74 20 6d 69  ructions that mi
222c0 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65 0a 20  ght invalidate. 
222d0 20 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 20   ** the cursor. 
222e0 20 48 65 6e 63 65 20 74 68 65 20 66 6f 6c 6c 6f   Hence the follo
222f0 77 69 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65  wing sqlite3Vdbe
22300 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63  CursorMoveto() c
22310 61 6c 6c 20 69 73 20 61 6c 77 61 79 73 0a 20 20  all is always.  
22320 2a 2a 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63  ** a no-op and c
22330 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 20 20  an never fail.  
22340 42 75 74 20 77 65 20 6c 65 61 76 65 20 69 74 20  But we leave it 
22350 69 6e 20 70 6c 61 63 65 20 61 73 20 61 20 73 61  in place as a sa
22360 66 65 74 79 2e 0a 20 20 2a 2f 0a 20 20 61 73 73  fety..  */.  ass
22370 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
22380 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
22390 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
223a0 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
223b0 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63  ;.  if( NEVER(rc
223c0 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67  !=SQLITE_OK) ) g
223d0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
223e0 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20 70  _error;..  if( p
223f0 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b  C->isTable==0 ){
22400 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 70 43  .    assert( !pC
22410 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
22420 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20   VVA_ONLY(rc =) 
22430 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
22440 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 36 34 29  ize(pCrsr, &n64)
22450 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
22460 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
22470 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73    /* True becaus
22480 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74  e of CursorMovet
22490 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a  o() call above *
224a0 2f 0a 20 20 20 20 69 66 28 20 6e 36 34 3e 64 62  /.    if( n64>db
224b0 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
224c0 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
224d0 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  .      goto too_
224e0 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e  big;.    }.    n
224f0 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d   = (u32)n64;.  }
22500 65 6c 73 65 7b 0a 20 20 20 20 56 56 41 5f 4f 4e  else{.    VVA_ON
22510 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33  LY(rc =) sqlite3
22520 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43  BtreeDataSize(pC
22530 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73  rsr, &n);.    as
22540 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
22550 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61 74  _OK );    /* Dat
22560 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66  aSize() cannot f
22570 61 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e  ail */.    if( n
22580 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74  >(u32)db->aLimit
22590 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
225a0 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67  NGTH] ){.      g
225b0 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
225c0 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c   }.  }.  if( sql
225d0 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
225e0 70 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20  pOut, n, 0) ){. 
225f0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
22600 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20    }.  pOut->n = 
22610 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  n;.  MemSetTypeF
22620 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c  lag(pOut, MEM_Bl
22630 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69  ob);.  if( pC->i
22640 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20  sTable==0 ){.   
22650 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
22660 65 65 4b 65 79 28 70 43 72 73 72 2c 20 30 2c 20  eeKey(pCrsr, 0, 
22670 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d  n, pOut->z);.  }
22680 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73  else{.    rc = s
22690 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 28  qlite3BtreeData(
226a0 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75  pCrsr, 0, n, pOu
226b0 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75  t->z);.  }.  pOu
226c0 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f  t->enc = SQLITE_
226d0 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73  UTF8;  /* In cas
226e0 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76  e the blob is ev
226f0 65 72 20 63 61 73 74 20 74 6f 20 74 65 78 74 20  er cast to text 
22700 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  */.  UPDATE_MAX_
22710 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
22720 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
22730 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
22740 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
22750 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31  Opcode: Rowid P1
22760 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
22770 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
22780 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69  id.**.** Store i
22790 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  n register P2 an
227a0 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
227b0 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65  s the key of the
227c0 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61   table entry tha
227d0 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65  t.** P1 is curre
227e0 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a  ntly point to..*
227f0 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65  *.** P1 can be e
22800 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72  ither an ordinar
22810 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72  y table or a vir
22820 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65  tual table.  The
22830 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  re used to.** be
22840 20 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56   a separate OP_V
22850 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72  Rowid opcode for
22860 20 75 73 65 20 77 69 74 68 20 76 69 72 74 75 61   use with virtua
22870 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68  l tables, but th
22880 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65  is.** one opcode
22890 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62   now works for b
228a0 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e  oth table types.
228b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69  .*/.case OP_Rowi
228c0 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
228d0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
228e0 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62  release */.  Vdb
228f0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
22900 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f  64 v;.  sqlite3_
22910 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
22920 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
22930 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20  ule *pModule;.. 
22940 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
22950 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
22960 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
22970 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
22980 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
22990 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
229a0 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
229b0 62 6c 65 52 65 67 3d 3d 30 20 7c 7c 20 70 43 2d  bleReg==0 || pC-
229c0 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66  >nullRow );.  if
229d0 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  ( pC->nullRow ){
229e0 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
229f0 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
22a00 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20   break;.  }else 
22a10 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  if( pC->deferred
22a20 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20  Moveto ){.    v 
22a30 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  = pC->movetoTarg
22a40 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  et;.#ifndef SQLI
22a50 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
22a60 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28  ABLE.  }else if(
22a70 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72   pC->pVtabCursor
22a80 20 29 7b 0a 20 20 20 20 70 56 74 61 62 20 3d 20   ){.    pVtab = 
22a90 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d  pC->pVtabCursor-
22aa0 3e 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64  >pVtab;.    pMod
22ab0 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
22ac0 64 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74  dule;.    assert
22ad0 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69  ( pModule->xRowi
22ae0 64 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d  d );.    rc = pM
22af0 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43  odule->xRowid(pC
22b00 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26  ->pVtabCursor, &
22b10 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  v);.    sqlite3V
22b20 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
22b30 70 2c 20 70 56 74 61 62 29 3b 0a 23 65 6e 64 69  p, pVtab);.#endi
22b40 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
22b50 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
22b60 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
22b70 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
22b80 72 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  r!=0 );.    rc =
22b90 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
22ba0 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
22bb0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
22bc0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
22bd0 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e  or;.    if( pC->
22be0 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29 7b 0a  rowidIsValid ){.
22bf0 20 20 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c 61        v = pC->la
22c00 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65 6c  stRowid;.    }el
22c10 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
22c20 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
22c30 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ze(pC->pCursor, 
22c40 26 76 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  &v);.      asser
22c50 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
22c60 20 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20 73   );  /* Always s
22c70 6f 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72  o because of Cur
22c80 73 6f 72 4d 6f 76 65 74 6f 28 29 20 61 62 6f 76  sorMoveto() abov
22c90 65 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  e */.    }.  }. 
22ca0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a   pOut->u.i = v;.
22cb0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
22cc0 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50  pcode: NullRow P
22cd0 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
22ce0 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72 20  Move the cursor 
22cf0 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77  P1 to a null row
22d00 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e  .  Any OP_Column
22d10 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74   operations.** t
22d20 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20  hat occur while 
22d30 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e  the cursor is on
22d40 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69   the null row wi
22d50 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69  ll always.** wri
22d60 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  te a NULL..*/.ca
22d70 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b  se OP_NullRow: {
22d80 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
22d90 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  C;..  assert( pO
22da0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
22db0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
22dc0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
22dd0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
22de0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
22df0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31   pC->nullRow = 1
22e00 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  ;.  pC->rowidIsV
22e10 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  alid = 0;.  pC->
22e20 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
22e30 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28  CHE_STALE;.  if(
22e40 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a   pC->pCursor ){.
22e50 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
22e60 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e  ClearCursor(pC->
22e70 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20  pCursor);.  }.  
22e80 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
22e90 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20  ode: Last P1 P2 
22ea0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
22eb0 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20  next use of the 
22ec0 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20  Rowid or Column 
22ed0 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  or Next instruct
22ee0 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77  ion for P1 .** w
22ef0 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65  ill refer to the
22f00 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74   last entry in t
22f10 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
22f20 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  e or index..** I
22f30 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
22f40 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e  ndex is empty an
22f50 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d  d P2>0, then jum
22f60 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
22f70 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73   P2..** If P2 is
22f80 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62   0 or if the tab
22f90 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e  le or index is n
22fa0 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74  ot empty, fall t
22fb0 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
22fc0 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
22fd0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
22fe0 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20  OP_Last: {      
22ff0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
23000 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
23010 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
23020 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20  ;.  int res;..  
23030 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
23040 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
23050 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
23060 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
23070 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
23080 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
23090 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
230a0 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73    res = 0;.  ass
230b0 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b  ert( pCrsr!=0 );
230c0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
230d0 74 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20  treeLast(pCrsr, 
230e0 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c  &res);.  pC->nul
230f0 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a  lRow = (u8)res;.
23100 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
23110 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
23120 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
23130 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
23140 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
23150 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  E;.  if( pOp->p2
23160 3e 30 20 26 26 20 72 65 73 20 29 7b 0a 20 20 20  >0 && res ){.   
23170 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
23180 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
23190 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  }.../* Opcode: S
231a0 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ort P1 P2 * * *.
231b0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
231c0 65 20 64 6f 65 73 20 65 78 61 63 74 6c 79 20 74  e does exactly t
231d0 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73  he same thing as
231e0 20 4f 50 5f 52 65 77 69 6e 64 20 65 78 63 65 70   OP_Rewind excep
231f0 74 20 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63  t that.** it inc
23200 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63  rements an undoc
23210 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76  umented global v
23220 61 72 69 61 62 6c 65 20 75 73 65 64 20 66 6f 72  ariable used for
23230 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20   testing..**.** 
23240 53 6f 72 74 69 6e 67 20 69 73 20 61 63 63 6f 6d  Sorting is accom
23250 70 6c 69 73 68 65 64 20 62 79 20 77 72 69 74 69  plished by writi
23260 6e 67 20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20  ng records into 
23270 61 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c  a sorting index,
23280 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e 64 69  .** then rewindi
23290 6e 67 20 74 68 61 74 20 69 6e 64 65 78 20 61 6e  ng that index an
232a0 64 20 70 6c 61 79 69 6e 67 20 69 74 20 62 61 63  d playing it bac
232b0 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67  k from beginning
232c0 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20   to.** end.  We 
232d0 75 73 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20  use the OP_Sort 
232e0 6f 70 63 6f 64 65 20 69 6e 73 74 65 61 64 20 6f  opcode instead o
232f0 66 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20 64  f OP_Rewind to d
23300 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69  o the.** rewindi
23310 6e 67 20 73 6f 20 74 68 61 74 20 74 68 65 20 67  ng so that the g
23320 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 77  lobal variable w
23330 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e 74  ill be increment
23340 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73  ed and.** regres
23350 73 69 6f 6e 20 74 65 73 74 73 20 63 61 6e 20 64  sion tests can d
23360 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
23370 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70 74 69   or not the opti
23380 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72  mizer is.** corr
23390 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67  ectly optimizing
233a0 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63   out sorts..*/.c
233b0 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72  ase OP_SorterSor
233c0 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  t:    /* jump */
233d0 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b  .case OP_Sort: {
233e0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
233f0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
23400 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f  _TEST.  sqlite3_
23410 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20  sort_count++;.  
23420 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
23430 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20  ount--;.#endif. 
23440 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c   p->aCounter[SQL
23450 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53  ITE_STMTSTATUS_S
23460 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c  ORT]++;.  /* Fal
23470 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
23480 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a  P_Rewind */.}./*
23490 20 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e 64 20   Opcode: Rewind 
234a0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
234b0 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f  * The next use o
234c0 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43  f the Rowid or C
234d0 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e  olumn or Next in
234e0 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31  struction for P1
234f0 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20   .** will refer 
23500 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6e 74  to the first ent
23510 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ry in the databa
23520 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
23530 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62  x..** If the tab
23540 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65  le or index is e
23550 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74  mpty and P2>0, t
23560 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
23570 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49  tely to P2..** I
23580 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66 20  f P2 is 0 or if 
23590 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
235a0 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c  ex is not empty,
235b0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
235c0 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
235d0 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  g instruction..*
235e0 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64  /.case OP_Rewind
235f0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
23600 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
23610 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
23620 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
23630 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28   res;..  assert(
23640 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
23650 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
23660 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
23670 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
23680 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
23690 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
236a0 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e  rter(pC)==(pOp->
236b0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65  opcode==OP_Sorte
236c0 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73 20  rSort) );.  res 
236d0 3d 20 31 3b 0a 20 20 69 66 28 20 69 73 53 6f 72  = 1;.  if( isSor
236e0 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 72  ter(pC) ){.    r
236f0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
23700 6f 72 74 65 72 52 65 77 69 6e 64 28 64 62 2c 20  orterRewind(db, 
23710 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c  pC, &res);.  }el
23720 73 65 7b 0a 20 20 20 20 70 43 72 73 72 20 3d 20  se{.    pCrsr = 
23730 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 20  pC->pCursor;.   
23740 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29   assert( pCrsr )
23750 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
23760 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72  e3BtreeFirst(pCr
23770 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70  sr, &res);.    p
23780 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
23790 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63  o = 0;.    pC->c
237a0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
237b0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70 43  HE_STALE;.    pC
237c0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
237d0 20 30 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75   0;.  }.  pC->nu
237e0 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b  llRow = (u8)res;
237f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
23800 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c  p2>0 && pOp->p2<
23810 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69 66 28 20  p->nOp );.  if( 
23820 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  res ){.    pc = 
23830 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
23840 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
23850 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20  Opcode: Next P1 
23860 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
23870 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72  * Advance cursor
23880 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
23890 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78  oints to the nex
238a0 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  t key/data pair 
238b0 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
238c0 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
238d0 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20  ere are no more 
238e0 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20  key/value pairs 
238f0 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
23900 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
23910 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
23920 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63  n.  But if the c
23930 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61  ursor advance wa
23940 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a  s successful,.**
23950 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
23960 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  y to P2..**.** T
23970 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
23980 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20  t be for a real 
23990 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
239a0 75 64 6f 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d  udo-table.  P1 m
239b0 75 73 74 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e  ust have.** been
239c0 20 6f 70 65 6e 65 64 20 70 72 69 6f 72 20 74 6f   opened prior to
239d0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 6f 72 20   this opcode or 
239e0 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c  the program will
239f0 20 73 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a   segfault..**.**
23a00 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   The P3 value is
23a10 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
23a20 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tree implementat
23a30 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74  ion. If P3==1, t
23a40 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20  hat.** means P1 
23a50 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20  is an SQL index 
23a60 61 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e  and that this in
23a70 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20  struction could 
23a80 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69  have been.** omi
23a90 74 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64  tted if that ind
23aa0 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71  ex had been uniq
23ab0 75 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c  ue.  P3 is usual
23ac0 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20  ly 0.  P3 is.** 
23ad0 61 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20  always either 0 
23ae0 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  or 1..**.** P4 i
23af0 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65  s always of type
23b00 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65   P4_ADVANCE. The
23b10 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
23b20 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73  r points to.** s
23b30 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28  qlite3BtreeNext(
23b40 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  )..**.** If P5 i
23b50 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74  s positive and t
23b60 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
23b70 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75  , then event cou
23b80 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  nter.** number P
23b90 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61  5-1 in the prepa
23ba0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73  red statement is
23bb0 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a   incremented..**
23bc0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72  .** See also: Pr
23bd0 65 76 2c 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a  ev, NextIfOpen.*
23be0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78  /./* Opcode: Nex
23bf0 74 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33  tIfOpen P1 P2 P3
23c00 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
23c10 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a  s opcode works j
23c20 75 73 74 20 6c 69 6b 65 20 4f 50 5f 4e 65 78 74  ust like OP_Next
23c30 20 65 78 63 65 70 74 20 74 68 61 74 20 69 66 20   except that if 
23c40 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74  cursor P1 is not
23c50 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61  .** open it beha
23c60 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a  ves a no-op..*/.
23c70 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20  /* Opcode: Prev 
23c80 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
23c90 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72  *.** Back up cur
23ca0 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  sor P1 so that i
23cb0 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
23cc0 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74  previous key/dat
23cd0 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a  a pair in its.**
23ce0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
23cf0 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f    If there is no
23d00 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61   previous key/va
23d10 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66  lue pairs then f
23d20 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
23d30 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
23d40 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
23d50 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  t if the cursor 
23d60 62 61 63 6b 75 70 20 77 61 73 20 73 75 63 63 65  backup was succe
23d70 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69  ssful,.** jump i
23d80 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
23d90 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
23da0 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
23db0 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
23dc0 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
23dd0 6c 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a  le.  If P1 is.**
23de0 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74   not open then t
23df0 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75  he behavior is u
23e00 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20  ndefined..**.** 
23e10 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  The P3 value is 
23e20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74  a hint to the bt
23e30 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ree implementati
23e40 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68  on. If P3==1, th
23e50 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69  at.** means P1 i
23e60 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61  s an SQL index a
23e70 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73  nd that this ins
23e80 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68  truction could h
23e90 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74  ave been.** omit
23ea0 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65  ted if that inde
23eb0 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75  x had been uniqu
23ec0 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c  e.  P3 is usuall
23ed0 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61  y 0.  P3 is.** a
23ee0 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f  lways either 0 o
23ef0 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  r 1..**.** P4 is
23f00 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20   always of type 
23f10 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20  P4_ADVANCE. The 
23f20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
23f30 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71   points to.** sq
23f40 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
23f50 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  us()..**.** If P
23f60 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e  5 is positive an
23f70 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  d the jump is ta
23f80 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20  ken, then event 
23f90 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  counter.** numbe
23fa0 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72  r P5-1 in the pr
23fb0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
23fc0 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
23fd0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .*/./* Opcode: P
23fe0 72 65 76 49 66 4f 70 65 6e 20 50 31 20 50 32 20  revIfOpen P1 P2 
23ff0 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
24000 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
24010 20 6a 75 73 74 20 6c 69 6b 65 20 4f 50 5f 50 72   just like OP_Pr
24020 65 76 20 65 78 63 65 70 74 20 74 68 61 74 20 69  ev except that i
24030 66 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e  f cursor P1 is n
24040 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65  ot.** open it be
24050 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  haves a no-op..*
24060 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
24070 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70  Next: {  /* jump
24080 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
24090 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
240a0 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ..  pC = p->apCs
240b0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
240c0 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
240d0 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  C) );.  rc = sql
240e0 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 4e 65  ite3VdbeSorterNe
240f0 78 74 28 64 62 2c 20 70 43 2c 20 26 72 65 73 29  xt(db, pC, &res)
24100 3b 0a 20 20 67 6f 74 6f 20 6e 65 78 74 5f 74 61  ;.  goto next_ta
24110 69 6c 3b 0a 63 61 73 65 20 4f 50 5f 50 72 65 76  il;.case OP_Prev
24120 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75  IfOpen:    /* ju
24130 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  mp */.case OP_Ne
24140 78 74 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20  xtIfOpen:    /* 
24150 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 2d  jump */.  if( p-
24160 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3d  >apCsr[pOp->p1]=
24170 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a  =0 ) break;.  /*
24180 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 2a 2f   Fall through */
24190 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20  .case OP_Prev:  
241a0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
241b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a  */.case OP_Next:
241c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
241d0 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
241e0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
241f0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
24200 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
24210 2d 3e 70 35 3c 41 72 72 61 79 53 69 7a 65 28 70  ->p5<ArraySize(p
24220 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20  ->aCounter) );. 
24230 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
24240 4f 70 2d 3e 70 31 5d 3b 0a 20 20 72 65 73 20 3d  Op->p1];.  res =
24250 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
24260 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
24270 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
24280 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
24290 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
242a0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
242b0 74 28 20 72 65 73 3d 3d 30 20 7c 7c 20 28 72 65  t( res==0 || (re
242c0 73 3d 3d 31 20 26 26 20 70 43 2d 3e 69 73 54 61  s==1 && pC->isTa
242d0 62 6c 65 3d 3d 30 29 20 29 3b 0a 20 20 74 65 73  ble==0) );.  tes
242e0 74 63 61 73 65 28 20 72 65 73 3d 3d 31 20 29 3b  tcase( res==1 );
242f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
24300 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20  opcode!=OP_Next 
24310 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
24320 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
24330 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72  eNext );.  asser
24340 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
24350 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e  OP_Prev || pOp->
24360 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
24370 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
24380 73 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  s );.  assert( p
24390 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
243a0 65 78 74 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70  extIfOpen || pOp
243b0 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73  ->p4.xAdvance==s
243c0 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 20  qlite3BtreeNext 
243d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
243e0 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65  ->opcode!=OP_Pre
243f0 76 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e  vIfOpen || pOp->
24400 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
24410 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
24420 73 29 3b 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e  s);.  rc = pOp->
24430 70 34 2e 78 41 64 76 61 6e 63 65 28 70 43 2d 3e  p4.xAdvance(pC->
24440 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
24450 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20 70 43 2d  next_tail:.  pC-
24460 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
24470 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66  ACHE_STALE;.  if
24480 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  ( res==0 ){.    
24490 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  pC->nullRow = 0;
244a0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
244b0 32 20 2d 20 31 3b 0a 20 20 20 20 70 2d 3e 61 43  2 - 1;.    p->aC
244c0 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b  ounter[pOp->p5]+
244d0 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  +;.#ifdef SQLITE
244e0 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65  _TEST.    sqlite
244f0 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b  3_search_count++
24500 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65  ;.#endif.  }else
24510 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  {.    pC->nullRo
24520 77 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 70 43 2d  w = 1;.  }.  pC-
24530 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
24540 30 3b 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f  0;.  goto check_
24550 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d  for_interrupt;.}
24560 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
24570 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
24580 2a 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  * P5.** Synopsis
24590 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a  : key=r[P2].**.*
245a0 2a 20 52 65 67 69 73 74 65 72 20 50 32 20 68 6f  * Register P2 ho
245b0 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78  lds an SQL index
245c0 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20   key made using 
245d0 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72  the.** MakeRecor
245e0 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20  d instructions. 
245f0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69   This opcode wri
24600 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20  tes that key.** 
24610 69 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20 50  into the index P
24620 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68 65  1.  Data for the
24630 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a   entry is nil..*
24640 2a 0a 2a 2a 20 50 33 20 69 73 20 61 20 66 6c 61  *.** P3 is a fla
24650 67 20 74 68 61 74 20 70 72 6f 76 69 64 65 73 20  g that provides 
24660 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 2d  a hint to the b-
24670 74 72 65 65 20 6c 61 79 65 72 20 74 68 61 74 20  tree layer that 
24680 74 68 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69  this.** insert i
24690 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61  s likely to be a
246a0 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20  n append..**.** 
246b0 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50  If P5 has the OP
246c0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74  FLAG_NCHANGE bit
246d0 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 63   set, then the c
246e0 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
246f0 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  .** incremented 
24700 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  by this instruct
24710 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 4f 50 46  ion.  If the OPF
24720 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74 20  LAG_NCHANGE bit 
24730 69 73 20 63 6c 65 61 72 2c 0a 2a 2a 20 74 68 65  is clear,.** the
24740 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75  n the change cou
24750 6e 74 65 72 20 69 73 20 75 6e 63 68 61 6e 67 65  nter is unchange
24760 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68  d..**.** If P5 h
24770 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53  as the OPFLAG_US
24780 45 53 45 45 4b 52 45 53 55 4c 54 20 62 69 74 20  ESEEKRESULT bit 
24790 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 63 75  set, then the cu
247a0 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 0a 2a  rsor must have.*
247b0 2a 20 6a 75 73 74 20 64 6f 6e 65 20 61 20 73 65  * just done a se
247c0 65 6b 20 74 6f 20 74 68 65 20 73 70 6f 74 20 77  ek to the spot w
247d0 68 65 72 65 20 74 68 65 20 6e 65 77 20 65 6e 74  here the new ent
247e0 72 79 20 69 73 20 74 6f 20 62 65 20 69 6e 73 65  ry is to be inse
247f0 72 74 65 64 2e 0a 2a 2a 20 54 68 69 73 20 66 6c  rted..** This fl
24800 61 67 20 61 76 6f 69 64 73 20 64 6f 69 6e 67 20  ag avoids doing 
24810 61 6e 20 65 78 74 72 61 20 73 65 65 6b 2e 0a 2a  an extra seek..*
24820 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
24830 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73  ction only works
24840 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54   for indices.  T
24850 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e  he equivalent in
24860 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72  struction.** for
24870 20 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e   tables is OP_In
24880 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  sert..*/.case OP
24890 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 3a 20 20  _SorterInsert:  
248a0 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63       /* in2 */.c
248b0 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72 74  ase OP_IdxInsert
248c0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e  : {        /* in
248d0 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  2 */.  VdbeCurso
248e0 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
248f0 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
24900 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74 20 63 68  nKey;.  const ch
24910 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73 73  ar *zKey;..  ass
24920 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
24930 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
24940 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
24950 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
24960 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
24970 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
24980 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70  isSorter(pC)==(p
24990 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
249a0 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29 3b 0a  orterInsert) );.
249b0 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
249c0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
249d0 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  t( pIn2->flags &
249e0 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 70   MEM_Blob );.  p
249f0 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
24a00 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  or;.  if( pOp->p
24a10 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  5 & OPFLAG_NCHAN
24a20 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b  GE ) p->nChange+
24a30 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  +;.  assert( pCr
24a40 73 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  sr!=0 );.  asser
24a50 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
24a60 30 20 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61  0 );.  rc = Expa
24a70 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20  ndBlob(pIn2);.  
24a80 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
24a90 4b 20 29 7b 0a 20 20 20 20 69 66 28 20 69 73 53  K ){.    if( isS
24aa0 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20  orter(pC) ){.   
24ab0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
24ac0 64 62 65 53 6f 72 74 65 72 57 72 69 74 65 28 64  dbeSorterWrite(d
24ad0 62 2c 20 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20  b, pC, pIn2);.  
24ae0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e    }else{.      n
24af0 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20  Key = pIn2->n;. 
24b00 20 20 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e 32       zKey = pIn2
24b10 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  ->z;.      rc = 
24b20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65  sqlite3BtreeInse
24b30 72 74 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c 20  rt(pCrsr, zKey, 
24b40 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c 20  nKey, "", 0, 0, 
24b50 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20 20  pOp->p3, .      
24b60 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20      ((pOp->p5 & 
24b70 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
24b80 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b  SULT) ? pC->seek
24b90 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20 20  Result : 0).    
24ba0 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 61        );.      a
24bb0 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
24bc0 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
24bd0 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53        pC->cacheS
24be0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
24bf0 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ALE;.    }.  }. 
24c00 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
24c10 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20  code: IdxDelete 
24c20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
24c30 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
24c40 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P2@P3].**.** The
24c50 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72   content of P3 r
24c60 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e  egisters startin
24c70 67 20 61 74 20 72 65 67 69 73 74 65 72 20 50 32  g at register P2
24c80 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61   form.** an unpa
24c90 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
24ca0 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f  This opcode remo
24cb0 76 65 73 20 74 68 61 74 20 65 6e 74 72 79 20 66  ves that entry f
24cc0 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65  rom the .** inde
24cd0 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73  x opened by curs
24ce0 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  or P1..*/.case O
24cf0 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20  P_IdxDelete: {. 
24d00 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
24d10 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
24d20 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  sr;.  int res;. 
24d30 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
24d40 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  r;..  assert( pO
24d50 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73 73  p->p3>0 );.  ass
24d60 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26  ert( pOp->p2>0 &
24d70 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70  & pOp->p2+pOp->p
24d80 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
24d90 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 61  Cursor)+1 );.  a
24da0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
24db0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
24dc0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
24dd0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
24de0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
24df0 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  C!=0 );.  pCrsr 
24e00 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
24e10 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d   assert( pCrsr!=
24e20 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
24e30 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 72  Op->p5==0 );.  r
24e40 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
24e50 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46  pKeyInfo;.  r.nF
24e60 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d  ield = (u16)pOp-
24e70 3e 70 33 3b 0a 20 20 72 2e 66 6c 61 67 73 20 3d  >p3;.  r.flags =
24e80 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58   UNPACKED_PREFIX
24e90 5f 4d 41 54 43 48 3b 0a 20 20 72 2e 61 4d 65 6d  _MATCH;.  r.aMem
24ea0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
24eb0 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ];.#ifdef SQLITE
24ec0 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e 74 20 69  _DEBUG.  { int i
24ed0 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e  ; for(i=0; i<r.n
24ee0 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65  Field; i++) asse
24ef0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
24f00 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a  r.aMem[i]) ); }.
24f10 23 65 6e 64 69 66 0a 20 20 72 63 20 3d 20 73 71  #endif.  rc = sq
24f20 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
24f30 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20  Unpacked(pCrsr, 
24f40 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b  &r, 0, 0, &res);
24f50 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
24f60 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29  E_OK && res==0 )
24f70 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
24f80 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43  e3BtreeDelete(pC
24f90 72 73 72 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65  rsr);.  }.  asse
24fa0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
24fb0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70  Moveto==0 );.  p
24fc0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
24fd0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
24fe0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
24ff0 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50 31  ode: IdxRowid P1
25000 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
25010 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
25020 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69  id.**.** Write i
25030 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
25040 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
25050 20 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e 74   is the last ent
25060 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ry in the record
25070 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f   at.** the end o
25080 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 20  f the index key 
25090 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63 75  pointed to by cu
250a0 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20 69  rsor P1.  This i
250b0 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62 65  nteger should be
250c0 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f 66  .** the rowid of
250d0 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79   the table entry
250e0 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69   to which this i
250f0 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e 74  ndex entry point
25100 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  s..**.** See als
25110 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65  o: Rowid, MakeRe
25120 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  cord..*/.case OP
25130 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20 20 20  _IdxRowid: {    
25140 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
25150 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
25160 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
25170 72 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  r;.  VdbeCursor 
25180 2a 70 43 3b 0a 20 20 69 36 34 20 72 6f 77 69 64  *pC;.  i64 rowid
25190 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
251a0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
251b0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
251c0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
251d0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
251e0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
251f0 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
25200 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
25210 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 70 4f 75  Crsr!=0 );.  pOu
25220 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
25230 75 6c 6c 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ull;.  rc = sqli
25240 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
25250 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 4e  eto(pC);.  if( N
25260 45 56 45 52 28 72 63 29 20 29 20 67 6f 74 6f 20  EVER(rc) ) goto 
25270 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
25280 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
25290 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
252a0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
252b0 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
252c0 29 3b 0a 20 20 69 66 28 20 21 70 43 2d 3e 6e 75  );.  if( !pC->nu
252d0 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72 6f 77  llRow ){.    row
252e0 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  id = 0;  /* Not 
252f0 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73  needed.  Only us
25300 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ed to silence a 
25310 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20  warning. */.    
25320 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
25330 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43 72  IdxRowid(db, pCr
25340 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20  sr, &rowid);.   
25350 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
25360 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
25370 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
25380 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  ror;.    }.    p
25390 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64  Out->u.i = rowid
253a0 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
253b0 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d  s = MEM_Int;.  }
253c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
253d0 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20 50 31  Opcode: IdxGE P1
253e0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
253f0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
25400 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P3@P4].**.** The
25410 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
25420 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
25430 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
25440 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
25450 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
25460 74 68 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70  the ROWID.  Comp
25470 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
25480 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69  ue against the i
25490 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31  ndex .** that P1
254a0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
254b0 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
254c0 69 6e 67 20 74 68 65 20 52 4f 57 49 44 20 6f 6e  ing the ROWID on
254d0 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a   the P1 index..*
254e0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
254f0 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72  ndex entry is gr
25500 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
25510 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
25520 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d  alue.** then jum
25530 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77  p to P2.  Otherw
25540 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
25550 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
25560 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
25570 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P5 is non-zer
25580 6f 20 74 68 65 6e 20 74 68 65 20 6b 65 79 20 76  o then the key v
25590 61 6c 75 65 20 69 73 20 69 6e 63 72 65 61 73 65  alue is increase
255a0 64 20 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20  d by an epsilon 
255b0 0a 2a 2a 20 70 72 69 6f 72 20 74 6f 20 74 68 65  .** prior to the
255c0 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68   comparison.  Th
255d0 69 73 20 6d 61 6b 65 20 74 68 65 20 6f 70 63 6f  is make the opco
255e0 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78  de work like Idx
255f0 47 54 20 65 78 63 65 70 74 0a 2a 2a 20 74 68 61  GT except.** tha
25600 74 20 69 66 20 74 68 65 20 6b 65 79 20 66 72 6f  t if the key fro
25610 6d 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  m register P3 is
25620 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65   a prefix of the
25630 20 6b 65 79 20 69 6e 20 74 68 65 20 63 75 72 73   key in the curs
25640 6f 72 2c 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c  or,.** the resul
25650 74 20 69 73 20 66 61 6c 73 65 20 77 68 65 72 65  t is false where
25660 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 74  as it would be t
25670 72 75 65 20 77 69 74 68 20 49 64 78 47 54 2e 0a  rue with IdxGT..
25680 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  */./* Opcode: Id
25690 78 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20  xLT P1 P2 P3 P4 
256a0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
256b0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
256c0 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
256d0 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
256e0 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
256f0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
25700 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
25710 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49 44 2e  omits the ROWID.
25720 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
25730 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
25740 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74   the index .** t
25750 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
25760 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
25770 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f   ignoring the RO
25780 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e  WID on the P1 in
25790 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  dex..**.** If th
257a0 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79  e P1 index entry
257b0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
257c0 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e  e key value then
257d0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20   jump to P2..** 
257e0 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74  Otherwise fall t
257f0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
25800 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
25810 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
25820 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68 65  on-zero then the
25830 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20 69 6e   key value is in
25840 63 72 65 61 73 65 64 20 62 79 20 61 6e 20 65 70  creased by an ep
25850 73 69 6c 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a 20  silon prior .** 
25860 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  to the compariso
25870 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 73 20 74  n.  This makes t
25880 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c  he opcode work l
25890 69 6b 65 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63 61  ike IdxLE..*/.ca
258a0 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20  se OP_IdxLT:    
258b0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
258c0 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45 3a 20  .case OP_IdxGE: 
258d0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
258e0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
258f0 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
25900 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
25910 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  d r;..  assert( 
25920 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
25930 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
25940 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
25950 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
25960 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
25970 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
25980 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73  sOrdered );.  as
25990 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
259a0 72 21 3d 30 29 3b 0a 20 20 61 73 73 65 72 74 28  r!=0);.  assert(
259b0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
259c0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  eto==0 );.  asse
259d0 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c  rt( pOp->p5==0 |
259e0 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a  | pOp->p5==1 );.
259f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25a00 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
25a10 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  );.  r.pKeyInfo 
25a20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
25a30 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
25a40 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69  6)pOp->p4.i;.  i
25a50 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
25a60 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41    r.flags = UNPA
25a70 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 7c 20 55  CKED_INCRKEY | U
25a80 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d  NPACKED_PREFIX_M
25a90 41 54 43 48 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ATCH;.  }else{. 
25aa0 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50     r.flags = UNP
25ab0 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54  ACKED_PREFIX_MAT
25ac0 43 48 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d  CH;.  }.  r.aMem
25ad0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
25ae0 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ];.#ifdef SQLITE
25af0 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e 74 20 69  _DEBUG.  { int i
25b00 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e  ; for(i=0; i<r.n
25b10 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65  Field; i++) asse
25b20 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
25b30 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a  r.aMem[i]) ); }.
25b40 23 65 6e 64 69 66 0a 20 20 72 65 73 20 3d 20 30  #endif.  res = 0
25b50 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
25b60 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20  .  Only used to 
25b70 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e  silence a warnin
25b80 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  g. */.  rc = sql
25b90 69 74 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f  ite3VdbeIdxKeyCo
25ba0 6d 70 61 72 65 28 70 43 2c 20 26 72 2c 20 26 72  mpare(pC, &r, &r
25bb0 65 73 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  es);.  if( pOp->
25bc0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54  opcode==OP_IdxLT
25bd0 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 2d 72   ){.    res = -r
25be0 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  es;.  }else{.   
25bf0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
25c00 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 29  code==OP_IdxGE )
25c10 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d  ;.    res++;.  }
25c20 0a 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a  .  if( res>0 ){.
25c30 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
25c40 20 2d 20 31 20 3b 0a 20 20 7d 0a 20 20 62 72 65   - 1 ;.  }.  bre
25c50 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
25c60 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50 32 20  : Destroy P1 P2 
25c70 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c  P3 * *.**.** Del
25c80 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20 64 61  ete an entire da
25c90 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
25ca0 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
25cb0 20 70 61 67 65 20 69 6e 20 74 68 65 20 64 61 74   page in the dat
25cc0 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73  abase.** file is
25cd0 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a   given by P1..**
25ce0 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65  .** The table be
25cf0 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20 69 73  ing destroyed is
25d00 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
25d10 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 33  abase file if P3
25d20 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d  ==0.  If.** P3==
25d30 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  1 then the table
25d40 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20   to be clear is 
25d50 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  in the auxiliary
25d60 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
25d70 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  * that is used t
25d80 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63  o store tables c
25d90 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41  reate using CREA
25da0 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42  TE TEMPORARY TAB
25db0 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54  LE..**.** If AUT
25dc0 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61 62 6c  OVACUUM is enabl
25dd0 65 64 20 74 68 65 6e 20 69 74 20 69 73 20 70 6f  ed then it is po
25de0 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74  ssible that anot
25df0 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  her root page.**
25e00 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65 64 20   might be moved 
25e10 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79 20 64  into the newly d
25e20 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61 67 65  eleted root page
25e30 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
25e40 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61  p all.** root pa
25e50 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73 20 61  ges contiguous a
25e60 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
25e70 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  of the database.
25e80 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20    The former.** 
25e90 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 6f  value of the roo
25ea0 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f 76 65  t page that move
25eb0 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20 62 65  d - its value be
25ec0 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20 6f 63  fore the move oc
25ed0 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73  curred -.** is s
25ee0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
25ef0 72 20 50 32 2e 20 20 49 66 20 6e 6f 20 70 61 67  r P2.  If no pag
25f00 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77  e .** movement w
25f10 61 73 20 72 65 71 75 69 72 65 64 20 28 62 65 63  as required (bec
25f20 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 62  ause the table b
25f30 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77 61 73  eing dropped was
25f40 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68 65   already .** the
25f50 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65   last one in the
25f60 20 64 61 74 61 62 61 73 65 29 20 74 68 65 6e 20   database) then 
25f70 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64  a zero is stored
25f80 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
25f90 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55  .** If AUTOVACUU
25fa0 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20 74 68  M is disabled th
25fb0 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f  en a zero is sto
25fc0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
25fd0 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
25fe0 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73  so: Clear.*/.cas
25ff0 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20  e OP_Destroy: { 
26000 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
26010 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  elease */.  int 
26020 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 43  iMoved;.  int iC
26030 6e 74 3b 0a 20 20 56 64 62 65 20 2a 70 56 64 62  nt;.  Vdbe *pVdb
26040 65 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20  e;.  int iDb;.. 
26050 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
26060 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 23 69 66 6e 64  Only==0 );.#ifnd
26070 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
26080 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 43  IRTUALTABLE.  iC
26090 6e 74 20 3d 20 30 3b 0a 20 20 66 6f 72 28 70 56  nt = 0;.  for(pV
260a0 64 62 65 3d 64 62 2d 3e 70 56 64 62 65 3b 20 70  dbe=db->pVdbe; p
260b0 56 64 62 65 3b 20 70 56 64 62 65 20 3d 20 70 56  Vdbe; pVdbe = pV
260c0 64 62 65 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20  dbe->pNext){.   
260d0 20 69 66 28 20 70 56 64 62 65 2d 3e 6d 61 67 69   if( pVdbe->magi
260e0 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55  c==VDBE_MAGIC_RU
260f0 4e 20 26 26 20 70 56 64 62 65 2d 3e 62 49 73 52  N && pVdbe->bIsR
26100 65 61 64 65 72 20 0a 20 20 20 20 20 26 26 20 70  eader .     && p
26110 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74 68  Vdbe->inVtabMeth
26120 6f 64 3c 32 20 26 26 20 70 56 64 62 65 2d 3e 70  od<2 && pVdbe->p
26130 63 3e 3d 30 20 0a 20 20 20 20 29 7b 0a 20 20 20  c>=0 .    ){.   
26140 20 20 20 69 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d     iCnt++;.    }
26150 0a 20 20 7d 0a 23 65 6c 73 65 0a 20 20 69 43 6e  .  }.#else.  iCn
26160 74 20 3d 20 64 62 2d 3e 6e 56 64 62 65 52 65 61  t = db->nVdbeRea
26170 64 3b 0a 23 65 6e 64 69 66 0a 20 20 70 4f 75 74  d;.#endif.  pOut
26180 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
26190 6c 6c 3b 0a 20 20 69 66 28 20 69 43 6e 74 3e 31  ll;.  if( iCnt>1
261a0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
261b0 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20  ITE_LOCKED;.    
261c0 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d  p->errorAction =
261d0 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c   OE_Abort;.  }el
261e0 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f  se{.    iDb = pO
261f0 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72  p->p3;.    asser
26200 74 28 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20  t( iCnt==1 );.  
26210 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
26220 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62  reeMask & (((yDb
26230 4d 61 73 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d  Mask)1)<<iDb))!=
26240 30 20 29 3b 0a 20 20 20 20 69 4d 6f 76 65 64 20  0 );.    iMoved 
26250 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
26260 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f 20 73 69  ded.  Only to si
26270 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e  lence a warning.
26280 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   */.    rc = sql
26290 69 74 65 33 42 74 72 65 65 44 72 6f 70 54 61 62  ite3BtreeDropTab
262a0 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  le(db->aDb[iDb].
262b0 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69  pBt, pOp->p1, &i
262c0 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74  Moved);.    pOut
262d0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
262e0 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  t;.    pOut->u.i
262f0 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64   = iMoved;.#ifnd
26300 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
26310 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66  UTOVACUUM.    if
26320 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
26330 26 26 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a  && iMoved!=0 ){.
26340 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f        sqlite3Roo
26350 74 50 61 67 65 4d 6f 76 65 64 28 64 62 2c 20 69  tPageMoved(db, i
26360 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d  Db, iMoved, pOp-
26370 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41  >p1);.      /* A
26380 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70  ll OP_Destroy op
26390 65 72 61 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f  erations occur o
263a0 6e 20 74 68 65 20 73 61 6d 65 20 62 74 72 65 65  n the same btree
263b0 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
263c0 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  ( resetSchemaOnF
263d0 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74  ault==0 || reset
263e0 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69  SchemaOnFault==i
263f0 44 62 2b 31 20 29 3b 0a 20 20 20 20 20 20 72 65  Db+1 );.      re
26400 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
26410 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a   = iDb+1;.    }.
26420 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65  #endif.  }.  bre
26430 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
26440 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20 50 33  : Clear P1 P2 P3
26450 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c  .**.** Delete al
26460 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68  l contents of th
26470 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
26480 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20   or index whose 
26490 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20  root page.** in 
264a0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
264b0 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31  e is given by P1
264c0 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44  .  But, unlike D
264d0 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a  estroy, do not.*
264e0 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62  * remove the tab
264f0 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d  le or index from
26500 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
26510 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61  le..**.** The ta
26520 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20  ble being clear 
26530 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  is in the main d
26540 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
26550 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32  P2==0.  If.** P2
26560 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62  ==1 then the tab
26570 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69  le to be clear i
26580 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61  s in the auxilia
26590 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
265a0 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64  .** that is used
265b0 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73   to store tables
265c0 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52   create using CR
265d0 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
265e0 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ABLE..**.** If t
265f0 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e  he P3 value is n
26600 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  on-zero, then th
26610 65 20 74 61 62 6c 65 20 72 65 66 65 72 72 65 64  e table referred
26620 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a   to must be an.*
26630 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28  * intkey table (
26640 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f  an SQL table, no
26650 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20  t an index). In 
26660 74 68 69 73 20 63 61 73 65 20 74 68 65 20 72 6f  this case the ro
26670 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75  w change .** cou
26680 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  nt is incremente
26690 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20  d by the number 
266a0 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74  of rows in the t
266b0 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
266c0 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73  ed. .** If P3 is
266d0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65   greater than ze
266e0 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  ro, then the val
266f0 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  ue stored in reg
26700 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61  ister P3 is.** a
26710 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  lso incremented 
26720 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  by the number of
26730 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62   rows in the tab
26740 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64  le being cleared
26750 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
26760 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73  : Destroy.*/.cas
26770 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20  e OP_Clear: {.  
26780 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20  int nChange;. . 
26790 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20   nChange = 0;.  
267a0 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
267b0 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  nly==0 );.  asse
267c0 72 74 28 20 70 4f 70 2d 3e 70 31 21 3d 31 20 29  rt( pOp->p1!=1 )
267d0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
267e0 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79  btreeMask & (((y
267f0 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e  DbMask)1)<<pOp->
26800 70 32 29 29 21 3d 30 20 29 3b 0a 20 20 72 63 20  p2))!=0 );.  rc 
26810 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c  = sqlite3BtreeCl
26820 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20  earTable(.      
26830 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d  db->aDb[pOp->p2]
26840 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28  .pBt, pOp->p1, (
26850 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e  pOp->p3 ? &nChan
26860 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69  ge : 0).  );.  i
26870 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
26880 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20    p->nChange += 
26890 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28  nChange;.    if(
268a0 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20   pOp->p3>0 ){.  
268b0 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
268c0 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
268d0 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p3]) );.      
268e0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
268f0 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
26900 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b  3]);.      aMem[
26910 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20  pOp->p3].u.i += 
26920 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20  nChange;.    }. 
26930 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
26940 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65  * Opcode: Create
26950 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20  Table P1 P2 * * 
26960 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
26970 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31  [P2]=root iDb=P1
26980 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  .**.** Allocate 
26990 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 74  a new table in t
269a0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
269b0 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f   file if P1==0 o
269c0 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69  r in the.** auxi
269d0 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
269e0 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20  ile if P1==1 or 
269f0 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  in an attached d
26a00 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31  atabase if.** P1
26a10 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72  >1.  Write the r
26a20 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
26a30 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  of the new table
26a40 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
26a50 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  r P2.**.** The d
26a60 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
26a70 6e 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61 6e  n a table and an
26a80 20 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a 20   index is this: 
26a90 20 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a   A table must.**
26aa0 20 68 61 76 65 20 61 20 34 2d 62 79 74 65 20 69   have a 4-byte i
26ab0 6e 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20 63  nteger key and c
26ac0 61 6e 20 68 61 76 65 20 61 72 62 69 74 72 61 72  an have arbitrar
26ad0 79 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64 65  y data.  An inde
26ae0 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62 69  x.** has an arbi
26af0 74 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e 6f  trary key but no
26b00 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   data..**.** See
26b10 20 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e 64   also: CreateInd
26b20 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ex.*/./* Opcode:
26b30 20 43 72 65 61 74 65 49 6e 64 65 78 20 50 31 20   CreateIndex P1 
26b40 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
26b50 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74  psis: r[P2]=root
26b60 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c   iDb=P1.**.** Al
26b70 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e 64  locate a new ind
26b80 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  ex in the main d
26b90 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
26ba0 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a  P1==0 or in the.
26bb0 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  ** auxiliary dat
26bc0 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
26bd0 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74  ==1 or in an att
26be0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69  ached database i
26bf0 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74  f.** P1>1.  Writ
26c00 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  e the root page 
26c10 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65  number of the ne
26c20 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20  w table into.** 
26c30 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
26c40 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61  ** See documenta
26c50 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74  tion on OP_Creat
26c60 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74  eTable for addit
26c70 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
26c80 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72  n..*/.case OP_Cr
26c90 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20 20  eateIndex:      
26ca0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
26cb0 65 72 65 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65  erelease */.case
26cc0 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 3a   OP_CreateTable:
26cd0 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f   {          /* o
26ce0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
26cf0 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20  /.  int pgno;.  
26d00 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20  int flags;.  Db 
26d10 2a 70 44 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d 20  *pDb;..  pgno = 
26d20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
26d30 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
26d40 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
26d50 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
26d60 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61  eMask & (((yDbMa
26d70 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29  sk)1)<<pOp->p1))
26d80 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
26d90 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
26da0 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  );.  pDb = &db->
26db0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  aDb[pOp->p1];.  
26dc0 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74  assert( pDb->pBt
26dd0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  !=0 );.  if( pOp
26de0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65  ->opcode==OP_Cre
26df0 61 74 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  ateTable ){.    
26e00 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45  /* flags = BTREE
26e10 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20  _INTKEY; */.    
26e20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e  flags = BTREE_IN
26e30 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  TKEY;.  }else{. 
26e40 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45     flags = BTREE
26e50 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20  _BLOBKEY;.  }.  
26e60 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
26e70 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 44 62  eCreateTable(pDb
26e80 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c  ->pBt, &pgno, fl
26e90 61 67 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  ags);.  pOut->u.
26ea0 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61  i = pgno;.  brea
26eb0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
26ec0 20 50 61 72 73 65 53 63 68 65 6d 61 20 50 31 20   ParseSchema P1 
26ed0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
26ee0 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c  ead and parse al
26ef0 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  l entries from t
26f00 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52  he SQLITE_MASTER
26f10 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61   table of databa
26f20 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61  se P1.** that ma
26f30 74 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c  tch the WHERE cl
26f40 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20  ause P4. .**.** 
26f50 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
26f60 6b 65 73 20 74 68 65 20 70 61 72 73 65 72 20 74  kes the parser t
26f70 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 76  o create a new v
26f80 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a  irtual machine,.
26f90 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65  ** then runs the
26fa0 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63   new virtual mac
26fb0 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75  hine.  It is thu
26fc0 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f  s a re-entrant o
26fd0 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pcode..*/.case O
26fe0 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b  P_ParseSchema: {
26ff0 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f  .  int iDb;.  co
27000 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65  nst char *zMaste
27010 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b  r;.  char *zSql;
27020 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74  .  InitData init
27030 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20  Data;..  /* Any 
27040 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
27050 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20  nt that invokes 
27060 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  this opcode will
27070 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20 20   hold mutexes.  
27080 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74 72 65  ** on every btre
27090 65 2e 20 20 54 68 69 73 20 69 73 20 61 20 70 72  e.  This is a pr
270a0 65 72 65 71 75 69 73 69 74 65 20 66 6f 72 20 69  erequisite for i
270b0 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71  nvoking .  ** sq
270c0 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
270d0 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66  k()..  */.#ifdef
270e0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
270f0 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62 3c 64  for(iDb=0; iDb<d
27100 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a  b->nDb; iDb++){.
27110 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3d      assert( iDb=
27120 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72  =1 || sqlite3Btr
27130 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d  eeHoldsMutex(db-
27140 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29  >aDb[iDb].pBt) )
27150 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
27160 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
27170 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
27180 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
27190 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 48 61  ;.  assert( DbHa
271a0 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44  sProperty(db, iD
271b0 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  b, DB_SchemaLoad
271c0 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64  ed) );.  /* Used
271d0 20 74 6f 20 62 65 20 61 20 63 6f 6e 64 69 74 69   to be a conditi
271e0 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d  onal */ {.    zM
271f0 61 73 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54  aster = SCHEMA_T
27200 41 42 4c 45 28 69 44 62 29 3b 0a 20 20 20 20 69  ABLE(iDb);.    i
27210 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b  nitData.db = db;
27220 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44  .    initData.iD
27230 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20  b = pOp->p1;.   
27240 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d   initData.pzErrM
27250 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67  sg = &p->zErrMsg
27260 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c  ;.    zSql = sql
27270 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a  ite3MPrintf(db,.
27280 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e         "SELECT n
27290 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73  ame, rootpage, s
272a0 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20  ql FROM '%q'.%s 
272b0 57 48 45 52 45 20 25 73 20 4f 52 44 45 52 20 42  WHERE %s ORDER B
272c0 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20  Y rowid",.      
272d0 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e   db->aDb[iDb].zN
272e0 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f  ame, zMaster, pO
272f0 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66  p->p4.z);.    if
27300 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20  ( zSql==0 ){.   
27310 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e     rc = SQLITE_N
27320 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  OMEM;.    }else{
27330 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
27340 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20  b->init.busy==0 
27350 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69  );.      db->ini
27360 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20  t.busy = 1;.    
27370 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20    initData.rc = 
27380 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20  SQLITE_OK;.     
27390 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61   assert( !db->ma
273a0 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
273b0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
273c0 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20  _exec(db, zSql, 
273d0 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
273e0 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20  ack, &initData, 
273f0 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  0);.      if( rc
27400 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63  ==SQLITE_OK ) rc
27410 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a   = initData.rc;.
27420 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
27430 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20  ree(db, zSql);. 
27440 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75       db->init.bu
27450 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  sy = 0;.    }.  
27460 7d 0a 20 20 69 66 28 20 72 63 20 29 20 73 71 6c  }.  if( rc ) sql
27470 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
27480 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
27490 64 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  db);.  if( rc==S
274a0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  QLITE_NOMEM ){. 
274b0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
274c0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d    }.  break;  .}
274d0 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
274e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59  QLITE_OMIT_ANALY
274f0 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  ZE)./* Opcode: L
27500 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a  oadAnalysis P1 *
27510 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61   * * *.**.** Rea
27520 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  d the sqlite_sta
27530 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74  t1 table for dat
27540 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61  abase P1 and loa
27550 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a  d the content.**
27560 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20 69   of that table i
27570 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  nto the internal
27580 20 69 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c   index hash tabl
27590 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61  e.  This will ca
275a0 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79  use.** the analy
275b0 73 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 77  sis to be used w
275c0 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c  hen preparing al
275d0 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71 75 65  l subsequent que
275e0 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ries..*/.case OP
275f0 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b  _LoadAnalysis: {
27600 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
27610 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
27620 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63  <db->nDb );.  rc
27630 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73   = sqlite3Analys
27640 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e  isLoad(db, pOp->
27650 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a  p1);.  break;  .
27660 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  }.#endif /* !def
27670 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
27680 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a  _ANALYZE) */../*
27690 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62   Opcode: DropTab
276a0 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  le P1 * * P4 *.*
276b0 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
276c0 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
276d0 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
276e0 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
276f0 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  be.** the table 
27700 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
27710 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
27720 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
27730 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f   table.** is dro
27740 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  pped in order to
27750 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e   keep the intern
27760 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
27770 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
27780 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
27790 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
277a0 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
277b0 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71  ropTable: {.  sq
277c0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
277d0 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f  leteTable(db, pO
277e0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
277f0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
27800 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e  * Opcode: DropIn
27810 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  dex P1 * * P4 *.
27820 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
27830 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
27840 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
27850 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
27860 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78  ibe.** the index
27870 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
27880 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
27890 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
278a0 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64  an index.** is d
278b0 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20  ropped in order 
278c0 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65  to keep the inte
278d0 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
278e0 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
278f0 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
27900 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
27910 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
27920 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20  _DropIndex: {.  
27930 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
27940 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20  DeleteIndex(db, 
27950 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
27960 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .z);.  break;.}.
27970 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
27980 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50  Trigger P1 * * P
27990 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65  4 *.**.** Remove
279a0 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69   the internal (i
279b0 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73  n-memory) data s
279c0 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64  tructures that d
279d0 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74  escribe.** the t
279e0 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20  rigger named P4 
279f0 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
27a00 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20   This is called 
27a10 61 66 74 65 72 20 61 20 74 72 69 67 67 65 72 0a  after a trigger.
27a20 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e  ** is dropped in
27a30 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74   order to keep t
27a40 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
27a50 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
27a60 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
27a70 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
27a80 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
27a90 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67  case OP_DropTrig
27aa0 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ger: {.  sqlite3
27ab0 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
27ac0 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e  rigger(db, pOp->
27ad0 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
27ae0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66    break;.}...#if
27af0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
27b00 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
27b10 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65  ./* Opcode: Inte
27b20 67 72 69 74 79 43 6b 20 50 31 20 50 32 20 50 33  grityCk P1 P2 P3
27b30 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61   * P5.**.** Do a
27b40 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68  n analysis of th
27b50 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  e currently open
27b60 20 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72   database.  Stor
27b70 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72  e in.** register
27b80 20 50 31 20 74 68 65 20 74 65 78 74 20 6f 66 20   P1 the text of 
27b90 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
27ba0 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20   describing any 
27bb0 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20  problems..** If 
27bc0 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20  no problems are 
27bd0 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e  found, store a N
27be0 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20  ULL in register 
27bf0 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65  P1..**.** The re
27c00 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69  gister P3 contai
27c10 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e  ns the maximum n
27c20 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64  umber of allowed
27c30 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d   errors..** At m
27c40 6f 73 74 20 72 65 67 28 50 33 29 20 65 72 72 6f  ost reg(P3) erro
27c50 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72  rs will be repor
27c60 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ted..** In other
27c70 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c   words, the anal
27c80 79 73 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f  ysis stops as so
27c90 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20 65 72  on as reg(P1) er
27ca0 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65  rors are .** see
27cb0 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73 20 75  n.  Reg(P1) is u
27cc0 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20  pdated with the 
27cd0 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  number of errors
27ce0 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a   remaining..**.*
27cf0 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20  * The root page 
27d00 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74  numbers of all t
27d10 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74  ables in the dat
27d20 61 62 61 73 65 20 61 72 65 20 69 6e 74 65 67 65  abase are intege
27d30 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 72  r.** stored in r
27d40 65 67 28 50 31 29 2c 20 72 65 67 28 50 31 2b 31  eg(P1), reg(P1+1
27d50 29 2c 20 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e  ), reg(P1+2), ..
27d60 2e 2e 20 20 54 68 65 72 65 20 61 72 65 20 50 32  ..  There are P2
27d70 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c   tables.** total
27d80 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
27d90 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63   not zero, the c
27da0 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20  heck is done on 
27db0 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61  the auxiliary da
27dc0 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20  tabase.** file, 
27dd0 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74  not the main dat
27de0 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
27df0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
27e00 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   used to impleme
27e10 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  nt the integrity
27e20 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a  _check pragma..*
27e30 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72  /.case OP_Integr
27e40 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e  ityCk: {.  int n
27e50 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75  Root;      /* Nu
27e60 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74  mber of tables t
27e70 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65  o check.  (Numbe
27e80 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e  r of root pages.
27e90 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f  ) */.  int *aRoo
27ea0 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20  t;     /* Array 
27eb0 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62  of rootpage numb
27ec0 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74  ers for tables t
27ed0 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a  o be checked */.
27ee0 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20    int j;        
27ef0 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
27f00 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  r */.  int nErr;
27f10 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
27f20 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72   of errors repor
27f30 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ted */.  char *z
27f40 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74  ;        /* Text
27f50 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72 65   of the error re
27f60 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  port */.  Mem *p
27f70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67  nErr;     /* Reg
27f80 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72  ister keeping tr
27f90 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ack of errors re
27fa0 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61 73  maining */..  as
27fb0 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
27fc0 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20  er );.  nRoot = 
27fd0 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
27fe0 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20  t( nRoot>0 );.  
27ff0 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74 65 33 44  aRoot = sqlite3D
28000 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73  bMallocRaw(db, s
28010 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e 52 6f 6f  izeof(int)*(nRoo
28020 74 2b 31 29 20 29 3b 0a 20 20 69 66 28 20 61 52  t+1) );.  if( aR
28030 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  oot==0 ) goto no
28040 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20  _mem;.  assert( 
28050 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
28060 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
28070 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
28080 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f  pnErr = &aMem[pO
28090 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
280a0 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20  ( (pnErr->flags 
280b0 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
280c0 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72  .  assert( (pnEr
280d0 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  r->flags & (MEM_
280e0 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
280f0 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  0 );.  pIn1 = &a
28100 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
28110 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74  for(j=0; j<nRoot
28120 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f  ; j++){.    aRoo
28130 74 5b 6a 5d 20 3d 20 28 69 6e 74 29 73 71 6c 69  t[j] = (int)sqli
28140 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
28150 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20  &pIn1[j]);.  }. 
28160 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20   aRoot[j] = 0;. 
28170 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
28180 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
28190 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
281a0 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b  ask & (((yDbMask
281b0 29 31 29 3c 3c 70 4f 70 2d 3e 70 35 29 29 21 3d  )1)<<pOp->p5))!=
281c0 30 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74  0 );.  z = sqlit
281d0 65 33 42 74 72 65 65 49 6e 74 65 67 72 69 74 79  e3BtreeIntegrity
281e0 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f  Check(db->aDb[pO
281f0 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f  p->p5].pBt, aRoo
28200 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20  t, nRoot,.      
28210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28220 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
28230 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72  pnErr->u.i, &nEr
28240 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  r);.  sqlite3DbF
28250 72 65 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a  ree(db, aRoot);.
28260 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20    pnErr->u.i -= 
28270 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56  nErr;.  sqlite3V
28280 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49  dbeMemSetNull(pI
28290 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d  n1);.  if( nErr=
282a0 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
282b0 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73  ( z==0 );.  }els
282c0 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20  e if( z==0 ){.  
282d0 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
282e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
282f0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
28300 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51  (pIn1, z, -1, SQ
28310 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74  LITE_UTF8, sqlit
28320 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20  e3_free);.  }.  
28330 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
28340 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c  IZE(pIn1);.  sql
28350 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
28360 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63  coding(pIn1, enc
28370 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b  oding);.  break;
28380 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
28390 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
283a0 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20  TY_CHECK */../* 
283b0 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64  Opcode: RowSetAd
283c0 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
283d0 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 6f 77 73   Synopsis:  rows
283e0 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a  et(P1)=r[P2].**.
283f0 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e  ** Insert the in
28400 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64  teger value held
28410 20 62 79 20 72 65 67 69 73 74 65 72 20 50 32 20   by register P2 
28420 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69  into a boolean i
28430 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20  ndex.** held in 
28440 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a  register P1..**.
28450 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  ** An assertion 
28460 66 61 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e  fails if P2 is n
28470 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ot an integer..*
28480 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
28490 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  Add: {       /* 
284a0 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49  in1, in2 */.  pI
284b0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
284c0 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  p1];.  pIn2 = &a
284d0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
284e0 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66  assert( (pIn2->f
284f0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
28500 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  =0 );.  if( (pIn
28510 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
28520 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20  owSet)==0 ){.   
28530 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
28540 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a  etRowSet(pIn1);.
28550 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
28560 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
28570 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  t)==0 ) goto no_
28580 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  mem;.  }.  sqlit
28590 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70  e3RowSetInsert(p
285a0 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
285b0 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72  pIn2->u.i);.  br
285c0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
285d0 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50 31  e: RowSetRead P1
285e0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
285f0 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
28600 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20  owset(P1).**.** 
28610 45 78 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c  Extract the smal
28620 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20  lest value from 
28630 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31  boolean index P1
28640 20 61 6e 64 20 70 75 74 20 74 68 61 74 20 76 61   and put that va
28650 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  lue into.** regi
28660 73 74 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66  ster P3.  Or, if
28670 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50   boolean index P
28680 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65  1 is initially e
28690 6d 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a  mpty, leave P3.*
286a0 2a 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20  * unchanged and 
286b0 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
286c0 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ion P2..*/.case 
286d0 4f 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b  OP_RowSetRead: {
286e0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
286f0 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in1, out3 */.  i
28700 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20  64 val;..  pIn1 
28710 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
28720 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
28730 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
28740 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c  t)==0 .   || sql
28750 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 70  ite3RowSetNext(p
28760 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
28770 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20  &val)==0.  ){.  
28780 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e    /* The boolean
28790 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20   index is empty 
287a0 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
287b0 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e  beMemSetNull(pIn
287c0 31 29 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70  1);.    pc = pOp
287d0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
287e0 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c 75  e{.    /* A valu
287f0 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66 72 6f  e was pulled fro
28800 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  m the index */. 
28810 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
28820 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b  mSetInt64(&aMem[
28830 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a  pOp->p3], val);.
28840 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b    }.  goto check
28850 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
28860 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
28870 77 53 65 74 54 65 73 74 20 50 31 20 50 32 20 50  wSetTest P1 P2 P
28880 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  3 P4.** Synopsis
28890 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e 20 72 6f  : if r[P3] in ro
288a0 77 73 65 74 28 50 31 29 20 67 6f 74 6f 20 50 32  wset(P1) goto P2
288b0 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
288c0 50 33 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f  P3 is assumed to
288d0 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20 69   hold a 64-bit i
288e0 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66  nteger value. If
288f0 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20   register P1.** 
28900 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53 65  contains a RowSe
28910 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 61  t object and tha
28920 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  t RowSet object 
28930 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20  contains.** the 
28940 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50 33  value held in P3
28950 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73 74  , jump to regist
28960 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  er P2. Otherwise
28970 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20  , insert the.** 
28980 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69 6e  integer in P3 in
28990 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61 6e  to the RowSet an
289a0 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f  d continue on to
289b0 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63   the.** next opc
289c0 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52  ode..**.** The R
289d0 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73 20  owSet object is 
289e0 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74 68  optimized for th
289f0 65 20 63 61 73 65 20 77 68 65 72 65 20 73 75 63  e case where suc
28a00 63 65 73 73 69 76 65 20 73 65 74 73 0a 2a 2a 20  cessive sets.** 
28a10 6f 66 20 69 6e 74 65 67 65 72 73 2c 20 77 68 65  of integers, whe
28a20 72 65 20 65 61 63 68 20 73 65 74 20 63 6f 6e 74  re each set cont
28a30 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61 74  ains no duplicat
28a40 65 73 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a 20  es. Each set.** 
28a50 6f 66 20 76 61 6c 75 65 73 20 69 73 20 69 64 65  of values is ide
28a60 6e 74 69 66 69 65 64 20 62 79 20 61 20 75 6e 69  ntified by a uni
28a70 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68  que P4 value. Th
28a80 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d  e first set.** m
28a90 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20  ust have P4==0, 
28aa0 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20 50 34  the final set P4
28ab0 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74 20 62 65  =-1.  P4 must be
28ac0 20 65 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a 2a   either -1 or.**
28ad0 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20   non-negative.  
28ae0 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65  For non-negative
28af0 20 76 61 6c 75 65 73 20 6f 66 20 50 34 20 6f 6e   values of P4 on
28b00 6c 79 20 74 68 65 20 6c 6f 77 65 72 20 34 0a 2a  ly the lower 4.*
28b10 2a 20 62 69 74 73 20 61 72 65 20 73 69 67 6e 69  * bits are signi
28b20 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  ficant..**.** Th
28b30 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69  is allows optimi
28b40 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65  zations: (a) whe
28b50 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73  n P4==0 there is
28b60 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74   no need to test
28b70 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65 74 20 6f  .** the rowset o
28b80 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73  bject for P3, as
28b90 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65   it is guarantee
28ba0 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e  d not to contain
28bb0 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e   it,.** (b) when
28bc0 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73   P4==-1 there is
28bd0 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65   no need to inse
28be0 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73  rt the value, as
28bf0 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65   it will.** neve
28c00 72 20 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c  r be tested for,
28c10 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20   and (c) when a 
28c20 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 70 61  value that is pa
28c30 72 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a  rt of set X is.*
28c40 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72  * inserted, ther
28c50 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
28c60 73 65 61 72 63 68 20 74 6f 20 73 65 65 20 69 66  search to see if
28c70 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
28c80 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c  was.** previousl
28c90 79 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61  y inserted as pa
28ca0 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c  rt of set X (onl
28cb0 79 20 69 66 20 69 74 20 77 61 73 20 70 72 65 76  y if it was prev
28cc0 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74  iously.** insert
28cd0 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f  ed as part of so
28ce0 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a  me other set)..*
28cf0 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
28d00 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20  Test: {         
28d10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
28d20 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
28d30 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69  .  int iSet;.  i
28d40 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49  nt exists;..  pI
28d50 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
28d60 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  p1];.  pIn3 = &a
28d70 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
28d80 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  iSet = pOp->p4.i
28d90 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33  ;.  assert( pIn3
28da0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
28db0 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72  );..  /* If ther
28dc0 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74  e is anything ot
28dd0 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65  her than a rowse
28de0 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f  t object in memo
28df0 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a  ry cell P1,.  **
28e00 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61   delete it now a
28e10 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31  nd initialize P1
28e20 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72   with an empty r
28e30 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28  owset.  */.  if(
28e40 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
28e50 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
28e60 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
28e70 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49  eMemSetRowSet(pI
28e80 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49  n1);.    if( (pI
28e90 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
28ea0 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74  RowSet)==0 ) got
28eb0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20  o no_mem;.  }.. 
28ec0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
28ed0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
28ee0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53 65 74  ;.  assert( iSet
28ef0 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20  ==-1 || iSet>=0 
28f00 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b  );.  if( iSet ){
28f10 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20 73 71  .    exists = sq
28f20 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28  lite3RowSetTest(
28f30 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
28f40 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
28f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f60 20 28 75 38 29 28 69 53 65 74 3e 3d 30 20 3f 20   (u8)(iSet>=0 ? 
28f70 69 53 65 74 20 26 20 30 78 66 20 3a 20 30 78 66  iSet & 0xf : 0xf
28f80 66 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  f),.            
28f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28fa0 20 20 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20     pIn3->u.i);. 
28fb0 20 20 20 69 66 28 20 65 78 69 73 74 73 20 29 7b     if( exists ){
28fc0 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
28fd0 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 62  >p2 - 1;.      b
28fe0 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  reak;.    }.  }.
28ff0 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b    if( iSet>=0 ){
29000 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53  .    sqlite3RowS
29010 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75  etInsert(pIn1->u
29020 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e  .pRowSet, pIn3->
29030 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  u.i);.  }.  brea
29040 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53  k;.}...#ifndef S
29050 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
29060 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  ER../* Opcode: P
29070 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33 20  rogram P1 P2 P3 
29080 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63  P4 P5.**.** Exec
29090 75 74 65 20 74 68 65 20 74 72 69 67 67 65 72 20  ute the trigger 
290a0 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61  program passed a
290b0 73 20 50 34 20 28 74 79 70 65 20 50 34 5f 53 55  s P4 (type P4_SU
290c0 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a  BPROGRAM). .**.*
290d0 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68  * P1 contains th
290e0 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65  e address of the
290f0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
29100 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66  t contains the f
29110 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20  irst memory .** 
29120 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79  cell in an array
29130 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 20   of values used 
29140 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  as arguments to 
29150 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e  the sub-program.
29160 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73   P2 .** contains
29170 20 74 68 65 20 61 64 64 72 65 73 73 20 74 6f 20   the address to 
29180 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73  jump to if the s
29190 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77  ub-program throw
291a0 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20  s an IGNORE .** 
291b0 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20  exception using 
291c0 74 68 65 20 52 41 49 53 45 28 29 20 66 75 6e 63  the RAISE() func
291d0 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50  tion. Register P
291e0 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  3 contains the a
291f0 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20  ddress .** of a 
29200 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74  memory cell in t
29210 68 69 73 20 28 74 68 65 20 70 61 72 65 6e 74 29  his (the parent)
29220 20 56 4d 20 74 68 61 74 20 69 73 20 75 73 65 64   VM that is used
29230 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65   to allocate the
29240 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75   .** memory requ
29250 69 72 65 64 20 62 79 20 74 68 65 20 73 75 62 2d  ired by the sub-
29260 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e  vdbe at runtime.
29270 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
29280 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d  ointer to the VM
29290 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
292a0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
292b0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
292c0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72  non-zero, then r
292d0 65 63 75 72 73 69 76 65 20 70 72 6f 67 72 61 6d  ecursive program
292e0 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69 73 20 65   invocation is e
292f0 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  nabled..*/.case 
29300 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20  OP_Program: {   
29310 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
29320 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20    int nMem;     
29330 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
29340 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65  ber of memory re
29350 67 69 73 74 65 72 73 20 66 6f 72 20 73 75 62 2d  gisters for sub-
29360 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74  program */.  int
29370 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20   nByte;         
29380 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66       /* Bytes of
29390 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 72   runtime space r
293a0 65 71 75 69 72 65 64 20 66 6f 72 20 73 75 62 2d  equired for sub-
293b0 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d  program */.  Mem
293c0 20 2a 70 52 74 3b 20 20 20 20 20 20 20 20 20 20   *pRt;          
293d0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
293e0 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e   to allocate run
293f0 74 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20 20  time space */.  
29400 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
29410 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20          /* Used 
29420 74 6f 20 69 74 65 72 61 74 65 20 74 68 72 6f 75  to iterate throu
29430 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  gh memory cells 
29440 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20  */.  Mem *pEnd; 
29450 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
29460 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  Last memory cell
29470 20 69 6e 20 6e 65 77 20 61 72 72 61 79 20 2a 2f   in new array */
29480 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
29490 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65  rame;      /* Ne
294a0 77 20 76 64 62 65 20 66 72 61 6d 65 20 74 6f 20  w vdbe frame to 
294b0 65 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20  execute in */.  
294c0 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f  SubProgram *pPro
294d0 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70  gram;   /* Sub-p
294e0 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74  rogram to execut
294f0 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20  e */.  void *t; 
29500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
29510 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79  * Token identify
29520 69 6e 67 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a  ing trigger */..
29530 20 20 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70    pProgram = pOp
29540 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20  ->p4.pProgram;. 
29550 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70   pRt = &aMem[pOp
29560 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
29570 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30   pProgram->nOp>0
29580 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74   );.  .  /* If t
29590 68 65 20 70 35 20 66 6c 61 67 20 69 73 20 63 6c  he p5 flag is cl
295a0 65 61 72 2c 20 74 68 65 6e 20 72 65 63 75 72 73  ear, then recurs
295b0 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  ive invocation o
295c0 66 20 74 72 69 67 67 65 72 73 20 69 73 20 0a 20  f triggers is . 
295d0 20 2a 2a 20 64 69 73 61 62 6c 65 64 20 66 6f 72   ** disabled for
295e0 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61   backwards compa
295f0 74 69 62 69 6c 69 74 79 20 28 70 35 20 69 73 20  tibility (p5 is 
29600 73 65 74 20 69 66 20 74 68 69 73 20 73 75 62 2d  set if this sub-
29610 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20  program.  ** is 
29620 72 65 61 6c 6c 79 20 61 20 74 72 69 67 67 65 72  really a trigger
29630 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e 20  , not a foreign 
29640 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20  key action, and 
29650 74 68 65 20 66 6c 61 67 20 73 65 74 0a 20 20 2a  the flag set.  *
29660 2a 20 61 6e 64 20 63 6c 65 61 72 65 64 20 62 79  * and cleared by
29670 20 74 68 65 20 22 50 52 41 47 4d 41 20 72 65 63   the "PRAGMA rec
29680 75 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 22  ursive_triggers"
29690 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61   command is clea
296a0 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49  r)..  ** .  ** I
296b0 74 20 69 73 20 72 65 63 75 72 73 69 76 65 20 69  t is recursive i
296c0 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69  nvocation of tri
296d0 67 67 65 72 73 2c 20 61 74 20 74 68 65 20 53 51  ggers, at the SQ
296e0 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74 20 69 73  L level, that is
296f0 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e   .  ** disabled.
29700 20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73 20 61   In some cases a
29710 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20   single trigger 
29720 6d 61 79 20 67 65 6e 65 72 61 74 65 20 6d 6f 72  may generate mor
29730 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a  e than one .  **
29740 20 53 75 62 50 72 6f 67 72 61 6d 20 28 69 66 20   SubProgram (if 
29750 74 68 65 20 74 72 69 67 67 65 72 20 6d 61 79 20  the trigger may 
29760 62 65 20 65 78 65 63 75 74 65 64 20 77 69 74 68  be executed with
29770 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 64   more than one d
29780 69 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f  ifferent .  ** O
29790 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72  N CONFLICT algor
297a0 69 74 68 6d 29 2e 20 53 75 62 50 72 6f 67 72 61  ithm). SubProgra
297b0 6d 20 73 74 72 75 63 74 75 72 65 73 20 61 73 73  m structures ass
297c0 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 0a 20  ociated with a. 
297d0 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69 67 67   ** single trigg
297e0 65 72 20 61 6c 6c 20 68 61 76 65 20 74 68 65 20  er all have the 
297f0 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74  same value for t
29800 68 65 20 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f  he SubProgram.to
29810 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61 62  ken .  ** variab
29820 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f  le.  */.  if( pO
29830 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74 20 3d  p->p5 ){.    t =
29840 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e   pProgram->token
29850 3b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65  ;.    for(pFrame
29860 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61  =p->pFrame; pFra
29870 6d 65 20 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f  me && pFrame->to
29880 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70  ken!=t; pFrame=p
29890 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
298a0 0a 20 20 20 20 69 66 28 20 70 46 72 61 6d 65 20  .    if( pFrame 
298b0 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20  ) break;.  }..  
298c0 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64  if( p->nFrame>=d
298d0 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
298e0 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44  _LIMIT_TRIGGER_D
298f0 45 50 54 48 5d 20 29 7b 0a 20 20 20 20 72 63 20  EPTH] ){.    rc 
29900 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
29910 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
29920 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
29930 2c 20 64 62 2c 20 22 74 6f 6f 20 6d 61 6e 79 20  , db, "too many 
29940 6c 65 76 65 6c 73 20 6f 66 20 74 72 69 67 67 65  levels of trigge
29950 72 20 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20  r recursion");. 
29960 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
29970 20 2f 2a 20 52 65 67 69 73 74 65 72 20 70 52 74   /* Register pRt
29980 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
29990 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71  e the memory req
299a0 75 69 72 65 64 20 74 6f 20 73 61 76 65 20 74 68  uired to save th
299b0 65 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20  e state.  ** of 
299c0 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 67  the current prog
299d0 72 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d  ram, and the mem
299e0 6f 72 79 20 72 65 71 75 69 72 65 64 20 61 74 20  ory required at 
299f0 72 75 6e 74 69 6d 65 20 74 6f 20 65 78 65 63 75  runtime to execu
29a00 74 65 0a 20 20 2a 2a 20 74 68 65 20 74 72 69 67  te.  ** the trig
29a10 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 49 66 20  ger program. If 
29a20 74 68 69 73 20 74 72 69 67 67 65 72 20 68 61 73  this trigger has
29a30 20 62 65 65 6e 20 66 69 72 65 64 20 62 65 66 6f   been fired befo
29a40 72 65 2c 20 74 68 65 6e 20 70 52 74 20 0a 20 20  re, then pRt .  
29a50 2a 2a 20 69 73 20 61 6c 72 65 61 64 79 20 61 6c  ** is already al
29a60 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65 72 77 69  located. Otherwi
29a70 73 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20 69  se, it must be i
29a80 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a  nitialized.  */.
29a90 20 20 69 66 28 20 28 70 52 74 2d 3e 66 6c 61 67    if( (pRt->flag
29aa0 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20  s&MEM_Frame)==0 
29ab0 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50 72 6f  ){.    /* SubPro
29ac0 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74  gram.nMem is set
29ad0 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
29ae0 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75  f memory cells u
29af0 73 65 64 20 62 79 20 74 68 65 20 0a 20 20 20 20  sed by the .    
29b00 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f 72 65  ** program store
29b10 64 20 69 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e  d in SubProgram.
29b20 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61 73 20  aOp. As well as 
29b30 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72  these, one memor
29b40 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73  y.    ** cell is
29b50 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 61   required for ea
29b60 63 68 20 63 75 72 73 6f 72 20 75 73 65 64 20 62  ch cursor used b
29b70 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 53  y the program. S
29b80 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20  et local.    ** 
29b90 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61  variable nMem (a
29ba0 6e 64 20 6c 61 74 65 72 2c 20 56 64 62 65 46 72  nd later, VdbeFr
29bb0 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74  ame.nChildMem) t
29bc0 6f 20 74 68 69 73 20 76 61 6c 75 65 2e 0a 20 20  o this value..  
29bd0 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20    */.    nMem = 
29be0 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b  pProgram->nMem +
29bf0 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b   pProgram->nCsr;
29c00 0a 20 20 20 20 6e 42 79 74 65 20 3d 20 52 4f 55  .    nByte = ROU
29c10 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 46  ND8(sizeof(VdbeF
29c20 72 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20 20  rame)).         
29c30 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69       + nMem * si
29c40 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20 20  zeof(Mem).      
29c50 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72          + pProgr
29c60 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f  am->nCsr * sizeo
29c70 66 28 56 64 62 65 43 75 72 73 6f 72 20 2a 29 0a  f(VdbeCursor *).
29c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
29c90 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 20  pProgram->nOnce 
29ca0 2a 20 73 69 7a 65 6f 66 28 75 38 29 3b 0a 20 20  * sizeof(u8);.  
29cb0 20 20 70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74    pFrame = sqlit
29cc0 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64  e3DbMallocZero(d
29cd0 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 69  b, nByte);.    i
29ce0 66 28 20 21 70 46 72 61 6d 65 20 29 7b 0a 20 20  f( !pFrame ){.  
29cf0 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
29d00 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
29d10 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
29d20 28 70 52 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e  (pRt);.    pRt->
29d30 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d  flags = MEM_Fram
29d40 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70 46  e;.    pRt->u.pF
29d50 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a  rame = pFrame;..
29d60 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20      pFrame->v = 
29d70 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  p;.    pFrame->n
29d80 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b  ChildMem = nMem;
29d90 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68  .    pFrame->nCh
29da0 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67 72 61  ildCsr = pProgra
29db0 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46 72  m->nCsr;.    pFr
29dc0 61 6d 65 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20  ame->pc = pc;.  
29dd0 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d    pFrame->aMem =
29de0 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46   p->aMem;.    pF
29df0 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e  rame->nMem = p->
29e00 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65  nMem;.    pFrame
29e10 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43  ->apCsr = p->apC
29e20 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  sr;.    pFrame->
29e30 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75  nCursor = p->nCu
29e40 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  rsor;.    pFrame
29e50 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a  ->aOp = p->aOp;.
29e60 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20      pFrame->nOp 
29e70 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46  = p->nOp;.    pF
29e80 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50  rame->token = pP
29e90 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20  rogram->token;. 
29ea0 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65     pFrame->aOnce
29eb0 46 6c 61 67 20 3d 20 70 2d 3e 61 4f 6e 63 65 46  Flag = p->aOnceF
29ec0 6c 61 67 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  lag;.    pFrame-
29ed0 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e  >nOnceFlag = p->
29ee0 6e 4f 6e 63 65 46 6c 61 67 3b 0a 0a 20 20 20 20  nOnceFlag;..    
29ef0 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d  pEnd = &VdbeFram
29f00 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72  eMem(pFrame)[pFr
29f10 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b  ame->nChildMem];
29f20 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64  .    for(pMem=Vd
29f30 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
29f40 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20  e); pMem!=pEnd; 
29f50 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70  pMem++){.      p
29f60 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Mem->flags = MEM
29f70 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20 20  _Undefined;.    
29f80 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b    pMem->db = db;
29f90 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
29fa0 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 52 74      pFrame = pRt
29fb0 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20  ->u.pFrame;.    
29fc0 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d  assert( pProgram
29fd0 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d  ->nMem+pProgram-
29fe0 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e  >nCsr==pFrame->n
29ff0 43 68 69 6c 64 4d 65 6d 20 29 3b 0a 20 20 20 20  ChildMem );.    
2a000 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d  assert( pProgram
2a010 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e  ->nCsr==pFrame->
2a020 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a 20 20 20  nChildCsr );.   
2a030 20 61 73 73 65 72 74 28 20 70 63 3d 3d 70 46 72   assert( pc==pFr
2a040 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a  ame->pc );.  }..
2a050 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20    p->nFrame++;. 
2a060 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
2a070 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
2a080 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69  pFrame->lastRowi
2a090 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20  d = lastRowid;. 
2a0a0 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65   pFrame->nChange
2a0b0 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20   = p->nChange;. 
2a0c0 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b   p->nChange = 0;
2a0d0 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70  .  p->pFrame = p
2a0e0 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d  Frame;.  p->aMem
2a0f0 20 3d 20 61 4d 65 6d 20 3d 20 26 56 64 62 65 46   = aMem = &VdbeF
2a100 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b  rameMem(pFrame)[
2a110 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d  -1];.  p->nMem =
2a120 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d   pFrame->nChildM
2a130 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72  em;.  p->nCursor
2a140 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e   = (u16)pFrame->
2a150 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e  nChildCsr;.  p->
2a160 61 70 43 73 72 20 3d 20 28 56 64 62 65 43 75 72  apCsr = (VdbeCur
2a170 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e  sor **)&aMem[p->
2a180 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e 61 4f  nMem+1];.  p->aO
2a190 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67 72  p = aOp = pProgr
2a1a0 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f  am->aOp;.  p->nO
2a1b0 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  p = pProgram->nO
2a1c0 70 3b 0a 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61  p;.  p->aOnceFla
2a1d0 67 20 3d 20 28 75 38 20 2a 29 26 70 2d 3e 61 70  g = (u8 *)&p->ap
2a1e0 43 73 72 5b 70 2d 3e 6e 43 75 72 73 6f 72 5d 3b  Csr[p->nCursor];
2a1f0 0a 20 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20  .  p->nOnceFlag 
2a200 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63  = pProgram->nOnc
2a210 65 3b 0a 20 20 70 63 20 3d 20 2d 31 3b 0a 20 20  e;.  pc = -1;.  
2a220 6d 65 6d 73 65 74 28 70 2d 3e 61 4f 6e 63 65 46  memset(p->aOnceF
2a230 6c 61 67 2c 20 30 2c 20 70 2d 3e 6e 4f 6e 63 65  lag, 0, p->nOnce
2a240 46 6c 61 67 29 3b 0a 0a 20 20 62 72 65 61 6b 3b  Flag);..  break;
2a250 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
2a260 61 72 61 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a  aram P1 P2 * * *
2a270 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2a280 64 65 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20  de is only ever 
2a290 70 72 65 73 65 6e 74 20 69 6e 20 73 75 62 2d 70  present in sub-p
2a2a0 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64 20 76  rograms called v
2a2b0 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72  ia the .** OP_Pr
2a2c0 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f  ogram instructio
2a2d0 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c 75 65 20  n. Copy a value 
2a2e0 63 75 72 72 65 6e 74 6c 79 20 73 74 6f 72 65 64  currently stored
2a2f0 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a   in a memory .**
2a300 20 63 65 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c   cell of the cal
2a310 6c 69 6e 67 20 28 70 61 72 65 6e 74 29 20 66 72  ling (parent) fr
2a320 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32 20 69  ame to cell P2 i
2a330 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72  n the current fr
2a340 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65 73 73  ames .** address
2a350 20 73 70 61 63 65 2e 20 54 68 69 73 20 69 73 20   space. This is 
2a360 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20  used by trigger 
2a370 70 72 6f 67 72 61 6d 73 20 74 6f 20 61 63 63 65  programs to acce
2a380 73 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a  ss the new.* .**
2a390 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65   and old.* value
2a3a0 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64  s..**.** The add
2a3b0 72 65 73 73 20 6f 66 20 74 68 65 20 63 65 6c 6c  ress of the cell
2a3c0 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 66   in the parent f
2a3d0 72 61 6d 65 20 69 73 20 64 65 74 65 72 6d 69 6e  rame is determin
2a3e0 65 64 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20  ed by adding.** 
2a3f0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
2a400 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20   P1 argument to 
2a410 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
2a420 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20   P1 argument to 
2a430 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f  the.** calling O
2a440 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75  P_Program instru
2a450 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
2a460 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20 20 20  P_Param: {      
2a470 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
2a480 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62  release */.  Vdb
2a490 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a  eFrame *pFrame;.
2a4a0 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 46    Mem *pIn;.  pF
2a4b0 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65  rame = p->pFrame
2a4c0 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d  ;.  pIn = &pFram
2a4d0 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20  e->aMem[pOp->p1 
2a4e0 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46  + pFrame->aOp[pF
2a4f0 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20  rame->pc].p1];  
2a500 20 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d   .  sqlite3VdbeM
2a510 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
2a520 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68  ut, pIn, MEM_Eph
2a530 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  em);.  break;.}.
2a540 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64  .#endif /* #ifnd
2a550 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
2a560 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64  RIGGER */..#ifnd
2a570 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
2a580 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70  OREIGN_KEY./* Op
2a590 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20  code: FkCounter 
2a5a0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2a5b0 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74 72 5b 50  ynopsis: fkctr[P
2a5c0 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63  1]+=P2.**.** Inc
2a5d0 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74 72  rement a "constr
2a5e0 61 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62 79  aint counter" by
2a5f0 20 50 32 20 28 50 32 20 6d 61 79 20 62 65 20 6e   P2 (P2 may be n
2a600 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74  egative or posit
2a610 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69  ive)..** If P1 i
2a620 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20  s non-zero, the 
2a630 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61  database constra
2a640 69 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69  int counter is i
2a650 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28  ncremented .** (
2a660 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e  deferred foreign
2a670 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
2a680 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  ). Otherwise, if
2a690 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P1 is zero, the
2a6a0 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 63   .** statement c
2a6b0 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d  ounter is increm
2a6c0 65 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74 65  ented (immediate
2a6d0 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
2a6e0 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61  straints)..*/.ca
2a6f0 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a  se OP_FkCounter:
2a700 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c 61   {.  if( db->fla
2a710 67 73 20 26 20 53 51 4c 49 54 45 5f 44 65 66 65  gs & SQLITE_Defe
2a720 72 46 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d 3e  rFKs ){.    db->
2a730 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
2a740 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d   += pOp->p2;.  }
2a750 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 31  else if( pOp->p1
2a760 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66   ){.    db->nDef
2a770 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70  erredCons += pOp
2a780 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ->p2;.  }else{. 
2a790 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61     p->nFkConstra
2a7a0 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  int += pOp->p2;.
2a7b0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2a7c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a  /* Opcode: FkIfZ
2a7d0 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ero P1 P2 * * *.
2a7e0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
2a7f0 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20 67 6f 74  fkctr[P1]==0 got
2a800 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  o P2.**.** This 
2a810 6f 70 63 6f 64 65 20 74 65 73 74 73 20 69 66 20  opcode tests if 
2a820 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  a foreign key co
2a830 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72  nstraint-counter
2a840 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65   is currently ze
2a850 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75  ro..** If so, ju
2a860 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
2a870 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  n P2. Otherwise,
2a880 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
2a890 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e   the next .** in
2a8a0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
2a8b0 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65   If P1 is non-ze
2a8c0 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a 75 6d  ro, then the jum
2a8d0 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
2a8e0 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74  e database const
2a8f0 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a  raint-counter.**
2a900 20 69 73 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e   is zero (the on
2a910 65 20 74 68 61 74 20 63 6f 75 6e 74 73 20 64 65  e that counts de
2a920 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e  ferred constrain
2a930 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49  t violations). I
2a940 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c  f P1 is.** zero,
2a950 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
2a960 65 6e 20 69 66 20 74 68 65 20 73 74 61 74 65 6d  en if the statem
2a970 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63  ent constraint-c
2a980 6f 75 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a  ounter is zero.*
2a990 2a 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  * (immediate for
2a9a0 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
2a9b0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e  int violations).
2a9c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66  .*/.case OP_FkIf
2a9d0 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 20  Zero: {         
2a9e0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28  /* jump */.  if(
2a9f0 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
2aa00 69 66 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  if( db->nDeferre
2aa10 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e  dCons==0 && db->
2aa20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
2aa30 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  ==0 ) pc = pOp->
2aa40 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  p2-1;.  }else{. 
2aa50 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e     if( p->nFkCon
2aa60 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62  straint==0 && db
2aa70 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
2aa80 6e 73 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f 70  ns==0 ) pc = pOp
2aa90 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72  ->p2-1;.  }.  br
2aaa0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2aab0 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f   #ifndef SQLITE_
2aac0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2aad0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
2aae0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
2aaf0 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65  REMENT./* Opcode
2ab00 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a  : MemMax P1 P2 *
2ab10 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2ab20 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50 31  : r[P1]=max(r[P1
2ab30 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 50  ],r[P2]).**.** P
2ab40 31 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  1 is a register 
2ab50 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  in the root fram
2ab60 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68  e of this VM (th
2ab70 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a  e root frame is.
2ab80 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f  ** different fro
2ab90 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72  m the current fr
2aba0 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73 74  ame if this inst
2abb0 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67  ruction is being
2abc0 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74   executed.** wit
2abd0 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61  hin a sub-progra
2abe0 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75  m). Set the valu
2abf0 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  e of register P1
2ac00 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   to the maximum 
2ac10 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65  of .** its curre
2ac20 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65  nt value and the
2ac30 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
2ac40 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  er P2..**.** Thi
2ac50 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68  s instruction th
2ac60 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66  rows an error if
2ac70 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
2ac80 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c   is not initiall
2ac90 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e  y.** an integer.
2aca0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d  .*/.case OP_MemM
2acb0 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  ax: {        /* 
2acc0 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61  in2 */.  VdbeFra
2acd0 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66  me *pFrame;.  if
2ace0 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20  ( p->pFrame ){. 
2acf0 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d     for(pFrame=p-
2ad00 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d  >pFrame; pFrame-
2ad10 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65  >pParent; pFrame
2ad20 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74  =pFrame->pParent
2ad30 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 70  );.    pIn1 = &p
2ad40 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d  Frame->aMem[pOp-
2ad50 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  >p1];.  }else{. 
2ad60 20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b     pIn1 = &aMem[
2ad70 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20  pOp->p1];.  }.  
2ad80 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
2ad90 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71  id(pIn1) );.  sq
2ada0 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
2adb0 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  gerify(pIn1);.  
2adc0 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
2add0 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2];.  sqlite3
2ade0 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
2adf0 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70  y(pIn2);.  if( p
2ae00 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75  In1->u.i<pIn2->u
2ae10 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75  .i){.    pIn1->u
2ae20 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a  .i = pIn2->u.i;.
2ae30 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2ae40 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2ae50 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
2ae60 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  NT */../* Opcode
2ae70 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20 2a 20  : IfPos P1 P2 * 
2ae80 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2ae90 20 69 66 20 72 5b 50 31 5d 3e 30 20 67 6f 74 6f   if r[P1]>0 goto
2aea0 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65   P2.**.** If the
2aeb0 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
2aec0 65 72 20 50 31 20 69 73 20 31 20 6f 72 20 67 72  er P1 is 1 or gr
2aed0 65 61 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50  eater, jump to P
2aee0 32 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  2..**.** It is i
2aef0 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68  llegal to use th
2af00 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
2af10 6e 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  n a register tha
2af20 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f  t does.** not co
2af30 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
2af40 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  .  An assertion 
2af50 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c  fault will resul
2af60 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f  t if you try..*/
2af70 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20  .case OP_IfPos: 
2af80 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
2af90 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
2afa0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2afb0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
2afc0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
2afd0 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
2afe0 2e 69 3e 30 20 29 7b 0a 20 20 20 20 20 70 63 20  .i>0 ){.     pc 
2aff0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
2b000 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
2b010 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 65 67 20  * Opcode: IfNeg 
2b020 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2b030 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
2b040 5d 3c 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  ]<0 goto P2.**.*
2b050 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f  * If the value o
2b060 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
2b070 20 6c 65 73 73 20 74 68 61 6e 20 7a 65 72 6f 2c   less than zero,
2b080 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a   jump to P2. .**
2b090 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61  .** It is illega
2b0a0 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e  l to use this in
2b0b0 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72  struction on a r
2b0c0 65 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65  egister that doe
2b0d0 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  s.** not contain
2b0e0 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e   an integer.  An
2b0f0 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74   assertion fault
2b100 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20   will result if 
2b110 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65  you try..*/.case
2b120 20 4f 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20   OP_IfNeg: {    
2b130 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
2b140 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
2b150 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
2b160 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
2b170 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
2b180 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 30 20  if( pIn1->u.i<0 
2b190 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70  ){.     pc = pOp
2b1a0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
2b1b0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2b1c0 6f 64 65 3a 20 49 66 5a 65 72 6f 20 50 31 20 50  ode: IfZero P1 P
2b1d0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
2b1e0 70 73 69 73 3a 20 72 5b 50 31 5d 2b 3d 50 33 2c  psis: r[P1]+=P3,
2b1f0 20 69 66 20 72 5b 50 31 5d 3d 3d 30 20 67 6f 74   if r[P1]==0 got
2b200 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  o P2.**.** The r
2b210 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
2b220 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
2b230 65 72 2e 20 20 41 64 64 20 6c 69 74 65 72 61 6c  er.  Add literal
2b240 20 50 33 20 74 6f 20 74 68 65 0a 2a 2a 20 76 61   P3 to the.** va
2b250 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
2b260 50 31 2e 20 20 49 66 20 74 68 65 20 72 65 73 75  P1.  If the resu
2b270 6c 74 20 69 73 20 65 78 61 63 74 6c 79 20 30 2c  lt is exactly 0,
2b280 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a   jump to P2. .**
2b290 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61  .** It is illega
2b2a0 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e  l to use this in
2b2b0 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72  struction on a r
2b2c0 65 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65  egister that doe
2b2d0 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  s.** not contain
2b2e0 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e   an integer.  An
2b2f0 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74   assertion fault
2b300 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20   will result if 
2b310 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65  you try..*/.case
2b320 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20 20 20   OP_IfZero: {   
2b330 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
2b340 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
2b350 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2b360 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
2b370 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
2b380 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f   pIn1->u.i += pO
2b390 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 70 49 6e  p->p3;.  if( pIn
2b3a0 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20 20  1->u.i==0 ){.   
2b3b0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
2b3c0 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
2b3d0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
2b3e0 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20 50  ggStep * P2 P3 P
2b3f0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
2b400 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74  : accum=r[P3] st
2b410 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a  ep(r[P2@P5]).**.
2b420 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 73  ** Execute the s
2b430 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  tep function for
2b440 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20   an aggregate.  
2b450 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20  The.** function 
2b460 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73  has P5 arguments
2b470 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .   P4 is a poin
2b480 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44  ter to the FuncD
2b490 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  ef.** structure 
2b4a0 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74  that specifies t
2b4b0 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55 73  he function.  Us
2b4c0 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33  e register.** P3
2b4d0 20 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61   as the accumula
2b4e0 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  tor..**.** The P
2b4f0 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  5 arguments are 
2b500 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
2b510 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a  ter P2 and its.*
2b520 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f  * successors..*/
2b530 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70  .case OP_AggStep
2b540 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69  : {.  int n;.  i
2b550 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65  nt i;.  Mem *pMe
2b560 6d 3b 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 0a  m;.  Mem *pRec;.
2b570 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
2b580 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33  t ctx;.  sqlite3
2b590 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a  _value **apVal;.
2b5a0 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  .  n = pOp->p5;.
2b5b0 20 20 61 73 73 65 72 74 28 20 6e 3e 3d 30 20 29    assert( n>=0 )
2b5c0 3b 0a 20 20 70 52 65 63 20 3d 20 26 61 4d 65 6d  ;.  pRec = &aMem
2b5d0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 56  [pOp->p2];.  apV
2b5e0 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  al = p->apArg;. 
2b5f0 20 61 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c   assert( apVal |
2b600 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f 72 28  | n==0 );.  for(
2b610 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70  i=0; i<n; i++, p
2b620 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  Rec++){.    asse
2b630 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
2b640 52 65 63 29 20 29 3b 0a 20 20 20 20 61 70 56 61  Rec) );.    apVa
2b650 6c 5b 69 5d 20 3d 20 70 52 65 63 3b 0a 20 20 20  l[i] = pRec;.   
2b660 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
2b670 65 28 70 2c 20 70 52 65 63 29 3b 0a 20 20 20 20  e(p, pRec);.    
2b680 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
2b690 6f 72 65 54 79 70 65 28 70 52 65 63 29 3b 0a 20  oreType(pRec);. 
2b6a0 20 7d 0a 20 20 63 74 78 2e 70 46 75 6e 63 20 3d   }.  ctx.pFunc =
2b6b0 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a   pOp->p4.pFunc;.
2b6c0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2b6d0 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
2b6e0 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
2b6f0 73 6f 72 29 20 29 3b 0a 20 20 63 74 78 2e 70 4d  sor) );.  ctx.pM
2b700 65 6d 20 3d 20 70 4d 65 6d 20 3d 20 26 61 4d 65  em = pMem = &aMe
2b710 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d  m[pOp->p3];.  pM
2b720 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 63 74 78 2e 73  em->n++;.  ctx.s
2b730 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  .flags = MEM_Nul
2b740 6c 3b 0a 20 20 63 74 78 2e 73 2e 7a 20 3d 20 30  l;.  ctx.s.z = 0
2b750 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f  ;.  ctx.s.zMallo
2b760 63 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 78  c = 0;.  ctx.s.x
2b770 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73  Del = 0;.  ctx.s
2b780 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e  .db = db;.  ctx.
2b790 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63  isError = 0;.  c
2b7a0 74 78 2e 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20 20  tx.pColl = 0;.  
2b7b0 63 74 78 2e 73 6b 69 70 46 6c 61 67 20 3d 20 30  ctx.skipFlag = 0
2b7c0 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75 6e  ;.  if( ctx.pFun
2b7d0 63 2d 3e 66 75 6e 63 46 6c 61 67 73 20 26 20 53  c->funcFlags & S
2b7e0 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
2b7f0 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72  OLL ){.    asser
2b800 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b  t( pOp>p->aOp );
2b810 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2b820 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f  [-1].p4type==P4_
2b830 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61  COLLSEQ );.    a
2b840 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
2b850 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65  pcode==OP_CollSe
2b860 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f  q );.    ctx.pCo
2b870 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e  ll = pOp[-1].p4.
2b880 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63 74  pColl;.  }.  (ct
2b890 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65 70 29 28  x.pFunc->xStep)(
2b8a0 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b  &ctx, n, apVal);
2b8b0 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35   /* IMP: R-24505
2b8c0 2d 32 33 32 33 30 20 2a 2f 0a 20 20 69 66 28 20  -23230 */.  if( 
2b8d0 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20  ctx.isError ){. 
2b8e0 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
2b8f0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
2b900 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74   db, "%s", sqlit
2b910 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 63  e3_value_text(&c
2b920 74 78 2e 73 29 29 3b 0a 20 20 20 20 72 63 20 3d  tx.s));.    rc =
2b930 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20   ctx.isError;.  
2b940 7d 0a 20 20 69 66 28 20 63 74 78 2e 73 6b 69 70  }.  if( ctx.skip
2b950 46 6c 61 67 20 29 7b 0a 20 20 20 20 61 73 73 65  Flag ){.    asse
2b960 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f  rt( pOp[-1].opco
2b970 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29  de==OP_CollSeq )
2b980 3b 0a 20 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31  ;.    i = pOp[-1
2b990 5d 2e 70 31 3b 0a 20 20 20 20 69 66 28 20 69 20  ].p1;.    if( i 
2b9a0 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ) sqlite3VdbeMem
2b9b0 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69  SetInt64(&aMem[i
2b9c0 5d 2c 20 31 29 3b 0a 20 20 7d 0a 0a 20 20 73 71  ], 1);.  }..  sq
2b9d0 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
2b9e0 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 0a 20 20  ase(&ctx.s);..  
2b9f0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2ba00 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31  ode: AggFinal P1
2ba10 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
2ba20 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b  nopsis: accum=r[
2ba30 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45  P1] N=P2.**.** E
2ba40 78 65 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c  xecute the final
2ba50 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f  izer function fo
2ba60 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20  r an aggregate. 
2ba70 20 50 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65   P1 is.** the me
2ba80 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
2ba90 61 74 20 69 73 20 74 68 65 20 61 63 63 75 6d 75  at is the accumu
2baa0 6c 61 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67  lator for the ag
2bab0 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50  gregate..**.** P
2bac0 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  2 is the number 
2bad0 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61  of arguments tha
2bae0 74 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  t the step funct
2baf0 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a  ion takes and.**
2bb00 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
2bb10 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20   to the FuncDef 
2bb20 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f  for this functio
2bb30 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72  n.  The P2.** ar
2bb40 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73  gument is not us
2bb50 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
2bb60 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74  e.  It is only t
2bb70 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67  here to disambig
2bb80 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  uate.** function
2bb90 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20  s that can take 
2bba0 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20  varying numbers 
2bbb0 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54  of arguments.  T
2bbc0 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e  he.** P4 argumen
2bbd0 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64  t is only needed
2bbe0 20 66 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72   for the degener
2bbf0 61 74 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a  ate case where.*
2bc00 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  * the step funct
2bc10 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76  ion was not prev
2bc20 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a  iously called..*
2bc30 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e  /.case OP_AggFin
2bc40 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65  al: {.  Mem *pMe
2bc50 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  m;.  assert( pOp
2bc60 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
2bc70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  1<=(p->nMem-p->n
2bc80 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4d 65  Cursor) );.  pMe
2bc90 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
2bca0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  1];.  assert( (p
2bcb0 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d  Mem->flags & ~(M
2bcc0 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29  EM_Null|MEM_Agg)
2bcd0 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  )==0 );.  rc = s
2bce0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e  qlite3VdbeMemFin
2bcf0 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d  alize(pMem, pOp-
2bd00 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66  >p4.pFunc);.  if
2bd10 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69  ( rc ){.    sqli
2bd20 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
2bd30 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
2bd40 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
2bd50 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20  e_text(pMem));. 
2bd60 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   }.  sqlite3Vdbe
2bd70 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
2bd80 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  Mem, encoding);.
2bd90 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
2bda0 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69  BSIZE(pMem);.  i
2bdb0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
2bdc0 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b  mTooBig(pMem) ){
2bdd0 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
2bde0 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  g;.  }.  break;.
2bdf0 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
2be00 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70  E_OMIT_WAL./* Op
2be10 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74  code: Checkpoint
2be20 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
2be30 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 64  .** Checkpoint d
2be40 61 74 61 62 61 73 65 20 50 31 2e 20 54 68 69 73  atabase P1. This
2be50 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50   is a no-op if P
2be60 31 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74  1 is not current
2be70 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64  ly in.** WAL mod
2be80 65 2e 20 50 61 72 61 6d 65 74 65 72 20 50 32 20  e. Parameter P2 
2be90 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45  is one of SQLITE
2bea0 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53  _CHECKPOINT_PASS
2beb0 49 56 45 2c 20 46 55 4c 4c 0a 2a 2a 20 6f 72 20  IVE, FULL.** or 
2bec0 52 45 53 54 41 52 54 2e 20 20 57 72 69 74 65 20  RESTART.  Write 
2bed0 31 20 6f 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b  1 or 0 into mem[
2bee0 50 33 5d 20 69 66 20 74 68 65 20 63 68 65 63 6b  P3] if the check
2bef0 70 6f 69 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a  point returns.**
2bf00 20 53 51 4c 49 54 45 5f 42 55 53 59 20 6f 72 20   SQLITE_BUSY or 
2bf10 6e 6f 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c  not, respectivel
2bf20 79 2e 20 20 57 72 69 74 65 20 74 68 65 20 6e 75  y.  Write the nu
2bf30 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
2bf40 20 74 68 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65   the.** WAL afte
2bf50 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74  r the checkpoint
2bf60 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20   into mem[P3+1] 
2bf70 61 6e 64 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  and the number o
2bf80 66 20 70 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68  f pages.** in th
2bf90 65 20 57 41 4c 20 74 68 61 74 20 68 61 76 65 20  e WAL that have 
2bfa0 62 65 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65  been checkpointe
2bfb0 64 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63  d after the chec
2bfc0 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65  kpoint.** comple
2bfd0 74 65 73 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b  tes into mem[P3+
2bfe0 32 5d 2e 20 20 48 6f 77 65 76 65 72 20 6f 6e 20  2].  However on 
2bff0 61 6e 20 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33  an error, mem[P3
2c000 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50  +1] and.** mem[P
2c010 33 2b 32 5d 20 61 72 65 20 69 6e 69 74 69 61 6c  3+2] are initial
2c020 69 7a 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63  ized to -1..*/.c
2c030 61 73 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e  ase OP_Checkpoin
2c040 74 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20  t: {.  int i;   
2c050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c060 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
2c070 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20  ounter */.  int 
2c080 61 52 65 73 5b 33 5d 3b 20 20 20 20 20 20 20 20  aRes[3];        
2c090 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
2c0a0 65 73 75 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20  esults */.  Mem 
2c0b0 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *pMem;          
2c0c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
2c0d0 72 69 74 65 20 72 65 73 75 6c 74 73 20 68 65 72  rite results her
2c0e0 65 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  e */..  assert( 
2c0f0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
2c100 3b 0a 20 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b  ;.  aRes[0] = 0;
2c110 0a 20 20 61 52 65 73 5b 31 5d 20 3d 20 61 52 65  .  aRes[1] = aRe
2c120 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73  s[2] = -1;.  ass
2c130 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51  ert( pOp->p2==SQ
2c140 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
2c150 50 41 53 53 49 56 45 0a 20 20 20 20 20 20 20 7c  PASSIVE.       |
2c160 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  | pOp->p2==SQLIT
2c170 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c  E_CHECKPOINT_FUL
2c180 4c 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d  L.       || pOp-
2c190 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43  >p2==SQLITE_CHEC
2c1a0 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52 54 0a 20  KPOINT_RESTART. 
2c1b0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
2c1c0 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c  e3Checkpoint(db,
2c1d0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2c1e0 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20 26 61 52  2, &aRes[1], &aR
2c1f0 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28 20 72 63  es[2]);.  if( rc
2c200 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
2c210 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
2c220 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73 5b 30 5d  _OK;.    aRes[0]
2c230 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66 6f 72 28   = 1;.  }.  for(
2c240 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26 61 4d 65  i=0, pMem = &aMe
2c250 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b  m[pOp->p3]; i<3;
2c260 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20   i++, pMem++){. 
2c270 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2c280 6d 53 65 74 49 6e 74 36 34 28 70 4d 65 6d 2c 20  mSetInt64(pMem, 
2c290 28 69 36 34 29 61 52 65 73 5b 69 5d 29 3b 0a 20  (i64)aRes[i]);. 
2c2a0 20 7d 20 20 20 20 0a 20 20 62 72 65 61 6b 3b 0a   }    .  break;.
2c2b0 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 23 69 66  };  .#endif..#if
2c2c0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2c2d0 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64  _PRAGMA./* Opcod
2c2e0 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20 50  e: JournalMode P
2c2f0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
2c300 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6a 6f 75  * Change the jou
2c310 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 64 61 74  rnal mode of dat
2c320 61 62 61 73 65 20 50 31 20 74 6f 20 50 33 2e 20  abase P1 to P3. 
2c330 50 33 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f  P3 must be one o
2c340 66 20 74 68 65 0a 2a 2a 20 50 41 47 45 52 5f 4a  f the.** PAGER_J
2c350 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 76  OURNALMODE_XXX v
2c360 61 6c 75 65 73 2e 20 49 66 20 63 68 61 6e 67 69  alues. If changi
2c370 6e 67 20 62 65 74 77 65 65 6e 20 74 68 65 20 76  ng between the v
2c380 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61 63 6b 0a  arious rollback.
2c390 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c 65 74 65  ** modes (delete
2c3a0 2c 20 74 72 75 6e 63 61 74 65 2c 20 70 65 72 73  , truncate, pers
2c3b0 69 73 74 2c 20 6f 66 66 20 61 6e 64 20 6d 65 6d  ist, off and mem
2c3c0 6f 72 79 29 2c 20 74 68 69 73 20 69 73 20 61 20  ory), this is a 
2c3d0 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72 61 74  simple.** operat
2c3e0 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73 20 72 65  ion. No IO is re
2c3f0 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  quired..**.** If
2c400 20 63 68 61 6e 67 69 6e 67 20 69 6e 74 6f 20 6f   changing into o
2c410 72 20 6f 75 74 20 6f 66 20 57 41 4c 20 6d 6f 64  r out of WAL mod
2c420 65 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20  e the procedure 
2c430 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61  is more complica
2c440 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  ted..**.** Write
2c450 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69   a string contai
2c460 6e 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 20 6a  ning the final j
2c470 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20 72  ournal-mode to r
2c480 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
2c490 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f  ase OP_JournalMo
2c4a0 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f 75 74 32  de: {    /* out2
2c4b0 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
2c4c0 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20   Btree *pBt;    
2c4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c4e0 20 2f 2a 20 42 74 72 65 65 20 74 6f 20 63 68 61   /* Btree to cha
2c4f0 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  nge journal mode
2c500 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a   of */.  Pager *
2c510 70 50 61 67 65 72 3b 20 20 20 20 20 20 20 20 20  pPager;         
2c520 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65           /* Page
2c530 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
2c540 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65  h pBt */.  int e
2c550 4e 65 77 3b 20 20 20 20 20 20 20 20 20 20 20 20  New;            
2c560 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
2c570 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a  w journal mode *
2c580 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20  /.  int eOld;   
2c590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5a0 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a      /* The old j
2c5b0 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23  ournal mode */.#
2c5c0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2c5d0 49 54 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63  IT_WAL.  const c
2c5e0 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20  har *zFilename; 
2c5f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
2c600 20 6f 66 20 64 61 74 61 62 61 73 65 20 66 69 6c   of database fil
2c610 65 20 66 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a  e for pPager */.
2c620 23 65 6e 64 69 66 0a 0a 20 20 65 4e 65 77 20 3d  #endif..  eNew =
2c630 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
2c640 72 74 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f  rt( eNew==PAGER_
2c650 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45  JOURNALMODE_DELE
2c660 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  TE .       || eN
2c670 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2c680 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 20 0a  LMODE_TRUNCATE .
2c690 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
2c6a0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2c6b0 45 5f 50 45 52 53 49 53 54 20 0a 20 20 20 20 20  E_PERSIST .     
2c6c0 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
2c6d0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46  _JOURNALMODE_OFF
2c6e0 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
2c6f0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2c700 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20  DE_MEMORY.      
2c710 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
2c720 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a  JOURNALMODE_WAL.
2c730 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
2c740 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2c750 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20 20 61  E_QUERY.  );.  a
2c760 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2c770 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
2c780 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
2c790 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
2c7a0 20 29 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d   );..  pBt = db-
2c7b0 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
2c7c0 74 3b 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71  t;.  pPager = sq
2c7d0 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
2c7e0 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73  pBt);.  eOld = s
2c7f0 71 6c 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f  qlite3PagerGetJo
2c800 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
2c810 29 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50  );.  if( eNew==P
2c820 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2c830 5f 51 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20  _QUERY ) eNew = 
2c840 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c  eOld;.  if( !sql
2c850 69 74 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61  ite3PagerOkToCha
2c860 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  ngeJournalMode(p
2c870 50 61 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20  Pager) ) eNew = 
2c880 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53  eOld;..#ifndef S
2c890 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
2c8a0 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c   zFilename = sql
2c8b0 69 74 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d  ite3PagerFilenam
2c8c0 65 28 70 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20  e(pPager, 1);.. 
2c8d0 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77   /* Do not allow
2c8e0 20 61 20 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f   a transition to
2c8f0 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41   journal_mode=WA
2c900 4c 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65  L for a database
2c910 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61  .  ** in tempora
2c920 72 79 20 73 74 6f 72 61 67 65 20 6f 72 20 69 66  ry storage or if
2c930 20 74 68 65 20 56 46 53 20 64 6f 65 73 20 6e 6f   the VFS does no
2c940 74 20 73 75 70 70 6f 72 74 20 73 68 61 72 65 64  t support shared
2c950 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20   memory .  */.  
2c960 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f  if( eNew==PAGER_
2c970 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a  JOURNALMODE_WAL.
2c980 20 20 20 26 26 20 28 73 71 6c 69 74 65 33 53 74     && (sqlite3St
2c990 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65  rlen30(zFilename
2c9a0 29 3d 3d 30 20 20 20 20 20 20 20 20 20 20 20 2f  )==0           /
2c9b0 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20  * Temp file */. 
2c9c0 20 20 20 20 20 20 7c 7c 20 21 73 71 6c 69 74 65        || !sqlite
2c9d0 33 50 61 67 65 72 57 61 6c 53 75 70 70 6f 72 74  3PagerWalSupport
2c9e0 65 64 28 70 50 61 67 65 72 29 29 20 20 20 2f 2a  ed(pPager))   /*
2c9f0 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72   No shared-memor
2ca00 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29  y support */.  )
2ca10 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c  {.    eNew = eOl
2ca20 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28 65  d;.  }..  if( (e
2ca30 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26  New!=eOld).   &&
2ca40 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f   (eOld==PAGER_JO
2ca50 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c  URNALMODE_WAL ||
2ca60 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2ca70 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20  RNALMODE_WAL).  
2ca80 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62 2d 3e  ){.    if( !db->
2ca90 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62  autoCommit || db
2caa0 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 20 29 7b  ->nVdbeRead>1 ){
2cab0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
2cac0 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20  TE_ERROR;.      
2cad0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2cae0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2caf0 2c 20 0a 20 20 20 20 20 20 20 20 20 20 22 63 61  , .          "ca
2cb00 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25 73 20 77  nnot change %s w
2cb10 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74  al mode from wit
2cb20 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
2cb30 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 28 65  n",.          (e
2cb40 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2cb50 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e  ALMODE_WAL ? "in
2cb60 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a  to" : "out of").
2cb70 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 62        );.      b
2cb80 72 65 61 6b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  reak;.    }else{
2cb90 0a 20 0a 20 20 20 20 20 20 69 66 28 20 65 4f 6c  . .      if( eOl
2cba0 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  d==PAGER_JOURNAL
2cbb0 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20  MODE_WAL ){.    
2cbc0 20 20 20 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e      /* If leavin
2cbd0 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73  g WAL mode, clos
2cbe0 65 20 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20  e the log file. 
2cbf0 49 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74  If successful, t
2cc00 68 65 20 63 61 6c 6c 0a 20 20 20 20 20 20 20 20  he call.        
2cc10 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c 6f 73 65  ** to PagerClose
2cc20 57 61 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e 74  Wal() checkpoint
2cc30 73 20 61 6e 64 20 64 65 6c 65 74 65 73 20 74 68  s and deletes th
2cc40 65 20 77 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f  e write-ahead-lo
2cc50 67 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69  g .        ** fi
2cc60 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53 49 56 45  le. An EXCLUSIVE
2cc70 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20   lock may still 
2cc80 62 65 20 68 65 6c 64 20 6f 6e 20 74 68 65 20 64  be held on the d
2cc90 61 74 61 62 61 73 65 20 66 69 6c 65 20 0a 20 20  atabase file .  
2cca0 20 20 20 20 20 20 2a 2a 20 61 66 74 65 72 20 61        ** after a
2ccb0 20 73 75 63 63 65 73 73 66 75 6c 20 72 65 74 75   successful retu
2ccc0 72 6e 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a  rn. .        */.
2ccd0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
2cce0 69 74 65 33 50 61 67 65 72 43 6c 6f 73 65 57 61  ite3PagerCloseWa
2ccf0 6c 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20  l(pPager);.     
2cd00 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
2cd10 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
2cd20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65    sqlite3PagerSe
2cd30 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
2cd40 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20  ger, eNew);.    
2cd50 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73      }.      }els
2cd60 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45  e if( eOld==PAGE
2cd70 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45  R_JOURNALMODE_ME
2cd80 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20 20 20 20  MORY ){.        
2cd90 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69  /* Cannot transi
2cda0 74 69 6f 6e 20 64 69 72 65 63 74 6c 79 20 66 72  tion directly fr
2cdb0 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c  om MEMORY to WAL
2cdc0 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a  .  Use mode OFF.
2cdd0 20 20 20 20 20 20 20 20 2a 2a 20 61 73 20 61 6e          ** as an
2cde0 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20 2a 2f   intermediate */
2cdf0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
2ce00 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d  PagerSetJournalM
2ce10 6f 64 65 28 70 50 61 67 65 72 2c 20 50 41 47 45  ode(pPager, PAGE
2ce20 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46  R_JOURNALMODE_OF
2ce30 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20  F);.      }.  . 
2ce40 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74       /* Open a t
2ce50 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68  ransaction on th
2ce60 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
2ce70 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74   Regardless of t
2ce80 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20  he journal.     
2ce90 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69 73 20 74   ** mode, this t
2cea0 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 77 61 79  ransaction alway
2ceb0 73 20 75 73 65 73 20 61 20 72 6f 6c 6c 62 61 63  s uses a rollbac
2cec0 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20  k journal..     
2ced0 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
2cee0 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73  ( sqlite3BtreeIs
2cef0 49 6e 54 72 61 6e 73 28 70 42 74 29 3d 3d 30 20  InTrans(pBt)==0 
2cf00 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  );.      if( rc=
2cf10 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2cf20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
2cf30 65 33 42 74 72 65 65 53 65 74 56 65 72 73 69 6f  e3BtreeSetVersio
2cf40 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41  n(pBt, (eNew==PA
2cf50 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2cf60 57 41 4c 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20  WAL ? 2 : 1));. 
2cf70 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
2cf80 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65  .#endif /* ifnde
2cf90 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
2cfa0 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72 63 20 29  L */..  if( rc )
2cfb0 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c  {.    eNew = eOl
2cfc0 64 3b 0a 20 20 7d 0a 20 20 65 4e 65 77 20 3d 20  d;.  }.  eNew = 
2cfd0 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a  sqlite3PagerSetJ
2cfe0 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
2cff0 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75  r, eNew);..  pOu
2d000 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
2d010 32 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  2];.  pOut->flag
2d020 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  s = MEM_Str|MEM_
2d030 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
2d040 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68  .  pOut->z = (ch
2d050 61 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72  ar *)sqlite3Jour
2d060 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77  nalModename(eNew
2d070 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73  );.  pOut->n = s
2d080 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
2d090 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d  Out->z);.  pOut-
2d0a0 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
2d0b0 46 38 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  F8;.  sqlite3Vdb
2d0c0 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
2d0d0 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pOut, encoding);
2d0e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e  .  break;.};.#en
2d0f0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2d100 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69  IT_PRAGMA */..#i
2d110 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2d120 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 26  E_OMIT_VACUUM) &
2d130 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
2d140 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f  E_OMIT_ATTACH)./
2d150 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63 75 75 6d  * Opcode: Vacuum
2d160 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
2d170 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69   Vacuum the enti
2d180 72 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  re database.  Th
2d190 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63  is opcode will c
2d1a0 61 75 73 65 20 6f 74 68 65 72 20 76 69 72 74 75  ause other virtu
2d1b0 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74  al.** machines t
2d1c0 6f 20 62 65 20 63 72 65 61 74 65 64 20 61 6e 64  o be created and
2d1d0 20 72 75 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f   run.  It may no
2d1e0 74 20 62 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d  t be called from
2d1f0 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61   within.** a tra
2d200 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  nsaction..*/.cas
2d210 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20  e OP_Vacuum: {. 
2d220 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
2d230 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 72 63 20  Only==0 );.  rc 
2d240 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75  = sqlite3RunVacu
2d250 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  um(&p->zErrMsg, 
2d260 64 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  db);.  break;.}.
2d270 23 65 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 66  #endif..#if !def
2d280 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2d290 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20  _AUTOVACUUM)./* 
2d2a0 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56 61 63 75  Opcode: IncrVacu
2d2b0 75 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  um P1 P2 * * *.*
2d2c0 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20 73  *.** Perform a s
2d2d0 69 6e 67 6c 65 20 73 74 65 70 20 6f 66 20 74 68  ingle step of th
2d2e0 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61  e incremental va
2d2f0 63 75 75 6d 20 70 72 6f 63 65 64 75 72 65 20 6f  cuum procedure o
2d300 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64 61 74 61  n.** the P1 data
2d310 62 61 73 65 2e 20 49 66 20 74 68 65 20 76 61 63  base. If the vac
2d320 75 75 6d 20 68 61 73 20 66 69 6e 69 73 68 65 64  uum has finished
2d330 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  , jump to instru
2d340 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68  ction.** P2. Oth
2d350 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72  erwise, fall thr
2d360 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
2d370 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2d380 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72 56 61 63  .case OP_IncrVac
2d390 75 75 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  uum: {        /*
2d3a0 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65   jump */.  Btree
2d3b0 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74   *pBt;..  assert
2d3c0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2d3d0 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
2d3e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
2d3f0 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28  >btreeMask & (((
2d400 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d  yDbMask)1)<<pOp-
2d410 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 61 73  >p1))!=0 );.  as
2d420 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
2d430 79 3d 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20  y==0 );.  pBt = 
2d440 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
2d450 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c  .pBt;.  rc = sql
2d460 69 74 65 33 42 74 72 65 65 49 6e 63 72 56 61 63  ite3BtreeIncrVac
2d470 75 75 6d 28 70 42 74 29 3b 0a 20 20 69 66 28 20  uum(pBt);.  if( 
2d480 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc==SQLITE_DONE 
2d490 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
2d4a0 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 72 63 20  >p2 - 1;.    rc 
2d4b0 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d  = SQLITE_OK;.  }
2d4c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2d4d0 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45  if../* Opcode: E
2d4e0 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a  xpire P1 * * * *
2d4f0 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65  .**.** Cause pre
2d500 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65  compiled stateme
2d510 6e 74 73 20 74 6f 20 62 65 63 6f 6d 65 20 65 78  nts to become ex
2d520 70 69 72 65 64 2e 20 41 6e 20 65 78 70 69 72 65  pired. An expire
2d530 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 66  d statement.** f
2d540 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72 72  ails with an err
2d550 6f 72 20 63 6f 64 65 20 6f 66 20 53 51 4c 49 54  or code of SQLIT
2d560 45 5f 53 43 48 45 4d 41 20 69 66 20 69 74 20 69  E_SCHEMA if it i
2d570 73 20 65 76 65 72 20 65 78 65 63 75 74 65 64 20  s ever executed 
2d580 0a 2a 2a 20 28 76 69 61 20 73 71 6c 69 74 65 33  .** (via sqlite3
2d590 5f 73 74 65 70 28 29 29 2e 0a 2a 2a 20 0a 2a 2a  _step())..** .**
2d5a0 20 49 66 20 50 31 20 69 73 20 30 2c 20 74 68 65   If P1 is 0, the
2d5b0 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d  n all SQL statem
2d5c0 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69  ents become expi
2d5d0 72 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f  red. If P1 is no
2d5e0 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20  n-zero,.** then 
2d5f0 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74  only the current
2d600 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73 74 61  ly executing sta
2d610 74 65 6d 65 6e 74 20 69 73 20 61 66 66 65 63 74  tement is affect
2d620 65 64 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ed. .*/.case OP_
2d630 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20  Expire: {.  if( 
2d640 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20  !pOp->p1 ){.    
2d650 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
2d660 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
2d670 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  db);.  }else{.  
2d680 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31    p->expired = 1
2d690 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2d6a0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2d6b0 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
2d6c0 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61  HE./* Opcode: Ta
2d6d0 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33  bleLock P1 P2 P3
2d6e0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
2d6f0 73 3a 20 69 44 62 3d 50 31 20 72 6f 6f 74 3d 50  s: iDb=P1 root=P
2d700 32 20 77 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a  2 write=P3.**.**
2d710 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f   Obtain a lock o
2d720 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74  n a particular t
2d730 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72  able. This instr
2d740 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75  uction is only u
2d750 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20  sed when.** the 
2d760 73 68 61 72 65 64 2d 63 61 63 68 65 20 66 65 61  shared-cache fea
2d770 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e  ture is enabled.
2d780 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68   .**.** P1 is th
2d790 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64  e index of the d
2d7a0 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74  atabase in sqlit
2d7b0 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20  e3.aDb[] of the 
2d7c0 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77  database.** on w
2d7d0 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73  hich the lock is
2d7e0 20 61 63 71 75 69 72 65 64 2e 20 20 41 20 72 65   acquired.  A re
2d7f0 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e  adlock is obtain
2d800 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a  ed if P3==0 or.*
2d810 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69  * a write lock i
2d820 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50  f P3==1..**.** P
2d830 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72  2 contains the r
2d840 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20  oot-page of the 
2d850 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a  table to lock..*
2d860 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73  *.** P4 contains
2d870 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
2d880 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
2d890 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64  ble being locked
2d8a0 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a  . This is only.*
2d8b0 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61  * used to genera
2d8c0 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  te an error mess
2d8d0 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20  age if the lock 
2d8e0 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e  cannot be obtain
2d8f0 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  ed..*/.case OP_T
2d900 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38  ableLock: {.  u8
2d910 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28   isWriteLock = (
2d920 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66  u8)pOp->p3;.  if
2d930 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c  ( isWriteLock ||
2d940 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53   0==(db->flags&S
2d950 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d  QLITE_ReadUncomm
2d960 69 74 74 65 64 29 20 29 7b 0a 20 20 20 20 69 6e  itted) ){.    in
2d970 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20  t p1 = pOp->p1; 
2d980 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e  .    assert( p1>
2d990 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62  =0 && p1<db->nDb
2d9a0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2d9b0 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
2d9c0 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70  (((yDbMask)1)<<p
2d9d0 31 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 61 73  1))!=0 );.    as
2d9e0 73 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f 63  sert( isWriteLoc
2d9f0 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65 4c  k==0 || isWriteL
2da00 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63  ock==1 );.    rc
2da10 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
2da20 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62  ockTable(db->aDb
2da30 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  [p1].pBt, pOp->p
2da40 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b  2, isWriteLock);
2da50 0a 20 20 20 20 69 66 28 20 28 72 63 26 30 78 46  .    if( (rc&0xF
2da60 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  F)==SQLITE_LOCKE
2da70 44 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74  D ){.      const
2da80 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e   char *z = pOp->
2da90 70 34 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69  p4.z;.      sqli
2daa0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
2dab0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 64  >zErrMsg, db, "d
2dac0 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 73  atabase table is
2dad0 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29   locked: %s", z)
2dae0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
2daf0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2db00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
2db10 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69  RED_CACHE */..#i
2db20 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2db30 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2db40 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e  * Opcode: VBegin
2db50 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a   * * * P4 *.**.*
2db60 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f  * P4 may be a po
2db70 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69  inter to an sqli
2db80 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
2db90 72 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20  re. If so, call 
2dba0 74 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d  the .** xBegin m
2dbb0 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74  ethod for that t
2dbc0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f  able..**.** Also
2dbd0 2c 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  , whether or not
2dbe0 20 50 34 20 69 73 20 73 65 74 2c 20 63 68 65 63   P4 is set, chec
2dbf0 6b 20 74 68 61 74 20 74 68 69 73 20 69 73 20 6e  k that this is n
2dc00 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20  ot being called 
2dc10 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61  from.** within a
2dc20 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76   callback to a v
2dc30 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79  irtual table xSy
2dc40 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20  nc() method. If 
2dc50 69 74 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72  it is, the error
2dc60 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65  .** code will be
2dc70 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c   set to SQLITE_L
2dc80 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f  OCKED..*/.case O
2dc90 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54  P_VBegin: {.  VT
2dca0 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70  able *pVTab;.  p
2dcb0 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  VTab = pOp->p4.p
2dcc0 56 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c  Vtab;.  rc = sql
2dcd0 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 64 62  ite3VtabBegin(db
2dce0 2c 20 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20  , pVTab);.  if( 
2dcf0 70 56 54 61 62 20 29 20 73 71 6c 69 74 65 33 56  pVTab ) sqlite3V
2dd00 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
2dd10 70 2c 20 70 56 54 61 62 2d 3e 70 56 74 61 62 29  p, pVTab->pVtab)
2dd20 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
2dd30 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2dd40 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
2dd50 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2dd60 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2dd70 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2dd80 56 43 72 65 61 74 65 20 50 31 20 2a 20 2a 20 50  VCreate P1 * * P
2dd90 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
2dda0 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69  the name of a vi
2ddb0 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64  rtual table in d
2ddc0 61 74 61 62 61 73 65 20 50 31 2e 20 43 61 6c 6c  atabase P1. Call
2ddd0 20 74 68 65 20 78 43 72 65 61 74 65 20 6d 65 74   the xCreate met
2dde0 68 6f 64 0a 2a 2a 20 66 6f 72 20 74 68 61 74 20  hod.** for that 
2ddf0 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
2de00 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20 20 72  P_VCreate: {.  r
2de10 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43  c = sqlite3VtabC
2de20 61 6c 6c 43 72 65 61 74 65 28 64 62 2c 20 70 4f  allCreate(db, pO
2de30 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
2de40 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  , &p->zErrMsg);.
2de50 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2de60 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2de70 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2de80 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2de90 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2dea0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44  LE./* Opcode: VD
2deb0 65 73 74 72 6f 79 20 50 31 20 2a 20 2a 20 50 34  estroy P1 * * P4
2dec0 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74   *.**.** P4 is t
2ded0 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72  he name of a vir
2dee0 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61  tual table in da
2def0 74 61 62 61 73 65 20 50 31 2e 20 20 43 61 6c 6c  tabase P1.  Call
2df00 20 74 68 65 20 78 44 65 73 74 72 6f 79 20 6d 65   the xDestroy me
2df10 74 68 6f 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20  thod.** of that 
2df20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
2df30 50 5f 56 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20  P_VDestroy: {.  
2df40 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
2df50 3d 20 32 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 2;.  rc = sqli
2df60 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72  te3VtabCallDestr
2df70 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  oy(db, pOp->p1, 
2df80 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 70 2d  pOp->p4.z);.  p-
2df90 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
2dfa0 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  0;.  break;.}.#e
2dfb0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2dfc0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2dfd0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
2dfe0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2dff0 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
2e000 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34   VOpen P1 * * P4
2e010 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61   *.**.** P4 is a
2e020 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69   pointer to a vi
2e030 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65  rtual table obje
2e040 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76  ct, an sqlite3_v
2e050 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  tab structure..*
2e060 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72  * P1 is a cursor
2e070 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f   number.  This o
2e080 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75  pcode opens a cu
2e090 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74  rsor to the virt
2e0a0 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64  ual.** table and
2e0b0 20 73 74 6f 72 65 73 20 74 68 61 74 20 63 75 72   stores that cur
2e0c0 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61  sor in P1..*/.ca
2e0d0 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20  se OP_VOpen: {. 
2e0e0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
2e0f0 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
2e100 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43  b_cursor *pVtabC
2e110 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33  ursor;.  sqlite3
2e120 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
2e130 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
2e140 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65  pModule;..  asse
2e150 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
2e160 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a   );.  pCur = 0;.
2e170 20 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20    pVtabCursor = 
2e180 30 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  0;.  pVtab = pOp
2e190 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61  ->p4.pVtab->pVta
2e1a0 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28  b;.  pModule = (
2e1b0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
2e1c0 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b  )pVtab->pModule;
2e1d0 0a 20 20 61 73 73 65 72 74 28 70 56 74 61 62 20  .  assert(pVtab 
2e1e0 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a 20 20 72  && pModule);.  r
2e1f0 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70  c = pModule->xOp
2e200 65 6e 28 70 56 74 61 62 2c 20 26 70 56 74 61 62  en(pVtab, &pVtab
2e210 43 75 72 73 6f 72 29 3b 0a 20 20 73 71 6c 69 74  Cursor);.  sqlit
2e220 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
2e230 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
2e240 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72  if( SQLITE_OK==r
2e250 63 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74  c ){.    /* Init
2e260 69 61 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f 76  ialize sqlite3_v
2e270 74 61 62 5f 63 75 72 73 6f 72 20 62 61 73 65 20  tab_cursor base 
2e280 63 6c 61 73 73 20 2a 2f 0a 20 20 20 20 70 56 74  class */.    pVt
2e290 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 20  abCursor->pVtab 
2e2a0 3d 20 70 56 74 61 62 3b 0a 0a 20 20 20 20 2f 2a  = pVtab;..    /*
2e2b0 20 49 6e 69 74 69 61 6c 69 7a 65 20 76 64 62 65   Initialize vdbe
2e2c0 20 63 75 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a   cursor object *
2e2d0 2f 0a 20 20 20 20 70 43 75 72 20 3d 20 61 6c 6c  /.    pCur = all
2e2e0 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
2e2f0 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 30  Op->p1, 0, -1, 0
2e300 29 3b 0a 20 20 20 20 69 66 28 20 70 43 75 72 20  );.    if( pCur 
2e310 29 7b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70  ){.      pCur->p
2e320 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70 56 74  VtabCursor = pVt
2e330 61 62 43 75 72 73 6f 72 3b 0a 20 20 20 20 7d 65  abCursor;.    }e
2e340 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 6d  lse{.      db->m
2e350 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
2e360 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e  .      pModule->
2e370 78 43 6c 6f 73 65 28 70 56 74 61 62 43 75 72 73  xClose(pVtabCurs
2e380 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  or);.    }.  }. 
2e390 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2e3a0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2e3b0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2e3c0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2e3d0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2e3e0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69  E./* Opcode: VFi
2e3f0 6c 74 65 72 20 50 31 20 50 32 20 50 33 20 50 34  lter P1 P2 P3 P4
2e400 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2e410 69 50 6c 61 6e 3d 72 5b 50 33 5d 20 7a 50 6c 61  iPlan=r[P3] zPla
2e420 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20  n='P4'.**.** P1 
2e430 69 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e  is a cursor open
2e440 65 64 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20  ed using VOpen. 
2e450 20 50 32 20 69 73 20 61 6e 20 61 64 64 72 65 73   P2 is an addres
2e460 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a  s to jump to if.
2e470 2a 2a 20 74 68 65 20 66 69 6c 74 65 72 65 64 20  ** the filtered 
2e480 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d  result set is em
2e490 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  pty..**.** P4 is
2e4a0 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20   either NULL or 
2e4b0 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 77 61  a string that wa
2e4c0 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74  s generated by t
2e4d0 68 65 20 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a  he xBestIndex.**
2e4e0 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d   method of the m
2e4f0 6f 64 75 6c 65 2e 20 20 54 68 65 20 69 6e 74 65  odule.  The inte
2e500 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
2e510 65 20 50 34 20 73 74 72 69 6e 67 20 69 73 20 6c  e P4 string is l
2e520 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f  eft.** to the mo
2e530 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
2e540 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ion..**.** This 
2e550 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
2e560 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f  he xFilter metho
2e570 64 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c  d on the virtual
2e580 20 74 61 62 6c 65 20 73 70 65 63 69 66 69 65 64   table specified
2e590 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54 68 65 20  .** by P1.  The 
2e5a0 69 6e 74 65 67 65 72 20 71 75 65 72 79 20 70 6c  integer query pl
2e5b0 61 6e 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  an parameter to 
2e5c0 78 46 69 6c 74 65 72 20 69 73 20 73 74 6f 72 65  xFilter is store
2e5d0 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a  d in register.**
2e5e0 20 50 33 2e 20 52 65 67 69 73 74 65 72 20 50 33   P3. Register P3
2e5f0 2b 31 20 73 74 6f 72 65 73 20 74 68 65 20 61 72  +1 stores the ar
2e600 67 63 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  gc parameter to 
2e610 62 65 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  be passed to the
2e620 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65 74 68  .** xFilter meth
2e630 6f 64 2e 20 52 65 67 69 73 74 65 72 73 20 50 33  od. Registers P3
2e640 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61 72  +2..P3+1+argc ar
2e650 65 20 74 68 65 20 61 72 67 63 0a 2a 2a 20 61 64  e the argc.** ad
2e660 64 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74  ditional paramet
2e670 65 72 73 20 77 68 69 63 68 20 61 72 65 20 70 61  ers which are pa
2e680 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74  ssed to.** xFilt
2e690 65 72 20 61 73 20 61 72 67 76 2e 20 52 65 67 69  er as argv. Regi
2e6a0 73 74 65 72 20 50 33 2b 32 20 62 65 63 6f 6d 65  ster P3+2 become
2e6b0 73 20 61 72 67 76 5b 30 5d 20 77 68 65 6e 20 70  s argv[0] when p
2e6c0 61 73 73 65 64 20 74 6f 20 78 46 69 6c 74 65 72  assed to xFilter
2e6d0 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69  ..**.** A jump i
2e6e0 73 20 6d 61 64 65 20 74 6f 20 50 32 20 69 66 20  s made to P2 if 
2e6f0 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 61  the result set a
2e700 66 74 65 72 20 66 69 6c 74 65 72 69 6e 67 20 77  fter filtering w
2e710 6f 75 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a  ould be empty..*
2e720 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c 74 65  /.case OP_VFilte
2e730 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a  r: {   /* jump *
2e740 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20  /.  int nArg;.  
2e750 69 6e 74 20 69 51 75 65 72 79 3b 0a 20 20 63 6f  int iQuery;.  co
2e760 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
2e770 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d  le *pModule;.  M
2e780 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65  em *pQuery;.  Me
2e790 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c 69  m *pArgc;.  sqli
2e7a0 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
2e7b0 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20  *pVtabCursor;.  
2e7c0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
2e7d0 74 61 62 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  tab;.  VdbeCurso
2e7e0 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20 72  r *pCur;.  int r
2e7f0 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d  es;.  int i;.  M
2e800 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70  em **apArg;..  p
2e810 51 75 65 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f  Query = &aMem[pO
2e820 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63 20  p->p3];.  pArgc 
2e830 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20  = &pQuery[1];.  
2e840 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
2e850 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2e860 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
2e870 51 75 65 72 79 29 20 29 3b 0a 20 20 52 45 47 49  Query) );.  REGI
2e880 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
2e890 70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20 61  p3, pQuery);.  a
2e8a0 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74  ssert( pCur->pVt
2e8b0 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 56  abCursor );.  pV
2e8c0 74 61 62 43 75 72 73 6f 72 20 3d 20 70 43 75 72  tabCursor = pCur
2e8d0 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20  ->pVtabCursor;. 
2e8e0 20 70 56 74 61 62 20 3d 20 70 56 74 61 62 43 75   pVtab = pVtabCu
2e8f0 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
2e900 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
2e910 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47  pModule;..  /* G
2e920 72 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e 75  rab the index nu
2e930 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20 70 61  mber and argc pa
2e940 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61 73  rameters */.  as
2e950 73 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e 66  sert( (pQuery->f
2e960 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30  lags&MEM_Int)!=0
2e970 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67 73   && pArgc->flags
2e980 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e  ==MEM_Int );.  n
2e990 41 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67 63  Arg = (int)pArgc
2e9a0 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79 20  ->u.i;.  iQuery 
2e9b0 3d 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e 75  = (int)pQuery->u
2e9c0 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  .i;..  /* Invoke
2e9d0 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74   the xFilter met
2e9e0 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 72  hod */.  {.    r
2e9f0 65 73 20 3d 20 30 3b 0a 20 20 20 20 61 70 41 72  es = 0;.    apAr
2ea00 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20  g = p->apArg;.  
2ea10 20 20 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e    for(i = 0; i<n
2ea20 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
2ea30 20 61 70 41 72 67 5b 69 5d 20 3d 20 26 70 41 72   apArg[i] = &pAr
2ea40 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20 20 20 73  gc[i+1];.      s
2ea50 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f  qlite3VdbeMemSto
2ea60 72 65 54 79 70 65 28 61 70 41 72 67 5b 69 5d 29  reType(apArg[i])
2ea70 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 2d 3e  ;.    }..    p->
2ea80 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 31  inVtabMethod = 1
2ea90 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75  ;.    rc = pModu
2eaa0 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56 74 61  le->xFilter(pVta
2eab0 62 43 75 72 73 6f 72 2c 20 69 51 75 65 72 79 2c  bCursor, iQuery,
2eac0 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67   pOp->p4.z, nArg
2ead0 2c 20 61 70 41 72 67 29 3b 0a 20 20 20 20 70 2d  , apArg);.    p-
2eae0 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
2eaf0 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  0;.    sqlite3Vt
2eb00 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
2eb10 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66  , pVtab);.    if
2eb20 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
2eb30 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 70  ){.      res = p
2eb40 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56 74  Module->xEof(pVt
2eb50 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d  abCursor);.    }
2eb60 0a 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 7b  ..    if( res ){
2eb70 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
2eb80 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20  >p2 - 1;.    }. 
2eb90 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52   }.  pCur->nullR
2eba0 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61 6b  ow = 0;..  break
2ebb0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2ebc0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2ebd0 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
2ebe0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
2ebf0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
2ec00 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50  pcode: VColumn P
2ec10 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
2ec20 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 76  ynopsis: r[P3]=v
2ec30 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a 2a 2a  column(P2).**.**
2ec40 20 53 74 6f 72 65 20 74 68 65 20 76 61 6c 75 65   Store the value
2ec50 20 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63 6f   of the P2-th co
2ec60 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72  lumn of.** the r
2ec70 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74 75 61  ow of the virtua
2ec80 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  l-table that the
2ec90 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72 20 69   .** P1 cursor i
2eca0 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e  s pointing to in
2ecb0 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  to register P3..
2ecc0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75  */.case OP_VColu
2ecd0 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  mn: {.  sqlite3_
2ece0 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
2ecf0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
2ed00 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
2ed10 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71  Mem *pDest;.  sq
2ed20 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43  lite3_context sC
2ed30 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43  ontext;..  VdbeC
2ed40 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d  ursor *pCur = p-
2ed50 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2ed60 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d  .  assert( pCur-
2ed70 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a  >pVtabCursor );.
2ed80 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2ed90 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
2eda0 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
2edb0 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20  sor) );.  pDest 
2edc0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2edd0 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
2ede0 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a  ange(p, pDest);.
2edf0 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c    if( pCur->null
2ee00 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  Row ){.    sqlit
2ee10 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
2ee20 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65  (pDest);.    bre
2ee30 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20  ak;.  }.  pVtab 
2ee40 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  = pCur->pVtabCur
2ee50 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  sor->pVtab;.  pM
2ee60 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
2ee70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74  Module;.  assert
2ee80 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75  ( pModule->xColu
2ee90 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26  mn );.  memset(&
2eea0 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a  sContext, 0, siz
2eeb0 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a  eof(sContext));.
2eec0 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74  .  /* The output
2eed0 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64   cell may alread
2eee0 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72 20  y have a buffer 
2eef0 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a  allocated. Move.
2ef00 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74    ** the current
2ef10 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 73 43 6f   contents to sCo
2ef20 6e 74 65 78 74 2e 73 20 73 6f 20 69 6e 20 63 61  ntext.s so in ca
2ef30 73 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63  se the user-func
2ef40 74 69 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e 20 75  tion .  ** can u
2ef50 73 65 20 74 68 65 20 61 6c 72 65 61 64 79 20 61  se the already a
2ef60 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 20  llocated buffer 
2ef70 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63  instead of alloc
2ef80 61 74 69 6e 67 20 61 20 0a 20 20 2a 2a 20 6e 65  ating a .  ** ne
2ef90 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71  w one..  */.  sq
2efa0 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
2efb0 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 70 44  (&sContext.s, pD
2efc0 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79  est);.  MemSetTy
2efd0 70 65 46 6c 61 67 28 26 73 43 6f 6e 74 65 78 74  peFlag(&sContext
2efe0 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a  .s, MEM_Null);..
2eff0 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
2f000 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56  xColumn(pCur->pV
2f010 74 61 62 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e  tabCursor, &sCon
2f020 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a  text, pOp->p2);.
2f030 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
2f040 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
2f050 61 62 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74  ab);.  if( sCont
2f060 65 78 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20  ext.isError ){. 
2f070 20 20 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74     rc = sContext
2f080 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20  .isError;.  }.. 
2f090 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73   /* Copy the res
2f0a0 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
2f0b0 69 6f 6e 20 74 6f 20 74 68 65 20 50 33 20 72 65  ion to the P3 re
2f0c0 67 69 73 74 65 72 2e 20 57 65 0a 20 20 2a 2a 20  gister. We.  ** 
2f0d0 64 6f 20 74 68 69 73 20 72 65 67 61 72 64 6c 65  do this regardle
2f0e0 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
2f0f0 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 6f 63   not an error oc
2f100 63 75 72 72 65 64 20 74 6f 20 65 6e 73 75 72 65  curred to ensure
2f110 20 61 6e 79 0a 20 20 2a 2a 20 64 79 6e 61 6d 69   any.  ** dynami
2f120 63 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 20  c allocation in 
2f130 73 43 6f 6e 74 65 78 74 2e 73 20 28 61 20 4d 65  sContext.s (a Me
2f140 6d 20 73 74 72 75 63 74 29 20 69 73 20 20 72 65  m struct) is  re
2f150 6c 65 61 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 73  leased..  */.  s
2f160 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
2f170 45 6e 63 6f 64 69 6e 67 28 26 73 43 6f 6e 74 65  Encoding(&sConte
2f180 78 74 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  xt.s, encoding);
2f190 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2f1a0 6d 4d 6f 76 65 28 70 44 65 73 74 2c 20 26 73 43  mMove(pDest, &sC
2f1b0 6f 6e 74 65 78 74 2e 73 29 3b 0a 20 20 52 45 47  ontext.s);.  REG
2f1c0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
2f1d0 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55  >p3, pDest);.  U
2f1e0 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
2f1f0 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66  ZE(pDest);..  if
2f200 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
2f210 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b  TooBig(pDest) ){
2f220 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
2f230 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  g;.  }.  break;.
2f240 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2f250 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2f260 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2f270 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2f280 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2f290 6f 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32  ode: VNext P1 P2
2f2a0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76   * * *.**.** Adv
2f2b0 61 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61 62  ance virtual tab
2f2c0 6c 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78  le P1 to the nex
2f2d0 74 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73  t row in its res
2f2e0 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a  ult set and.** j
2f2f0 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
2f300 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74  on P2.  Or, if t
2f310 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
2f320 20 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20   has reached.** 
2f330 74 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72  the end of its r
2f340 65 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20  esult set, then 
2f350 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
2f360 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
2f370 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
2f380 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a  _VNext: {   /* j
2f390 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ump */.  sqlite3
2f3a0 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
2f3b0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
2f3c0 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
2f3d0 20 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65   int res;.  Vdbe
2f3e0 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20  Cursor *pCur;.. 
2f3f0 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72   res = 0;.  pCur
2f400 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2f410 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2f420 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2f430 72 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d  r );.  if( pCur-
2f440 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
2f450 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74  break;.  }.  pVt
2f460 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62  ab = pCur->pVtab
2f470 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
2f480 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
2f490 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
2f4a0 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e  ert( pModule->xN
2f4b0 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76  ext );..  /* Inv
2f4c0 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29 20  oke the xNext() 
2f4d0 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f  method of the mo
2f4e0 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e  dule. There is n
2f4f0 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20  o way for the.  
2f500 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d  ** underlying im
2f510 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
2f520 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  return an error 
2f530 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75  if one occurs du
2f540 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28  ring.  ** xNext(
2f550 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61  ). Instead, if a
2f560 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20  n error occurs, 
2f570 74 72 75 65 20 69 73 20 72 65 74 75 72 6e 65 64  true is returned
2f580 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61   (indicating tha
2f590 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20  t .  ** data is 
2f5a0 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74  available) and t
2f5b0 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65  he error code re
2f5c0 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c  turned when xCol
2f5d0 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65  umn or.  ** some
2f5e0 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73   other method is
2f5f0 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e   next invoked on
2f600 20 74 68 65 20 73 61 76 65 20 76 69 72 74 75 61   the save virtua
2f610 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a  l table cursor..
2f620 20 20 2a 2f 0a 20 20 70 2d 3e 69 6e 56 74 61 62    */.  p->inVtab
2f630 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72 63  Method = 1;.  rc
2f640 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78   = pModule->xNex
2f650 74 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  t(pCur->pVtabCur
2f660 73 6f 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61  sor);.  p->inVta
2f670 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 73  bMethod = 0;.  s
2f680 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
2f690 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
2f6a0 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
2f6b0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73  TE_OK ){.    res
2f6c0 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66   = pModule->xEof
2f6d0 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73  (pCur->pVtabCurs
2f6e0 6f 72 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  or);.  }..  if( 
2f6f0 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49  !res ){.    /* I
2f700 66 20 74 68 65 72 65 20 69 73 20 64 61 74 61 2c  f there is data,
2f710 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20   jump to P2 */. 
2f720 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
2f730 2d 20 31 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  - 1;.  }.  goto 
2f740 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
2f750 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  upt;.}.#endif /*
2f760 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2f770 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
2f780 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2f790 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
2f7a0 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d  * Opcode: VRenam
2f7b0 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  e P1 * * P4 *.**
2f7c0 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
2f7d0 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ter to a virtual
2f7e0 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61   table object, a
2f7f0 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
2f800 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69  tructure..** Thi
2f810 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
2f820 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
2f830 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f  ng xRename metho
2f840 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  d. The value.** 
2f850 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
2f860 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20  s passed as the 
2f870 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74  zName argument t
2f880 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65  o the xRename me
2f890 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  thod..*/.case OP
2f8a0 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71  _VRename: {.  sq
2f8b0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
2f8c0 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b  b;.  Mem *pName;
2f8d0 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d  ..  pVtab = pOp-
2f8e0 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62  >p4.pVtab->pVtab
2f8f0 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d 65  ;.  pName = &aMe
2f900 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
2f910 73 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f  sert( pVtab->pMo
2f920 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b  dule->xRename );
2f930 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  .  assert( memIs
2f940 56 61 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b 0a  Valid(pName) );.
2f950 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
2f960 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 52 45  dOnly==0 );.  RE
2f970 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
2f980 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20  ->p1, pName);.  
2f990 61 73 73 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66  assert( pName->f
2f9a0 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29  lags & MEM_Str )
2f9b0 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e  ;.  testcase( pN
2f9c0 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45  ame->enc==SQLITE
2f9d0 5f 55 54 46 38 20 29 3b 0a 20 20 74 65 73 74 63  _UTF8 );.  testc
2f9e0 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d  ase( pName->enc=
2f9f0 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20  =SQLITE_UTF16BE 
2fa00 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
2fa10 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54  Name->enc==SQLIT
2fa20 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20 72  E_UTF16LE );.  r
2fa30 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
2fa40 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4e  hangeEncoding(pN
2fa50 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  ame, SQLITE_UTF8
2fa60 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
2fa70 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63  ITE_OK ){.    rc
2fa80 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
2fa90 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62  e->xRename(pVtab
2faa0 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 20  , pName->z);.   
2fab0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
2fac0 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
2fad0 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  b);.    p->expir
2fae0 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72  ed = 0;.  }.  br
2faf0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
2fb00 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2fb10 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2fb20 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61  /* Opcode: VUpda
2fb30 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  te P1 P2 P3 P4 P
2fb40 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 64  5.** Synopsis: d
2fb50 61 74 61 3d 72 5b 50 33 40 50 32 5d 0a 2a 2a 0a  ata=r[P3@P2].**.
2fb60 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
2fb70 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
2fb80 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
2fb90 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
2fba0 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73  ructure..** This
2fbb0 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
2fbc0 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
2fbd0 67 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64  g xUpdate method
2fbe0 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61  . P2 values.** a
2fbf0 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65  re contiguous me
2fc00 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72 74  mory cells start
2fc10 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61 73  ing at P3 to pas
2fc20 73 20 74 6f 20 74 68 65 20 78 55 70 64 61 74 65  s to the xUpdate
2fc30 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e   .** invocation.
2fc40 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   The value in re
2fc50 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31 29  gister (P3+P2-1)
2fc60 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
2fc70 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65  the .** p2th ele
2fc80 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67 76  ment of the argv
2fc90 20 61 72 72 61 79 20 70 61 73 73 65 64 20 74 6f   array passed to
2fca0 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20   xUpdate..**.** 
2fcb0 54 68 65 20 78 55 70 64 61 74 65 20 6d 65 74 68  The xUpdate meth
2fcc0 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c  od will do a DEL
2fcd0 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52 54  ETE or an INSERT
2fce0 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65   or both..** The
2fcf0 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74   argv[0] element
2fd00 20 28 77 68 69 63 68 20 63 6f 72 72 65 73 70 6f   (which correspo
2fd10 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65  nds to memory ce
2fd20 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68 65  ll P3).** is the
2fd30 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77 20   rowid of a row 
2fd40 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20 61  to delete.  If a
2fd50 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74  rgv[0] is NULL t
2fd60 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74  hen no .** delet
2fd70 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68 65  ion occurs.  The
2fd80 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74   argv[1] element
2fd90 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
2fda0 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77   the new .** row
2fdb0 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 20 4e  .  This can be N
2fdc0 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65 20  ULL to have the 
2fdd0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 65  virtual table se
2fde0 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a  lect the new .**
2fdf0 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65 6c   rowid for itsel
2fe00 66 2e 20 20 54 68 65 20 73 75 62 73 65 71 75 65  f.  The subseque
2fe10 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74  nt elements in t
2fe20 68 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a 2a  he array are .**
2fe30 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 63   the values of c
2fe40 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65  olumns in the ne
2fe50 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  w row..**.** If 
2fe60 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e  P2==1 then no in
2fe70 73 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d 65  sert is performe
2fe80 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20 74  d.  argv[0] is t
2fe90 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61  he rowid of.** a
2fea0 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a   row to delete..
2feb0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62 6f  **.** P1 is a bo
2fec0 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20 69  olean flag. If i
2fed0 74 20 69 73 20 73 65 74 20 74 6f 20 74 72 75 65  t is set to true
2fee0 20 61 6e 64 20 74 68 65 20 78 55 70 64 61 74 65   and the xUpdate
2fef0 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63   call.** is succ
2ff00 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68 65  essful, then the
2ff10 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   value returned 
2ff20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  by sqlite3_last_
2ff30 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 0a  insert_rowid() .
2ff40 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  ** is set to the
2ff50 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f   value of the ro
2ff60 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77 20  wid for the row 
2ff70 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a  just inserted..*
2ff80 2a 0a 2a 2a 20 50 35 20 69 73 20 74 68 65 20 65  *.** P5 is the e
2ff90 72 72 6f 72 20 61 63 74 69 6f 6e 73 20 28 4f 45  rror actions (OE
2ffa0 5f 52 65 70 6c 61 63 65 2c 20 4f 45 5f 46 61 69  _Replace, OE_Fai
2ffb0 6c 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 65 74  l, OE_Ignore, et
2ffc0 63 29 20 74 6f 0a 2a 2a 20 61 70 70 6c 79 20 69  c) to.** apply i
2ffd0 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20 61 20  n the case of a 
2ffe0 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 75  constraint failu
2fff0 72 65 20 6f 6e 20 61 6e 20 69 6e 73 65 72 74 20  re on an insert 
30000 6f 72 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61  or update..*/.ca
30010 73 65 20 4f 50 5f 56 55 70 64 61 74 65 3a 20 7b  se OP_VUpdate: {
30020 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
30030 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65  *pVtab;.  sqlite
30040 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
30050 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20  e;.  int nArg;. 
30060 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65   int i;.  sqlite
30070 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20 20  _int64 rowid;.  
30080 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 20 20 4d  Mem **apArg;.  M
30090 65 6d 20 2a 70 58 3b 0a 0a 20 20 61 73 73 65 72  em *pX;..  asser
300a0 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 31 20 20 20  t( pOp->p2==1   
300b0 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d       || pOp->p5=
300c0 3d 4f 45 5f 46 61 69 6c 20 20 20 7c 7c 20 70 4f  =OE_Fail   || pO
300d0 70 2d 3e 70 35 3d 3d 4f 45 5f 52 6f 6c 6c 62 61  p->p5==OE_Rollba
300e0 63 6b 20 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f  ck .       || pO
300f0 70 2d 3e 70 35 3d 3d 4f 45 5f 41 62 6f 72 74 20  p->p5==OE_Abort 
30100 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49  || pOp->p5==OE_I
30110 67 6e 6f 72 65 20 7c 7c 20 70 4f 70 2d 3e 70 35  gnore || pOp->p5
30120 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 0a 20 20 29  ==OE_Replace.  )
30130 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
30140 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
30150 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
30160 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20  pVtab->pVtab;.  
30170 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74  pModule = (sqlit
30180 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61  e3_module *)pVta
30190 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41  b->pModule;.  nA
301a0 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  rg = pOp->p2;.  
301b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
301c0 79 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a  ype==P4_VTAB );.
301d0 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 4d 6f    if( ALWAYS(pMo
301e0 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 29 20 29  dule->xUpdate) )
301f0 7b 0a 20 20 20 20 75 38 20 76 74 61 62 4f 6e 43  {.    u8 vtabOnC
30200 6f 6e 66 6c 69 63 74 20 3d 20 64 62 2d 3e 76 74  onflict = db->vt
30210 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20  abOnConflict;.  
30220 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41    apArg = p->apA
30230 72 67 3b 0a 20 20 20 20 70 58 20 3d 20 26 61 4d  rg;.    pX = &aM
30240 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
30250 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67   for(i=0; i<nArg
30260 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73  ; i++){.      as
30270 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
30280 28 70 58 29 20 29 3b 0a 20 20 20 20 20 20 6d 65  (pX) );.      me
30290 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
302a0 2c 20 70 58 29 3b 0a 20 20 20 20 20 20 73 71 6c  , pX);.      sql
302b0 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65  ite3VdbeMemStore
302c0 54 79 70 65 28 70 58 29 3b 0a 20 20 20 20 20 20  Type(pX);.      
302d0 61 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20  apArg[i] = pX;. 
302e0 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d       pX++;.    }
302f0 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43  .    db->vtabOnC
30300 6f 6e 66 6c 69 63 74 20 3d 20 70 4f 70 2d 3e 70  onflict = pOp->p
30310 35 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64  5;.    rc = pMod
30320 75 6c 65 2d 3e 78 55 70 64 61 74 65 28 70 56 74  ule->xUpdate(pVt
30330 61 62 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 2c  ab, nArg, apArg,
30340 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 64 62   &rowid);.    db
30350 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  ->vtabOnConflict
30360 20 3d 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63   = vtabOnConflic
30370 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  t;.    sqlite3Vt
30380 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
30390 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66  , pVtab);.    if
303a0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
303b0 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  && pOp->p1 ){.  
303c0 20 20 20 20 61 73 73 65 72 74 28 20 6e 41 72 67      assert( nArg
303d0 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d 20 26  >1 && apArg[0] &
303e0 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61  & (apArg[0]->fla
303f0 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a  gs&MEM_Null) );.
30400 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f        db->lastRo
30410 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 20  wid = lastRowid 
30420 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20  = rowid;.    }. 
30430 20 20 20 69 66 28 20 28 72 63 26 30 78 66 66 29     if( (rc&0xff)
30440 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  ==SQLITE_CONSTRA
30450 49 4e 54 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70  INT && pOp->p4.p
30460 56 74 61 62 2d 3e 62 43 6f 6e 73 74 72 61 69 6e  Vtab->bConstrain
30470 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  t ){.      if( p
30480 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72  Op->p5==OE_Ignor
30490 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  e ){.        rc 
304a0 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
304b0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
304c0 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e    p->errorAction
304d0 20 3d 20 28 28 70 4f 70 2d 3e 70 35 3d 3d 4f 45   = ((pOp->p5==OE
304e0 5f 52 65 70 6c 61 63 65 29 20 3f 20 4f 45 5f 41  _Replace) ? OE_A
304f0 62 6f 72 74 20 3a 20 70 4f 70 2d 3e 70 35 29 3b  bort : pOp->p5);
30500 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
30510 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 43 68  se{.      p->nCh
30520 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  ange++;.    }.  
30530 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
30540 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
30550 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
30560 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c  */..#ifndef  SQL
30570 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
30580 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65  RAGMAS./* Opcode
30590 3a 20 50 61 67 65 63 6f 75 6e 74 20 50 31 20 50  : Pagecount P1 P
305a0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72  2 * * *.**.** Wr
305b0 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ite the current 
305c0 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
305d0 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 74  in database P1 t
305e0 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32  o memory cell P2
305f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67  ..*/.case OP_Pag
30600 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20  ecount: {       
30610 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
30620 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75  release */.  pOu
30630 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33  t->u.i = sqlite3
30640 42 74 72 65 65 4c 61 73 74 50 61 67 65 28 64 62  BtreeLastPage(db
30650 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
30660 42 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  Bt);.  break;.}.
30670 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66  #endif...#ifndef
30680 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41    SQLITE_OMIT_PA
30690 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f  GER_PRAGMAS./* O
306a0 70 63 6f 64 65 3a 20 4d 61 78 50 67 63 6e 74 20  pcode: MaxPgcnt 
306b0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
306c0 2a 2a 20 54 72 79 20 74 6f 20 73 65 74 20 74 68  ** Try to set th
306d0 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63  e maximum page c
306e0 6f 75 6e 74 20 66 6f 72 20 64 61 74 61 62 61 73  ount for databas
306f0 65 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75  e P1 to the valu
30700 65 20 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e  e in P3..** Do n
30710 6f 74 20 6c 65 74 20 74 68 65 20 6d 61 78 69 6d  ot let the maxim
30720 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66 61  um page count fa
30730 6c 6c 20 62 65 6c 6f 77 20 74 68 65 20 63 75 72  ll below the cur
30740 72 65 6e 74 20 70 61 67 65 20 63 6f 75 6e 74 20  rent page count 
30750 61 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63 68  and.** do not ch
30760 61 6e 67 65 20 74 68 65 20 6d 61 78 69 6d 75 6d  ange the maximum
30770 20 70 61 67 65 20 63 6f 75 6e 74 20 76 61 6c 75   page count valu
30780 65 20 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a  e if P3==0..**.*
30790 2a 20 53 74 6f 72 65 20 74 68 65 20 6d 61 78 69  * Store the maxi
307a0 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 61  mum page count a
307b0 66 74 65 72 20 74 68 65 20 63 68 61 6e 67 65 20  fter the change 
307c0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
307d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 78 50 67  */.case OP_MaxPg
307e0 63 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  cnt: {          
307f0 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
30800 65 61 73 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ease */.  unsign
30810 65 64 20 69 6e 74 20 6e 65 77 4d 61 78 3b 0a 20  ed int newMax;. 
30820 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20   Btree *pBt;..  
30830 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
30840 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 6e 65  p->p1].pBt;.  ne
30850 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69 66 28 20  wMax = 0;.  if( 
30860 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 6e  pOp->p3 ){.    n
30870 65 77 4d 61 78 20 3d 20 73 71 6c 69 74 65 33 42  ewMax = sqlite3B
30880 74 72 65 65 4c 61 73 74 50 61 67 65 28 70 42 74  treeLastPage(pBt
30890 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 77 4d 61  );.    if( newMa
308a0 78 20 3c 20 28 75 6e 73 69 67 6e 65 64 29 70 4f  x < (unsigned)pO
308b0 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61 78 20 3d  p->p3 ) newMax =
308c0 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e   (unsigned)pOp->
308d0 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  p3;.  }.  pOut->
308e0 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72  u.i = sqlite3Btr
308f0 65 65 4d 61 78 50 61 67 65 43 6f 75 6e 74 28 70  eeMaxPageCount(p
30900 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a 20 20 62  Bt, newMax);.  b
30910 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
30920 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
30930 4f 4d 49 54 5f 54 52 41 43 45 0a 2f 2a 20 4f 70  OMIT_TRACE./* Op
30940 63 6f 64 65 3a 20 54 72 61 63 65 20 2a 20 2a 20  code: Trace * * 
30950 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20  * P4 *.**.** If 
30960 74 72 61 63 69 6e 67 20 69 73 20 65 6e 61 62 6c  tracing is enabl
30970 65 64 20 28 62 79 20 74 68 65 20 73 71 6c 69 74  ed (by the sqlit
30980 65 33 5f 74 72 61 63 65 28 29 29 20 69 6e 74 65  e3_trace()) inte
30990 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20 74  rface, then.** t
309a0 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20  he UTF-8 string 
309b0 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50 34 20  contained in P4 
309c0 69 73 20 65 6d 69 74 74 65 64 20 6f 6e 20 74 68  is emitted on th
309d0 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b  e trace callback
309e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61  ..*/.case OP_Tra
309f0 63 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 54  ce: {.  char *zT
30a00 72 61 63 65 3b 0a 20 20 63 68 61 72 20 2a 7a 3b  race;.  char *z;
30a10 0a 0a 20 20 69 66 28 20 64 62 2d 3e 78 54 72 61  ..  if( db->xTra
30a20 63 65 0a 20 20 20 26 26 20 21 70 2d 3e 64 6f 69  ce.   && !p->doi
30a30 6e 67 52 65 72 75 6e 0a 20 20 20 26 26 20 28 7a  ngRerun.   && (z
30a40 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34  Trace = (pOp->p4
30a50 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a  .z ? pOp->p4.z :
30a60 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20   p->zSql))!=0.  
30a70 29 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74  ){.    z = sqlit
30a80 65 33 56 64 62 65 45 78 70 61 6e 64 53 71 6c 28  e3VdbeExpandSql(
30a90 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20  p, zTrace);.    
30aa0 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70  db->xTrace(db->p
30ab0 54 72 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20 20  TraceArg, z);.  
30ac0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
30ad0 64 62 2c 20 7a 29 3b 0a 20 20 7d 0a 23 69 66 64  db, z);.  }.#ifd
30ae0 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 46 43  ef SQLITE_USE_FC
30af0 4e 54 4c 5f 54 52 41 43 45 0a 20 20 7a 54 72 61  NTL_TRACE.  zTra
30b00 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20  ce = (pOp->p4.z 
30b10 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d  ? pOp->p4.z : p-
30b20 3e 7a 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a 54  >zSql);.  if( zT
30b30 72 61 63 65 20 29 7b 0a 20 20 20 20 69 6e 74 20  race ){.    int 
30b40 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  i;.    for(i=0; 
30b50 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b  i<db->nDb; i++){
30b60 0a 20 20 20 20 20 20 69 66 28 20 4d 41 53 4b 42  .      if( MASKB
30b70 49 54 28 69 29 20 26 20 70 2d 3e 62 74 72 65 65  IT(i) & p->btree
30b80 4d 61 73 6b 29 3d 3d 30 20 29 20 63 6f 6e 74 69  Mask)==0 ) conti
30b90 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  nue;.      sqlit
30ba0 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28  e3_file_control(
30bb0 64 62 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a  db, db->aDb[i].z
30bc0 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 46 43 4e  Name, SQLITE_FCN
30bd0 54 4c 5f 54 52 41 43 45 2c 20 7a 54 72 61 63 65  TL_TRACE, zTrace
30be0 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e  );.    }.  }.#en
30bf0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53  dif /* SQLITE_US
30c00 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 20 2a 2f  E_FCNTL_TRACE */
30c10 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
30c20 45 42 55 47 0a 20 20 69 66 28 20 28 64 62 2d 3e  EBUG.  if( (db->
30c30 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 53  flags & SQLITE_S
30c40 71 6c 54 72 61 63 65 29 21 3d 30 0a 20 20 20 26  qlTrace)!=0.   &
30c50 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f 70  & (zTrace = (pOp
30c60 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34  ->p4.z ? pOp->p4
30c70 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d  .z : p->zSql))!=
30c80 30 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  0.  ){.    sqlit
30c90 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 22 53  e3DebugPrintf("S
30ca0 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c  QL-trace: %s\n",
30cb0 20 7a 54 72 61 63 65 29 3b 0a 20 20 7d 0a 23 65   zTrace);.  }.#e
30cc0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44  ndif /* SQLITE_D
30cd0 45 42 55 47 20 2a 2f 0a 20 20 62 72 65 61 6b 3b  EBUG */.  break;
30ce0 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f  .}.#endif.../* O
30cf0 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20  pcode: Noop * * 
30d00 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e  * * *.**.** Do n
30d10 6f 74 68 69 6e 67 2e 20 20 54 68 69 73 20 69 6e  othing.  This in
30d20 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 66 74  struction is oft
30d30 65 6e 20 75 73 65 66 75 6c 20 61 73 20 61 20 6a  en useful as a j
30d40 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74 69  ump.** destinati
30d50 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65  on..*/./*.** The
30d60 20 6d 61 67 69 63 20 45 78 70 6c 61 69 6e 20 6f   magic Explain o
30d70 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20 69  pcode are only i
30d80 6e 73 65 72 74 65 64 20 77 68 65 6e 20 65 78 70  nserted when exp
30d90 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a 2a  lain==2 (which.*
30da0 2a 20 69 73 20 74 6f 20 73 61 79 20 77 68 65 6e  * is to say when
30db0 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45   the EXPLAIN QUE
30dc0 52 59 20 50 4c 41 4e 20 73 79 6e 74 61 78 20 69  RY PLAN syntax i
30dd0 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69 73  s used.).** This
30de0 20 6f 70 63 6f 64 65 20 72 65 63 6f 72 64 73 20   opcode records 
30df0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d  information from
30e00 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e 20   the optimizer. 
30e10 20 49 74 20 69 73 20 74 68 65 0a 2a 2a 20 74 68   It is the.** th
30e20 65 20 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d 6f  e same as a no-o
30e30 70 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 73  p.  This opcodes
30e40 6e 65 76 65 72 20 61 70 70 65 61 72 73 20 69 6e  never appears in
30e50 20 61 20 72 65 61 6c 20 56 4d 20 70 72 6f 67 72   a real VM progr
30e60 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a 20  am..*/.default: 
30e70 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  {          /* Th
30e80 69 73 20 69 73 20 72 65 61 6c 6c 79 20 4f 50 5f  is is really OP_
30e90 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70 6c  Noop and OP_Expl
30ea0 61 69 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ain */.  assert(
30eb0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
30ec0 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e 6f 70  _Noop || pOp->op
30ed0 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e  code==OP_Explain
30ee0 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
30ef0 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
30f00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30f10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30f20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
30f30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a  **************.*
30f40 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66 20 74  * The cases of t
30f50 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  he switch statem
30f60 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73 20 6c  ent above this l
30f70 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62  ine should all b
30f80 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62 79  e indented.** by
30f90 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 20   6 spaces.  But 
30fa0 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36 20  the left-most 6 
30fb0 73 70 61 63 65 73 20 68 61 76 65 20 62 65 65 6e  spaces have been
30fc0 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70 72   removed to impr
30fd0 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61 64 61  ove the.** reada
30fe0 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74 68  bility.  From th
30ff0 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e  is point on down
31000 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e 64  , the normal ind
31010 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73 20 61  entation rules a
31020 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e 0a  re.** restored..
31030 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31040 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31050 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31060 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31070 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20  *************/. 
31080 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 56 44 42     }..#ifdef VDB
31090 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b 0a  E_PROFILE.    {.
310a0 20 20 20 20 20 20 75 36 34 20 65 6c 61 70 73 65        u64 elapse
310b0 64 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d  d = sqlite3Hwtim
310c0 65 28 29 20 2d 20 73 74 61 72 74 3b 0a 20 20 20  e() - start;.   
310d0 20 20 20 70 4f 70 2d 3e 63 79 63 6c 65 73 20 2b     pOp->cycles +
310e0 3d 20 65 6c 61 70 73 65 64 3b 0a 20 20 20 20 20  = elapsed;.     
310f0 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 23 69 66   pOp->cnt++;.#if
31100 20 30 0a 20 20 20 20 20 20 20 20 66 70 72 69 6e   0.        fprin
31110 74 66 28 73 74 64 6f 75 74 2c 20 22 25 31 30 6c  tf(stdout, "%10l
31120 6c 75 20 22 2c 20 65 6c 61 70 73 65 64 29 3b 0a  lu ", elapsed);.
31130 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
31140 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75  dbePrintOp(stdou
31150 74 2c 20 6f 72 69 67 50 63 2c 20 26 61 4f 70 5b  t, origPc, &aOp[
31160 6f 72 69 67 50 63 5d 29 3b 0a 23 65 6e 64 69 66  origPc]);.#endif
31170 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  .    }.#endif.. 
31180 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77     /* The follow
31190 69 6e 67 20 63 6f 64 65 20 61 64 64 73 20 6e 6f  ing code adds no
311a0 74 68 69 6e 67 20 74 6f 20 74 68 65 20 61 63 74  thing to the act
311b0 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  ual functionalit
311c0 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20  y.    ** of the 
311d0 70 72 6f 67 72 61 6d 2e 20 20 49 74 20 69 73 20  program.  It is 
311e0 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72 20 74 65  only here for te
311f0 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67 67  sting and debugg
31200 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 74  ing..    ** On t
31210 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20 69  he other hand, i
31220 74 20 64 6f 65 73 20 62 75 72 6e 20 43 50 55 20  t does burn CPU 
31230 63 79 63 6c 65 73 20 65 76 65 72 79 20 74 69 6d  cycles every tim
31240 65 20 74 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a  e through.    **
31250 20 74 68 65 20 65 76 61 6c 75 61 74 6f 72 20 6c   the evaluator l
31260 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63 61 6e 20  oop.  So we can 
31270 6c 65 61 76 65 20 69 74 20 6f 75 74 20 77 68 65  leave it out whe
31280 6e 20 4e 44 45 42 55 47 20 69 73 20 64 65 66 69  n NDEBUG is defi
31290 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 6e  ned..    */.#ifn
312a0 64 65 66 20 4e 44 45 42 55 47 0a 20 20 20 20 61  def NDEBUG.    a
312b0 73 73 65 72 74 28 20 70 63 3e 3d 2d 31 20 26 26  ssert( pc>=-1 &&
312c0 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23   pc<p->nOp );..#
312d0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
312e0 55 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66  UG.    if( db->f
312f0 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
31300 62 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20  beTrace ){.     
31310 20 69 66 28 20 72 63 21 3d 30 20 29 20 70 72 69   if( rc!=0 ) pri
31320 6e 74 66 28 22 72 63 3d 25 64 5c 6e 22 2c 72 63  ntf("rc=%d\n",rc
31330 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  );.      if( pOp
31340 2d 3e 6f 70 66 6c 61 67 73 20 26 20 28 4f 50 46  ->opflags & (OPF
31350 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41  LG_OUT2_PRERELEA
31360 53 45 7c 4f 50 46 4c 47 5f 4f 55 54 32 29 20 29  SE|OPFLG_OUT2) )
31370 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73 74  {.        regist
31380 65 72 54 72 61 63 65 28 70 4f 70 2d 3e 70 32 2c  erTrace(pOp->p2,
31390 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29   &aMem[pOp->p2])
313a0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
313b0 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  if( pOp->opflags
313c0 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20 29 7b   & OPFLG_OUT3 ){
313d0 0a 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65  .        registe
313e0 72 54 72 61 63 65 28 70 4f 70 2d 3e 70 33 2c 20  rTrace(pOp->p3, 
313f0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b  &aMem[pOp->p3]);
31400 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
31410 65 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49 54 45  endif  /* SQLITE
31420 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66  _DEBUG */.#endif
31430 20 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f 0a 20    /* NDEBUG */. 
31440 20 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64 20 6f   }  /* The end o
31450 66 20 74 68 65 20 66 6f 72 28 3b 3b 29 20 6c 6f  f the for(;;) lo
31460 6f 70 20 74 68 65 20 6c 6f 6f 70 73 20 74 68 72  op the loops thr
31470 6f 75 67 68 20 6f 70 63 6f 64 65 73 20 2a 2f 0a  ough opcodes */.
31480 0a 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63  .  /* If we reac
31490 68 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 69 74  h this point, it
314a0 20 6d 65 61 6e 73 20 74 68 61 74 20 65 78 65 63   means that exec
314b0 75 74 69 6f 6e 20 69 73 20 66 69 6e 69 73 68 65  ution is finishe
314c0 64 20 77 69 74 68 0a 20 20 2a 2a 20 61 6e 20 65  d with.  ** an e
314d0 72 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69 6e  rror of some kin
314e0 64 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f 65 72 72  d..  */.vdbe_err
314f0 6f 72 5f 68 61 6c 74 3a 0a 20 20 61 73 73 65 72  or_halt:.  asser
31500 74 28 20 72 63 20 29 3b 0a 20 20 70 2d 3e 72 63  t( rc );.  p->rc
31510 20 3d 20 72 63 3b 0a 20 20 74 65 73 74 63 61 73   = rc;.  testcas
31520 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  e( sqlite3Global
31530 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29  Config.xLog!=0 )
31540 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28  ;.  sqlite3_log(
31550 72 63 2c 20 22 73 74 61 74 65 6d 65 6e 74 20 61  rc, "statement a
31560 62 6f 72 74 73 20 61 74 20 25 64 3a 20 5b 25 73  borts at %d: [%s
31570 5d 20 25 73 22 2c 20 0a 20 20 20 20 20 20 20 20  ] %s", .        
31580 20 20 20 20 20 20 20 20 20 20 20 70 63 2c 20 70             pc, p
31590 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d  ->zSql, p->zErrM
315a0 73 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  sg);.  sqlite3Vd
315b0 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 69 66 28  beHalt(p);.  if(
315c0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45 52   rc==SQLITE_IOER
315d0 52 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d 61  R_NOMEM ) db->ma
315e0 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
315f0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
31600 52 4f 52 3b 0a 20 20 69 66 28 20 72 65 73 65 74  ROR;.  if( reset
31610 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3e 30 20  SchemaOnFault>0 
31620 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65  ){.    sqlite3Re
31630 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c  setOneSchema(db,
31640 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
31650 75 6c 74 2d 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f  ult-1);.  }..  /
31660 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e  * This is the on
31670 6c 79 20 77 61 79 20 6f 75 74 20 6f 66 20 74 68  ly way out of th
31680 69 73 20 70 72 6f 63 65 64 75 72 65 2e 20 20 57  is procedure.  W
31690 65 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20 72  e have to.  ** r
316a0 65 6c 65 61 73 65 20 74 68 65 20 6d 75 74 65 78  elease the mutex
316b0 65 73 20 6f 6e 20 62 74 72 65 65 73 20 74 68 61  es on btrees tha
316c0 74 20 77 65 72 65 20 61 63 71 75 69 72 65 64 20  t were acquired 
316d0 61 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70 2e  at the.  ** top.
316e0 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e 3a   */.vdbe_return:
316f0 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64  .  db->lastRowid
31700 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20   = lastRowid;.  
31710 74 65 73 74 63 61 73 65 28 20 6e 56 6d 53 74 65  testcase( nVmSte
31720 70 3e 30 20 29 3b 0a 20 20 70 2d 3e 61 43 6f 75  p>0 );.  p->aCou
31730 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54  nter[SQLITE_STMT
31740 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 20  STATUS_VM_STEP] 
31750 2b 3d 20 28 69 6e 74 29 6e 56 6d 53 74 65 70 3b  += (int)nVmStep;
31760 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 65  .  sqlite3VdbeLe
31770 61 76 65 28 70 29 3b 0a 20 20 72 65 74 75 72 6e  ave(p);.  return
31780 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20   rc;..  /* Jump 
31790 74 6f 20 68 65 72 65 20 69 66 20 61 20 73 74 72  to here if a str
317a0 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6c 61 72 67  ing or blob larg
317b0 65 72 20 74 68 61 6e 20 53 51 4c 49 54 45 5f 4d  er than SQLITE_M
317c0 41 58 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a 20 69  AX_LENGTH.  ** i
317d0 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 20  s encountered.. 
317e0 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20 73   */.too_big:.  s
317f0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
31800 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
31810 20 22 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62   "string or blob
31820 20 74 6f 6f 20 62 69 67 22 29 3b 0a 20 20 72 63   too big");.  rc
31830 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47   = SQLITE_TOOBIG
31840 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72  ;.  goto vdbe_er
31850 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20  ror_halt;..  /* 
31860 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20  Jump to here if 
31870 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73  a malloc() fails
31880 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20  ..  */.no_mem:. 
31890 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
318a0 64 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65 33  d = 1;.  sqlite3
318b0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
318c0 72 72 4d 73 67 2c 20 64 62 2c 20 22 6f 75 74 20  rrMsg, db, "out 
318d0 6f 66 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 72  of memory");.  r
318e0 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
318f0 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72  ;.  goto vdbe_er
31900 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20  ror_halt;..  /* 
31910 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 66 6f 72  Jump to here for
31920 20 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64 20   any other kind 
31930 6f 66 20 66 61 74 61 6c 20 65 72 72 6f 72 2e 20  of fatal error. 
31940 20 54 68 65 20 22 72 63 22 20 76 61 72 69 61 62   The "rc" variab
31950 6c 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68  le.  ** should h
31960 6f 6c 64 20 74 68 65 20 65 72 72 6f 72 20 6e 75  old the error nu
31970 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74  mber..  */.abort
31980 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20  _due_to_error:. 
31990 20 61 73 73 65 72 74 28 20 70 2d 3e 7a 45 72 72   assert( p->zErr
319a0 4d 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20  Msg==0 );.  if( 
319b0 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
319c0 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e   ) rc = SQLITE_N
319d0 4f 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d  OMEM;.  if( rc!=
319e0 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
319f0 45 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  EM ){.    sqlite
31a00 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
31a10 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
31a20 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28  , sqlite3ErrStr(
31a30 72 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f  rc));.  }.  goto
31a40 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
31a50 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20  ;..  /* Jump to 
31a60 68 65 72 65 20 69 66 20 74 68 65 20 73 71 6c 69  here if the sqli
31a70 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20  te3_interrupt() 
31a80 41 50 49 20 73 65 74 73 20 74 68 65 20 69 6e 74  API sets the int
31a90 65 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67  errupt.  ** flag
31aa0 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65  ..  */.abort_due
31ab0 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20  _to_interrupt:. 
31ac0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 75 31 2e   assert( db->u1.
31ad0 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 3b  isInterrupted );
31ae0 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49  .  rc = SQLITE_I
31af0 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72  NTERRUPT;.  p->r
31b00 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65  c = rc;.  sqlite
31b10 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
31b20 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
31b30 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28  , sqlite3ErrStr(
31b40 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62  rc));.  goto vdb
31b50 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a  e_error_halt;.}.