/ Hex Artifact Content
Login

Artifact 399bb1d353da8ce2e52e5182aabca18da0296749:


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 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 20 20 28 28 44 42 29 2d  OOK(DB)   ((DB)-
0d20: 3e 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62  >xPreUpdateCallb
0d30: 61 63 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61  ack||(DB)->xUpda
0d40: 74 65 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73  teCallback).#els
0d50: 65 0a 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55  e.# define HAS_U
0d60: 50 44 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 20  PDATE_HOOK(DB)  
0d70: 28 28 44 42 29 2d 3e 78 55 70 64 61 74 65 43 61  ((DB)->xUpdateCa
0d80: 6c 6c 62 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a  llback).#endif..
0d90: 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67  /*.** The next g
0da0: 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69  lobal variable i
0db0: 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61  s incremented ea
0dc0: 63 68 20 74 69 6d 65 20 74 68 65 20 4f 50 5f 46  ch time the OP_F
0dd0: 6f 75 6e 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  ound opcode.** i
0de0: 73 20 65 78 65 63 75 74 65 64 2e 20 54 68 69 73  s executed. This
0df0: 20 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74   is used to test
0e00: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
0e10: 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a  the foreign key.
0e20: 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70  ** operation imp
0e30: 6c 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 4f  lemented using O
0e40: 50 5f 46 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f  P_FkIsZero is wo
0e50: 72 6b 69 6e 67 2e 20 54 68 69 73 20 76 61 72 69  rking. This vari
0e60: 61 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66  able.** has no f
0e70: 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68  unction other th
0e80: 61 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66  an to help verif
0e90: 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70  y the correct op
0ea0: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  eration of the.*
0eb0: 2a 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69  * library..*/.#i
0ec0: 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
0ed0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 66 6f 75  .int sqlite3_fou
0ee0: 6e 64 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65  nd_count = 0;.#e
0ef0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74  ndif../*.** Test
0f00: 20 61 20 72 65 67 69 73 74 65 72 20 74 6f 20 73   a register to s
0f10: 65 65 20 69 66 20 69 74 20 65 78 63 65 65 64 73  ee if it exceeds
0f20: 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 61 78   the current max
0f30: 69 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a  imum blob size..
0f40: 2a 2a 20 49 66 20 69 74 20 64 6f 65 73 2c 20 72  ** If it does, r
0f50: 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 6d 61  ecord the new ma
0f60: 78 69 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e  ximum blob size.
0f70: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0f80: 53 51 4c 49 54 45 5f 54 45 53 54 29 20 26 26 20  SQLITE_TEST) && 
0f90: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
0fa0: 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
0fb0: 54 29 0a 23 20 64 65 66 69 6e 65 20 55 50 44 41  T).# define UPDA
0fc0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
0fd0: 50 29 20 20 75 70 64 61 74 65 4d 61 78 42 6c 6f  P)  updateMaxBlo
0fe0: 62 73 69 7a 65 28 50 29 0a 23 65 6c 73 65 0a 23  bsize(P).#else.#
0ff0: 20 64 65 66 69 6e 65 20 55 50 44 41 54 45 5f 4d   define UPDATE_M
1000: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29 0a 23  AX_BLOBSIZE(P).#
1010: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76  endif../*.** Inv
1020: 6f 6b 65 20 74 68 65 20 56 44 42 45 20 63 6f 76  oke the VDBE cov
1030: 65 72 61 67 65 20 63 61 6c 6c 62 61 63 6b 2c 20  erage callback, 
1040: 69 66 20 74 68 61 74 20 63 61 6c 6c 62 61 63 6b  if that callback
1050: 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68   is defined.  Th
1060: 69 73 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73  is.** feature is
1070: 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 20 73   used for test s
1080: 75 69 74 65 20 76 61 6c 69 64 61 74 69 6f 6e 20  uite validation 
1090: 6f 6e 6c 79 20 61 6e 64 20 64 6f 65 73 20 6e 6f  only and does no
10a0: 74 20 61 70 70 65 61 72 20 61 6e 0a 2a 2a 20 70  t appear an.** p
10b0: 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 73  roduction builds
10c0: 2e 0a 2a 2a 0a 2a 2a 20 4d 20 69 73 20 61 6e 20  ..**.** M is an 
10d0: 69 6e 74 65 67 65 72 2c 20 32 20 6f 72 20 33 2c  integer, 2 or 3,
10e0: 20 74 68 61 74 20 69 6e 64 69 63 65 73 20 68 6f   that indices ho
10f0: 77 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74  w many different
1100: 20 77 61 79 73 20 74 68 65 0a 2a 2a 20 62 72 61   ways the.** bra
1110: 6e 63 68 20 63 61 6e 20 67 6f 2e 20 20 49 74 20  nch can go.  It 
1120: 69 73 20 75 73 75 61 6c 6c 79 20 32 2e 20 20 22  is usually 2.  "
1130: 49 22 20 69 73 20 74 68 65 20 64 69 72 65 63 74  I" is the direct
1140: 69 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 0a 2a  ion the branch.*
1150: 2a 20 67 6f 65 73 2e 20 20 30 20 6d 65 61 6e 73  * goes.  0 means
1160: 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 2e 20   falls through. 
1170: 20 31 20 6d 65 61 6e 73 20 62 72 61 6e 63 68 20   1 means branch 
1180: 69 73 20 74 61 6b 65 6e 2e 20 20 32 20 6d 65 61  is taken.  2 mea
1190: 6e 73 20 74 68 65 0a 2a 2a 20 73 65 63 6f 6e 64  ns the.** second
11a0: 20 61 6c 74 65 72 6e 61 74 69 76 65 20 62 72 61   alternative bra
11b0: 6e 63 68 20 69 73 20 74 61 6b 65 6e 2e 0a 2a 2a  nch is taken..**
11c0: 0a 2a 2a 20 69 53 72 63 4c 69 6e 65 20 69 73 20  .** iSrcLine is 
11d0: 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20  the source code 
11e0: 6c 69 6e 65 20 28 66 72 6f 6d 20 74 68 65 20 5f  line (from the _
11f0: 5f 4c 49 4e 45 5f 5f 20 6d 61 63 72 6f 29 20 74  _LINE__ macro) t
1200: 68 61 74 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64  hat.** generated
1210: 20 74 68 65 20 56 44 42 45 20 69 6e 73 74 72 75   the VDBE instru
1220: 63 74 69 6f 6e 2e 20 20 54 68 69 73 20 69 6e 73  ction.  This ins
1230: 74 72 75 6d 65 6e 74 61 74 69 6f 6e 20 61 73 73  trumentation ass
1240: 75 6d 65 73 20 74 68 61 74 20 61 6c 6c 0a 2a 2a  umes that all.**
1250: 20 73 6f 75 72 63 65 20 63 6f 64 65 20 69 73 20   source code is 
1260: 69 6e 20 61 20 73 69 6e 67 6c 65 20 66 69 6c 65  in a single file
1270: 20 28 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69   (the amalgamati
1280: 6f 6e 29 2e 20 20 53 70 65 63 69 61 6c 20 76 61  on).  Special va
1290: 6c 75 65 73 20 31 0a 2a 2a 20 61 6e 64 20 32 20  lues 1.** and 2 
12a0: 66 6f 72 20 74 68 65 20 69 53 72 63 4c 69 6e 65  for the iSrcLine
12b0: 20 70 61 72 61 6d 65 74 65 72 20 6d 65 61 6e 20   parameter mean 
12c0: 74 68 61 74 20 74 68 69 73 20 70 61 72 74 69 63  that this partic
12d0: 75 6c 61 72 20 62 72 61 6e 63 68 20 69 73 0a 2a  ular branch is.*
12e0: 2a 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 6f  * always taken o
12f0: 72 20 6e 65 76 65 72 20 74 61 6b 65 6e 2c 20 72  r never taken, r
1300: 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
1310: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1320: 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  ITE_VDBE_COVERAG
1330: 45 29 0a 23 20 64 65 66 69 6e 65 20 56 64 62 65  E).# define Vdbe
1340: 42 72 61 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29  BranchTaken(I,M)
1350: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1360: 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
1370: 49 2c 4d 29 20 76 64 62 65 54 61 6b 65 42 72 61  I,M) vdbeTakeBra
1380: 6e 63 68 28 70 4f 70 2d 3e 69 53 72 63 4c 69 6e  nch(pOp->iSrcLin
1390: 65 2c 49 2c 4d 29 0a 20 20 73 74 61 74 69 63 20  e,I,M).  static 
13a0: 76 6f 69 64 20 76 64 62 65 54 61 6b 65 42 72 61  void vdbeTakeBra
13b0: 6e 63 68 28 69 6e 74 20 69 53 72 63 4c 69 6e 65  nch(int iSrcLine
13c0: 2c 20 75 38 20 49 2c 20 75 38 20 4d 29 7b 0a 20  , u8 I, u8 M){. 
13d0: 20 20 20 69 66 28 20 69 53 72 63 4c 69 6e 65 3c     if( iSrcLine<
13e0: 3d 32 20 26 26 20 41 4c 57 41 59 53 28 69 53 72  =2 && ALWAYS(iSr
13f0: 63 4c 69 6e 65 3e 30 29 20 29 7b 0a 20 20 20 20  cLine>0) ){.    
1400: 20 20 4d 20 3d 20 69 53 72 63 4c 69 6e 65 3b 0a    M = iSrcLine;.
1410: 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20        /* Assert 
1420: 74 68 65 20 74 72 75 74 68 20 6f 66 20 56 64 62  the truth of Vdb
1430: 65 43 6f 76 65 72 61 67 65 41 6c 77 61 79 73 54  eCoverageAlwaysT
1440: 61 6b 65 6e 28 29 20 61 6e 64 20 0a 20 20 20 20  aken() and .    
1450: 20 20 2a 2a 20 56 64 62 65 43 6f 76 65 72 61 67    ** VdbeCoverag
1460: 65 4e 65 76 65 72 54 61 6b 65 6e 28 29 20 2a 2f  eNeverTaken() */
1470: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
1480: 4d 20 26 20 49 29 3d 3d 49 20 29 3b 0a 20 20 20  M & I)==I );.   
1490: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66   }else{.      if
14a0: 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
14b0: 6f 6e 66 69 67 2e 78 56 64 62 65 42 72 61 6e 63  onfig.xVdbeBranc
14c0: 68 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 20 20  h==0 ) return;  
14d0: 2f 2a 4e 4f 5f 54 45 53 54 2a 2f 0a 20 20 20 20  /*NO_TEST*/.    
14e0: 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43    sqlite3GlobalC
14f0: 6f 6e 66 69 67 2e 78 56 64 62 65 42 72 61 6e 63  onfig.xVdbeBranc
1500: 68 28 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  h(sqlite3GlobalC
1510: 6f 6e 66 69 67 2e 70 56 64 62 65 42 72 61 6e 63  onfig.pVdbeBranc
1520: 68 41 72 67 2c 0a 20 20 20 20 20 20 20 20 20 20  hArg,.          
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 20 20 20 20 20 20 20 20 20 20 69 53 72 63              iSrc
1550: 4c 69 6e 65 2c 49 2c 4d 29 3b 0a 20 20 20 20 7d  Line,I,M);.    }
1560: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  .  }.#endif../*.
1570: 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65 20 67  ** Convert the g
1580: 69 76 65 6e 20 72 65 67 69 73 74 65 72 20 69 6e  iven register in
1590: 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66 20 69  to a string if i
15a0: 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a 20 61  t isn't one.** a
15b0: 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e 20 6e  lready. Return n
15c0: 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d 61 6c  on-zero if a mal
15d0: 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a 2f 0a  loc() fails..*/.
15e0: 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67 69 66  #define Stringif
15f0: 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20 20 69  y(P, enc) \.   i
1600: 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26 28 4d  f(((P)->flags&(M
1610: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
1620: 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65 33 56  )==0 && sqlite3V
1630: 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
1640: 50 2c 65 6e 63 2c 30 29 29 20 5c 0a 20 20 20 20  P,enc,0)) \.    
1650: 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20   { goto no_mem; 
1660: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65  }../*.** An ephe
1670: 6d 65 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c  meral string val
1680: 75 65 20 28 73 69 67 6e 69 66 69 65 64 20 62 79  ue (signified by
1690: 20 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66   the MEM_Ephem f
16a0: 6c 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  lag) contains.**
16b0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
16c0: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
16d0: 63 61 74 65 64 20 73 74 72 69 6e 67 20 77 68 65  cated string whe
16e0: 72 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e  re some other en
16f0: 74 69 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f  tity.** is respo
1700: 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c  nsible for deall
1710: 6f 63 61 74 69 6e 67 20 74 68 61 74 20 73 74 72  ocating that str
1720: 69 6e 67 2e 20 20 42 65 63 61 75 73 65 20 74 68  ing.  Because th
1730: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f  e register.** do
1740: 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74  es not control t
1750: 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20 6d 69  he string, it mi
1760: 67 68 74 20 62 65 20 64 65 6c 65 74 65 64 20 77  ght be deleted w
1770: 69 74 68 6f 75 74 20 74 68 65 20 72 65 67 69 73  ithout the regis
1780: 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69  ter.** knowing i
1790: 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  t..**.** This ro
17a0: 75 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 61  utine converts a
17b0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
17c0: 6e 67 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69  ng into a dynami
17d0: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a  cally allocated.
17e0: 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20 74  ** string that t
17f0: 68 65 20 72 65 67 69 73 74 65 72 20 69 74 73 65  he register itse
1800: 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e  lf controls.  In
1810: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74   other words, it
1820: 0a 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e 20  .** converts an 
1830: 4d 45 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e 67  MEM_Ephem string
1840: 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 77   into a string w
1850: 69 74 68 20 50 2e 7a 3d 3d 50 2e 7a 4d 61 6c 6c  ith P.z==P.zMall
1860: 6f 63 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  oc..*/.#define D
1870: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 50 29  eephemeralize(P)
1880: 20 5c 0a 20 20 20 69 66 28 20 28 28 50 29 2d 3e   \.   if( ((P)->
1890: 66 6c 61 67 73 26 4d 45 4d 5f 45 70 68 65 6d 29  flags&MEM_Ephem)
18a0: 21 3d 30 20 5c 0a 20 20 20 20 20 20 20 26 26 20  !=0 \.       && 
18b0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61  sqlite3VdbeMemMa
18c0: 6b 65 57 72 69 74 65 61 62 6c 65 28 50 29 20 29  keWriteable(P) )
18d0: 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 7d 0a  { goto no_mem;}.
18e0: 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  ./* Return true 
18f0: 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 77 61  if the cursor wa
1900: 73 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74  s opened using t
1910: 68 65 20 4f 50 5f 4f 70 65 6e 53 6f 72 74 65 72  he OP_OpenSorter
1920: 20 6f 70 63 6f 64 65 2e 20 2a 2f 0a 23 64 65 66   opcode. */.#def
1930: 69 6e 65 20 69 73 53 6f 72 74 65 72 28 78 29 20  ine isSorter(x) 
1940: 28 28 78 29 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ((x)->eCurType==
1950: 43 55 52 54 59 50 45 5f 53 4f 52 54 45 52 29 0a  CURTYPE_SORTER).
1960: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  ./*.** Allocate 
1970: 56 64 62 65 43 75 72 73 6f 72 20 6e 75 6d 62 65  VdbeCursor numbe
1980: 72 20 69 43 75 72 2e 20 20 52 65 74 75 72 6e 20  r iCur.  Return 
1990: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e  a pointer to it.
19a0: 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 0a 2a 2a    Return NULL.**
19b0: 20 69 66 20 77 65 20 72 75 6e 20 6f 75 74 20 6f   if we run out o
19c0: 66 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73 74 61  f memory..*/.sta
19d0: 74 69 63 20 56 64 62 65 43 75 72 73 6f 72 20 2a  tic VdbeCursor *
19e0: 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 0a  allocateCursor(.
19f0: 20 20 56 64 62 65 20 2a 70 2c 20 20 20 20 20 20    Vdbe *p,      
1a00: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76          /* The v
1a10: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 2a  irtual machine *
1a20: 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c 20 20 20  /.  int iCur,   
1a30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
1a40: 65 78 20 6f 66 20 74 68 65 20 6e 65 77 20 56 64  ex of the new Vd
1a50: 62 65 43 75 72 73 6f 72 20 2a 2f 0a 20 20 69 6e  beCursor */.  in
1a60: 74 20 6e 46 69 65 6c 64 2c 20 20 20 20 20 20 20  t nField,       
1a70: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1a80: 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 74   fields in the t
1a90: 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 2a 2f  able or index */
1aa0: 0a 20 20 69 6e 74 20 69 44 62 2c 20 20 20 20 20  .  int iDb,     
1ab0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
1ac0: 62 61 73 65 20 74 68 65 20 63 75 72 73 6f 72 20  base the cursor 
1ad0: 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72 20 2d  belongs to, or -
1ae0: 31 20 2a 2f 0a 20 20 75 38 20 65 43 75 72 54 79  1 */.  u8 eCurTy
1af0: 70 65 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  pe           /* 
1b00: 54 79 70 65 20 6f 66 20 74 68 65 20 6e 65 77 20  Type of the new 
1b10: 63 75 72 73 6f 72 20 2a 2f 0a 29 7b 0a 20 20 2f  cursor */.){.  /
1b20: 2a 20 46 69 6e 64 20 74 68 65 20 6d 65 6d 6f 72  * Find the memor
1b30: 79 20 63 65 6c 6c 20 74 68 61 74 20 77 69 6c 6c  y cell that will
1b40: 20 62 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72   be used to stor
1b50: 65 20 74 68 65 20 62 6c 6f 62 20 6f 66 20 6d 65  e the blob of me
1b60: 6d 6f 72 79 0a 20 20 2a 2a 20 72 65 71 75 69 72  mory.  ** requir
1b70: 65 64 20 66 6f 72 20 74 68 69 73 20 56 64 62 65  ed for this Vdbe
1b80: 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65  Cursor structure
1b90: 2e 20 49 74 20 69 73 20 63 6f 6e 76 65 6e 69 65  . It is convenie
1ba0: 6e 74 20 74 6f 20 75 73 65 20 61 20 0a 20 20 2a  nt to use a .  *
1bb0: 2a 20 76 64 62 65 20 6d 65 6d 6f 72 79 20 63 65  * vdbe memory ce
1bc0: 6c 6c 20 74 6f 20 6d 61 6e 61 67 65 20 74 68 65  ll to manage the
1bd0: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
1be0: 6f 6e 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  on required for 
1bf0: 61 0a 20 20 2a 2a 20 56 64 62 65 43 75 72 73 6f  a.  ** VdbeCurso
1c00: 72 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  r structure for 
1c10: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65  the following re
1c20: 61 73 6f 6e 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a  asons:.  **.  **
1c30: 20 20 20 2a 20 53 6f 6d 65 74 69 6d 65 73 20 63     * Sometimes c
1c40: 75 72 73 6f 72 20 6e 75 6d 62 65 72 73 20 61 72  ursor numbers ar
1c50: 65 20 75 73 65 64 20 66 6f 72 20 61 20 63 6f 75  e used for a cou
1c60: 70 6c 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74  ple of different
1c70: 0a 20 20 2a 2a 20 20 20 20 20 70 75 72 70 6f 73  .  **     purpos
1c80: 65 73 20 69 6e 20 61 20 76 64 62 65 20 70 72 6f  es in a vdbe pro
1c90: 67 72 61 6d 2e 20 54 68 65 20 64 69 66 66 65 72  gram. The differ
1ca0: 65 6e 74 20 75 73 65 73 20 6d 69 67 68 74 20 72  ent uses might r
1cb0: 65 71 75 69 72 65 0a 20 20 2a 2a 20 20 20 20 20  equire.  **     
1cc0: 64 69 66 66 65 72 65 6e 74 20 73 69 7a 65 64 20  different sized 
1cd0: 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 20 4d 65 6d  allocations. Mem
1ce0: 6f 72 79 20 63 65 6c 6c 73 20 70 72 6f 76 69 64  ory cells provid
1cf0: 65 20 67 72 6f 77 61 62 6c 65 0a 20 20 2a 2a 20  e growable.  ** 
1d00: 20 20 20 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e      allocations.
1d10: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 57  .  **.  **   * W
1d20: 68 65 6e 20 75 73 69 6e 67 20 45 4e 41 42 4c 45  hen using ENABLE
1d30: 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45  _MEMORY_MANAGEME
1d40: 4e 54 2c 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  NT, memory cell 
1d50: 62 75 66 66 65 72 73 20 63 61 6e 0a 20 20 2a 2a  buffers can.  **
1d60: 20 20 20 20 20 62 65 20 66 72 65 65 64 20 6c 61       be freed la
1d70: 7a 69 6c 79 20 76 69 61 20 74 68 65 20 73 71 6c  zily via the sql
1d80: 69 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d  ite3_release_mem
1d90: 6f 72 79 28 29 20 41 50 49 2e 20 54 68 69 73 0a  ory() API. This.
1da0: 20 20 2a 2a 20 20 20 20 20 6d 69 6e 69 6d 69 7a    **     minimiz
1db0: 65 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  es the number of
1dc0: 20 6d 61 6c 6c 6f 63 20 63 61 6c 6c 73 20 6d 61   malloc calls ma
1dd0: 64 65 20 62 79 20 74 68 65 20 73 79 73 74 65 6d  de by the system
1de0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  ..  **.  ** The 
1df0: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 66 6f 72 20  memory cell for 
1e00: 63 75 72 73 6f 72 20 30 20 69 73 20 61 4d 65 6d  cursor 0 is aMem
1e10: 5b 30 5d 2e 20 54 68 65 20 72 65 73 74 20 61 72  [0]. The rest ar
1e20: 65 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d  e allocated from
1e30: 0a 20 20 2a 2a 20 74 68 65 20 74 6f 70 20 6f 66  .  ** the top of
1e40: 20 74 68 65 20 72 65 67 69 73 74 65 72 20 73 70   the register sp
1e50: 61 63 65 2e 20 20 43 75 72 73 6f 72 20 31 20 69  ace.  Cursor 1 i
1e60: 73 20 61 74 20 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d  s at Mem[p->nMem
1e70: 2d 31 5d 2e 0a 20 20 2a 2a 20 43 75 72 73 6f 72  -1]..  ** Cursor
1e80: 20 32 20 69 73 20 61 74 20 4d 65 6d 5b 70 2d 3e   2 is at Mem[p->
1e90: 6e 4d 65 6d 2d 32 5d 2e 20 41 6e 64 20 73 6f 20  nMem-2]. And so 
1ea0: 66 6f 72 74 68 2e 0a 20 20 2a 2f 0a 20 20 4d 65  forth..  */.  Me
1eb0: 6d 20 2a 70 4d 65 6d 20 3d 20 69 43 75 72 3e 30  m *pMem = iCur>0
1ec0: 20 3f 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e   ? &p->aMem[p->n
1ed0: 4d 65 6d 2d 69 43 75 72 5d 20 3a 20 70 2d 3e 61  Mem-iCur] : p->a
1ee0: 4d 65 6d 3b 0a 0a 20 20 69 6e 74 20 6e 42 79 74  Mem;..  int nByt
1ef0: 65 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  e;.  VdbeCursor 
1f00: 2a 70 43 78 20 3d 20 30 3b 0a 20 20 6e 42 79 74  *pCx = 0;.  nByt
1f10: 65 20 3d 20 0a 20 20 20 20 20 20 52 4f 55 4e 44  e = .      ROUND
1f20: 38 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  8(sizeof(VdbeCur
1f30: 73 6f 72 29 29 20 2b 20 32 2a 73 69 7a 65 6f 66  sor)) + 2*sizeof
1f40: 28 75 33 32 29 2a 6e 46 69 65 6c 64 20 2b 20 0a  (u32)*nField + .
1f50: 20 20 20 20 20 20 28 65 43 75 72 54 79 70 65 3d        (eCurType=
1f60: 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 3f 73  =CURTYPE_BTREE?s
1f70: 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1f80: 72 53 69 7a 65 28 29 3a 30 29 3b 0a 0a 20 20 61  rSize():0);..  a
1f90: 73 73 65 72 74 28 20 69 43 75 72 3e 3d 30 20 26  ssert( iCur>=0 &
1fa0: 26 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f  & iCur<p->nCurso
1fb0: 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70  r );.  if( p->ap
1fc0: 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20 20  Csr[iCur] ){.   
1fd0: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1fe0: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
1ff0: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
2000: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
2010: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
2020: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
2030: 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
2040: 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74 65  size(pMem, nByte
2050: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73  ) ){.    p->apCs
2060: 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20  r[iCur] = pCx = 
2070: 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65  (VdbeCursor*)pMe
2080: 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74  m->z;.    memset
2090: 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f 66 28  (pCx, 0, sizeof(
20a0: 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a 20 20  VdbeCursor));.  
20b0: 20 20 70 43 78 2d 3e 65 43 75 72 54 79 70 65 20    pCx->eCurType 
20c0: 3d 20 65 43 75 72 54 79 70 65 3b 0a 20 20 20 20  = eCurType;.    
20d0: 70 43 78 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a  pCx->iDb = iDb;.
20e0: 20 20 20 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20      pCx->nField 
20f0: 3d 20 6e 46 69 65 6c 64 3b 0a 20 20 20 20 70 43  = nField;.    pC
2100: 78 2d 3e 61 4f 66 66 73 65 74 20 3d 20 26 70 43  x->aOffset = &pC
2110: 78 2d 3e 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d  x->aType[nField]
2120: 3b 0a 20 20 20 20 69 66 28 20 65 43 75 72 54 79  ;.    if( eCurTy
2130: 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
2140: 45 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e  E ){.      pCx->
2150: 75 63 2e 70 43 75 72 73 6f 72 20 3d 20 28 42 74  uc.pCursor = (Bt
2160: 43 75 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20  Cursor*).       
2170: 20 20 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e     &pMem->z[ROUN
2180: 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75  D8(sizeof(VdbeCu
2190: 72 73 6f 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28  rsor))+2*sizeof(
21a0: 75 33 32 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20  u32)*nField];.  
21b0: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
21c0: 43 75 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e  CursorZero(pCx->
21d0: 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
21e0: 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20   }.  }.  return 
21f0: 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72  pCx;.}../*.** Tr
2200: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 61 20 76  y to convert a v
2210: 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65  alue into a nume
2220: 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74 69  ric representati
2230: 6f 6e 20 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20  on if we can.** 
2240: 64 6f 20 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f  do so without lo
2250: 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  ss of informatio
2260: 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
2270: 64 73 2c 20 69 66 20 74 68 65 20 73 74 72 69 6e  ds, if the strin
2280: 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20  g.** looks like 
2290: 61 20 6e 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72  a number, conver
22a0: 74 20 69 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62  t it into a numb
22b0: 65 72 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20  er.  If it does 
22c0: 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65  not.** look like
22d0: 20 61 20 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65   a number, leave
22e0: 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a   it alone..**.**
22f0: 20 49 66 20 74 68 65 20 62 54 72 79 46 6f 72 49   If the bTryForI
2300: 6e 74 20 66 6c 61 67 20 69 73 20 74 72 75 65 2c  nt flag is true,
2310: 20 74 68 65 6e 20 65 78 74 72 61 20 65 66 66 6f   then extra effo
2320: 72 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67 69  rt is made to gi
2330: 76 65 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72  ve.** an integer
2340: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2350: 20 20 53 74 72 69 6e 67 73 20 74 68 61 74 20 6c    Strings that l
2360: 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f 61 74 69 6e  ook like floatin
2370: 67 20 70 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75 65  g point.** value
2380: 73 20 62 75 74 20 77 68 69 63 68 20 68 61 76 65  s but which have
2390: 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61 6c 20 63   no fractional c
23a0: 6f 6d 70 6f 6e 65 6e 74 20 28 65 78 61 6d 70 6c  omponent (exampl
23b0: 65 3a 20 27 34 38 2e 30 30 27 29 0a 2a 2a 20 77  e: '48.00').** w
23c0: 69 6c 6c 20 68 61 76 65 20 61 20 4d 45 4d 5f 49  ill have a MEM_I
23d0: 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  nt representatio
23e0: 6e 20 77 68 65 6e 20 62 54 72 79 46 6f 72 49 6e  n when bTryForIn
23f0: 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a  t is true..**.**
2400: 20 49 66 20 62 54 72 79 46 6f 72 49 6e 74 20 69   If bTryForInt i
2410: 73 20 66 61 6c 73 65 2c 20 74 68 65 6e 20 69 66  s false, then if
2420: 20 74 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e   the input strin
2430: 67 20 63 6f 6e 74 61 69 6e 73 20 61 20 64 65 63  g contains a dec
2440: 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72  imal.** point or
2450: 20 65 78 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74   exponential not
2460: 61 74 69 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c  ation, the resul
2470: 74 20 69 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65  t is only MEM_Re
2480: 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20 69 66 20 74  al, even.** if t
2490: 68 65 72 65 20 69 73 20 61 6e 20 65 78 61 63 74  here is an exact
24a0: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
24b0: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 71  ntation of the q
24c0: 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a 73 74 61 74  uantity..*/.stat
24d0: 69 63 20 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d  ic void applyNum
24e0: 65 72 69 63 41 66 66 69 6e 69 74 79 28 4d 65 6d  ericAffinity(Mem
24f0: 20 2a 70 52 65 63 2c 20 69 6e 74 20 62 54 72 79   *pRec, int bTry
2500: 46 6f 72 49 6e 74 29 7b 0a 20 20 64 6f 75 62 6c  ForInt){.  doubl
2510: 65 20 72 56 61 6c 75 65 3b 0a 20 20 69 36 34 20  e rValue;.  i64 
2520: 69 56 61 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63  iValue;.  u8 enc
2530: 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20   = pRec->enc;.  
2540: 61 73 73 65 72 74 28 20 28 70 52 65 63 2d 3e 66  assert( (pRec->f
2550: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
2560: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
2570: 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20  ))==MEM_Str );. 
2580: 20 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46   if( sqlite3AtoF
2590: 28 70 52 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75  (pRec->z, &rValu
25a0: 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29  e, pRec->n, enc)
25b0: 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20  ==0 ) return;.  
25c0: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74  if( 0==sqlite3At
25d0: 6f 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69  oi64(pRec->z, &i
25e0: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
25f0: 65 6e 63 29 20 29 7b 0a 20 20 20 20 70 52 65 63  enc) ){.    pRec
2600: 2d 3e 75 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a  ->u.i = iValue;.
2610: 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20      pRec->flags 
2620: 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65  |= MEM_Int;.  }e
2630: 6c 73 65 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75  lse{.    pRec->u
2640: 2e 72 20 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20  .r = rValue;.   
2650: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2660: 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66  MEM_Real;.    if
2670: 28 20 62 54 72 79 46 6f 72 49 6e 74 20 29 20 73  ( bTryForInt ) s
2680: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65  qlite3VdbeIntege
2690: 72 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b  rAffinity(pRec);
26a0: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  .  }.}../*.** Pr
26b0: 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74 65  ocessing is dete
26c0: 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66 66  rmine by the aff
26d0: 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72 3a  inity parameter:
26e0: 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  .**.** SQLITE_AF
26f0: 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51  F_INTEGER:.** SQ
2700: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a  LITE_AFF_REAL:.*
2710: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  * SQLITE_AFF_NUM
2720: 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20  ERIC:.**    Try 
2730: 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63 20  to convert pRec 
2740: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  to an integer re
2750: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20  presentation or 
2760: 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e  a .**    floatin
2770: 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65 6e  g-point represen
2780: 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74  tation if an int
2790: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
27a0: 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74  ion.**    is not
27b0: 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65   possible.  Note
27c0: 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67 65   that the intege
27d0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
27e0: 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73   is.**    always
27f0: 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65 6e   preferred, even
2800: 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74 79   if the affinity
2810: 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75 73   is REAL, becaus
2820: 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65 67  e.**    an integ
2830: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
2840: 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65 20  n is more space 
2850: 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69 73  efficient on dis
2860: 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  k..**.** SQLITE_
2870: 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20  AFF_TEXT:.**    
2880: 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  Convert pRec to 
2890: 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74  a text represent
28a0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c  ation..**.** SQL
28b0: 49 54 45 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a 2a  ITE_AFF_BLOB:.**
28c0: 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63      No-op.  pRec
28d0: 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a   is unchanged..*
28e0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70  /.static void ap
28f0: 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 4d  plyAffinity(.  M
2900: 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20 20  em *pRec,       
2910: 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65 20     /* The value 
2920: 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69 74  to apply affinit
2930: 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61  y to */.  char a
2940: 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a  ffinity,      /*
2950: 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f   The affinity to
2960: 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20   be applied */. 
2970: 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20 20   u8 enc         
2980: 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73       /* Use this
2990: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   text encoding *
29a0: 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69 6e  /.){.  if( affin
29b0: 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity>=SQLITE_AFF_
29c0: 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20 61  NUMERIC ){.    a
29d0: 73 73 65 72 74 28 20 61 66 66 69 6e 69 74 79 3d  ssert( affinity=
29e0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45  =SQLITE_AFF_INTE
29f0: 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d  GER || affinity=
2a00: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c  =SQLITE_AFF_REAL
2a10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  .             ||
2a20: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
2a30: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b  E_AFF_NUMERIC );
2a40: 0a 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e  .    if( (pRec->
2a50: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
2a60: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
2a70: 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20   (pRec->flags & 
2a80: 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a  MEM_Real)==0 ){.
2a90: 20 20 20 20 20 20 20 20 69 66 28 20 70 52 65 63          if( pRec
2aa0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
2ab0: 72 20 29 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  r ) applyNumeric
2ac0: 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c 31 29  Affinity(pRec,1)
2ad0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
2ae0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
2af0: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
2b00: 79 28 70 52 65 63 29 3b 0a 20 20 20 20 20 20 7d  y(pRec);.      }
2b10: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69  .    }.  }else i
2b20: 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  f( affinity==SQL
2b30: 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a  ITE_AFF_TEXT ){.
2b40: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65      /* Only atte
2b50: 6d 70 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69  mpt the conversi
2b60: 6f 6e 20 74 6f 20 54 45 58 54 20 69 66 20 74 68  on to TEXT if th
2b70: 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65  ere is an intege
2b80: 72 20 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a  r or real.    **
2b90: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2ba0: 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64  (blob and NULL d
2bb0: 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65 72  o not get conver
2bc0: 74 65 64 29 20 62 75 74 20 6e 6f 20 73 74 72 69  ted) but no stri
2bd0: 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73  ng.    ** repres
2be0: 65 6e 74 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f  entation..    */
2bf0: 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70 52 65  .    if( 0==(pRe
2c00: 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72  c->flags&MEM_Str
2c10: 29 20 26 26 20 28 70 52 65 63 2d 3e 66 6c 61 67  ) && (pRec->flag
2c20: 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  s&(MEM_Real|MEM_
2c30: 49 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20 73  Int)) ){.      s
2c40: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
2c50: 69 6e 67 69 66 79 28 70 52 65 63 2c 20 65 6e 63  ingify(pRec, enc
2c60: 2c 20 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  , 1);.    }.    
2c70: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pRec->flags &= ~
2c80: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2c90: 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  t);.  }.}../*.**
2ca0: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2cb0: 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75  the type of a fu
2cc0: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
2cd0: 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2ce0: 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d  mn.** into a num
2cf0: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2d00: 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72  ion.  Use either
2d10: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
2d20: 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73   whichever.** is
2d30: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42   appropriate.  B
2d40: 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63  ut only do the c
2d50: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20  onversion if it 
2d60: 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68  is possible with
2d70: 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69  out.** loss of i
2d80: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72  nformation and r
2d90: 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65  eturn the revise
2da0: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72  d type of the ar
2db0: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  gument..*/.int s
2dc0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d  qlite3_value_num
2dd0: 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65  eric_type(sqlite
2de0: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
2df0: 20 20 69 6e 74 20 65 54 79 70 65 20 3d 20 73 71    int eType = sq
2e00: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
2e10: 28 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 65 54  (pVal);.  if( eT
2e20: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
2e30: 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70 4d 65   ){.    Mem *pMe
2e40: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
2e50: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2e60: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 2c 20 30  Affinity(pMem, 0
2e70: 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d 20 73  );.    eType = s
2e80: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
2e90: 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 72  e(pVal);.  }.  r
2ea0: 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a  eturn eType;.}..
2eb0: 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76  /*.** Exported v
2ec0: 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41  ersion of applyA
2ed0: 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20  ffinity(). This 
2ee0: 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c  one works on sql
2ef0: 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a  ite3_value*, .**
2f00: 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61   not the interna
2f10: 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a  l Mem* type..*/.
2f20: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
2f30: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a  eApplyAffinity(.
2f40: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
2f50: 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66  *pVal, .  u8 aff
2f60: 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63  inity, .  u8 enc
2f70: 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  .){.  applyAffin
2f80: 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c  ity((Mem *)pVal,
2f90: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b   affinity, enc);
2fa0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63  .}../*.** pMem c
2fb0: 75 72 72 65 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f  urrently only ho
2fc0: 6c 64 73 20 61 20 73 74 72 69 6e 67 20 74 79 70  lds a string typ
2fd0: 65 20 28 6f 72 20 6d 61 79 62 65 20 61 20 42 4c  e (or maybe a BL
2fe0: 4f 42 20 74 68 61 74 20 77 65 20 63 61 6e 0a 2a  OB that we can.*
2ff0: 2a 20 69 6e 74 65 72 70 72 65 74 20 61 73 20 61  * interpret as a
3000: 20 73 74 72 69 6e 67 20 69 66 20 77 65 20 77 61   string if we wa
3010: 6e 74 20 74 6f 29 2e 20 20 43 6f 6d 70 75 74 65  nt to).  Compute
3020: 20 69 74 73 20 63 6f 72 72 65 73 70 6f 6e 64 69   its correspondi
3030: 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69 63 20 74 79  ng.** numeric ty
3040: 70 65 2c 20 69 66 20 68 61 73 20 6f 6e 65 2e 20  pe, if has one. 
3050: 20 53 65 74 20 74 68 65 20 70 4d 65 6d 2d 3e 75   Set the pMem->u
3060: 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69  .r and pMem->u.i
3070: 20 66 69 65 6c 64 73 0a 2a 2a 20 61 63 63 6f 72   fields.** accor
3080: 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69  dingly..*/.stati
3090: 63 20 75 31 36 20 53 51 4c 49 54 45 5f 4e 4f 49  c u16 SQLITE_NOI
30a0: 4e 4c 49 4e 45 20 63 6f 6d 70 75 74 65 4e 75 6d  NLINE computeNum
30b0: 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d  ericType(Mem *pM
30c0: 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 28  em){.  assert( (
30d0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
30e0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
30f0: 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
3100: 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
3110: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
3120: 6f 62 29 29 21 3d 30 20 29 3b 0a 20 20 69 66 28  ob))!=0 );.  if(
3130: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 4d 65   sqlite3AtoF(pMe
3140: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72  m->z, &pMem->u.r
3150: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
3160: 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20  >enc)==0 ){.    
3170: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
3180: 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 69 36  if( sqlite3Atoi6
3190: 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  4(pMem->z, &pMem
31a0: 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.i, pMem->n, 
31b0: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49  pMem->enc)==SQLI
31c0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74  TE_OK ){.    ret
31d0: 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d  urn MEM_Int;.  }
31e0: 0a 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f 52 65  .  return MEM_Re
31f0: 61 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  al;.}../*.** Ret
3200: 75 72 6e 20 74 68 65 20 6e 75 6d 65 72 69 63 20  urn the numeric 
3210: 74 79 70 65 20 66 6f 72 20 70 4d 65 6d 2c 20 65  type for pMem, e
3220: 69 74 68 65 72 20 4d 45 4d 5f 49 6e 74 20 6f 72  ither MEM_Int or
3230: 20 4d 45 4d 5f 52 65 61 6c 20 6f 72 20 62 6f 74   MEM_Real or bot
3240: 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a  h or.** none.  .
3250: 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65 20 61 70 70  **.** Unlike app
3260: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
3270: 79 28 29 2c 20 74 68 69 73 20 72 6f 75 74 69 6e  y(), this routin
3280: 65 20 64 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66  e does not modif
3290: 79 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a  y pMem->flags..*
32a0: 2a 20 42 75 74 20 69 74 20 64 6f 65 73 20 73 65  * But it does se
32b0: 74 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64 20  t pMem->u.r and 
32c0: 70 4d 65 6d 2d 3e 75 2e 69 20 61 70 70 72 6f 70  pMem->u.i approp
32d0: 72 69 61 74 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74  riately..*/.stat
32e0: 69 63 20 75 31 36 20 6e 75 6d 65 72 69 63 54 79  ic u16 numericTy
32f0: 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20  pe(Mem *pMem){. 
3300: 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73   if( pMem->flags
3310: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
3320: 52 65 61 6c 29 20 29 7b 0a 20 20 20 20 72 65 74  Real) ){.    ret
3330: 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  urn pMem->flags 
3340: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
3350: 65 61 6c 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  eal);.  }.  if( 
3360: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
3370: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
3380: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 63   ){.    return c
3390: 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54 79 70  omputeNumericTyp
33a0: 65 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72  e(pMem);.  }.  r
33b0: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64  eturn 0;.}..#ifd
33c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
33d0: 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e 69  /*.** Write a ni
33e0: 63 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  ce string repres
33f0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
3400: 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c  contents of cell
3410: 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75   pMem.** into bu
3420: 66 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74  ffer zBuf, lengt
3430: 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20  h nBuf..*/.void 
3440: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72  sqlite3VdbeMemPr
3450: 65 74 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70  ettyPrint(Mem *p
3460: 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66 29  Mem, char *zBuf)
3470: 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73 72 20 3d  {.  char *zCsr =
3480: 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d   zBuf;.  int f =
3490: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20   pMem->flags;.. 
34a0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
34b0: 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d  ar *const encnam
34c0: 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22  es[] = {"(X)", "
34d0: 28 38 29 22 2c 20 22 28 31 36 4c 45 29 22 2c 20  (8)", "(16LE)", 
34e0: 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66  "(16BE)"};..  if
34f0: 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a  ( f&MEM_Blob ){.
3500: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 63      int i;.    c
3510: 68 61 72 20 63 3b 0a 20 20 20 20 69 66 28 20 66  har c;.    if( f
3520: 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20   & MEM_Dyn ){.  
3530: 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20      c = 'z';.   
3540: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3550: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
3560: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3570: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3580: 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20  MEM_Static ){.  
3590: 20 20 20 20 63 20 3d 20 27 74 27 3b 0a 20 20 20      c = 't';.   
35a0: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
35b0: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
35c0: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
35d0: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
35e0: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
35f0: 63 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61  c = 'e';.      a
3600: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3610: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29  _Static|MEM_Dyn)
3620: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3630: 65 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 73 27  e{.      c = 's'
3640: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
3650: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3660: 30 2c 20 7a 43 73 72 2c 20 22 25 63 22 2c 20 63  0, zCsr, "%c", c
3670: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3680: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3690: 43 73 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Csr);.    sqlite
36a0: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
36b0: 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65  zCsr, "%d[", pMe
36c0: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20  m->n);.    zCsr 
36d0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
36e0: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f  30(zCsr);.    fo
36f0: 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69  r(i=0; i<16 && i
3700: 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a  <pMem->n; i++){.
3710: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
3720: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3730: 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74 29  , "%02X", ((int)
3740: 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46  pMem->z[i] & 0xF
3750: 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  F));.      zCsr 
3760: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3770: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
3780: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31      for(i=0; i<1
3790: 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20  6 && i<pMem->n; 
37a0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61 72  i++){.      char
37b0: 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b   z = pMem->z[i];
37c0: 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32 20  .      if( z<32 
37d0: 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72  || z>126 ) *zCsr
37e0: 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  ++ = '.';.      
37f0: 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a  else *zCsr++ = z
3800: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
3810: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3820: 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20  0, zCsr, "]%s", 
3830: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
3840: 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b  nc]);.    zCsr +
3850: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
3860: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 69 66 28  0(zCsr);.    if(
3870: 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b   f & MEM_Zero ){
3880: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
3890: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
38a0: 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75  r,"+%dz",pMem->u
38b0: 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a  .nZero);.      z
38c0: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
38d0: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
38e0: 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20    }.    *zCsr = 
38f0: 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66  '\0';.  }else if
3900: 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b  ( f & MEM_Str ){
3910: 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20  .    int j, k;. 
3920: 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27     zBuf[0] = ' '
3930: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
3940: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a  M_Dyn ){.      z
3950: 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20  Buf[1] = 'z';.  
3960: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3970: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
3980: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3990: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
39a0: 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20   MEM_Static ){. 
39b0: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
39c0: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
39d0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
39e0: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
39f0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
3a00: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
3a10: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
3a20: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
3a30: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
3a40: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
3a50: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
3a60: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3a70: 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b  's';.    }.    k
3a80: 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 2;.    sqlite
3a90: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3aa0: 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20  &zBuf[k], "%d", 
3ab0: 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20  pMem->n);.    k 
3ac0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3ad0: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3ae0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b    zBuf[k++] = '[
3af0: 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20  ';.    for(j=0; 
3b00: 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e  j<15 && j<pMem->
3b10: 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75  n; j++){.      u
3b20: 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d  8 c = pMem->z[j]
3b30: 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d 30  ;.      if( c>=0
3b40: 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29 7b  x20 && c<0x7f ){
3b50: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
3b60: 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65  +] = c;.      }e
3b70: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  lse{.        zBu
3b80: 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20  f[k++] = '.';.  
3b90: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
3ba0: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b  zBuf[k++] = ']';
3bb0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3bc0: 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66 5b  rintf(100,&zBuf[
3bd0: 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  k], encnames[pMe
3be0: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20  m->enc]);.    k 
3bf0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3c00: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3c10: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b    zBuf[k++] = 0;
3c20: 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  .  }.}.#endif..#
3c30: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
3c40: 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74  UG./*.** Print t
3c50: 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72 65  he value of a re
3c60: 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63 69  gister for traci
3c70: 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a  ng purposes:.*/.
3c80: 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d 54  static void memT
3c90: 72 61 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a 70  racePrint(Mem *p
3ca0: 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67  ){.  if( p->flag
3cb0: 73 20 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s & MEM_Undefine
3cc0: 64 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  d ){.    printf(
3cd0: 22 20 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a 20  " undefined");. 
3ce0: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3cf0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
3d00: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 4e  {.    printf(" N
3d10: 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ULL");.  }else i
3d20: 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28  f( (p->flags & (
3d30: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3d40: 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  )==(MEM_Int|MEM_
3d50: 53 74 72 29 20 29 7b 0a 20 20 20 20 70 72 69 6e  Str) ){.    prin
3d60: 74 66 28 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70  tf(" si:%lld", p
3d70: 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20  ->u.i);.  }else 
3d80: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3d90: 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70 72  EM_Int ){.    pr
3da0: 69 6e 74 66 28 22 20 69 3a 25 6c 6c 64 22 2c 20  intf(" i:%lld", 
3db0: 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64 65 66  p->u.i);.#ifndef
3dc0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
3dd0: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d 65  ATING_POINT.  }e
3de0: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3df0: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
3e00: 20 20 20 70 72 69 6e 74 66 28 22 20 72 3a 25 67     printf(" r:%g
3e10: 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64  ", p->u.r);.#end
3e20: 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  if.  }else if( p
3e30: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
3e40: 77 53 65 74 20 29 7b 0a 20 20 20 20 70 72 69 6e  wSet ){.    prin
3e50: 74 66 28 22 20 28 72 6f 77 73 65 74 29 22 29 3b  tf(" (rowset)");
3e60: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68  .  }else{.    ch
3e70: 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20  ar zBuf[200];.  
3e80: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
3e90: 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c 20 7a  PrettyPrint(p, z
3ea0: 42 75 66 29 3b 0a 20 20 20 20 70 72 69 6e 74 66  Buf);.    printf
3eb0: 28 22 20 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20  (" %s", zBuf);. 
3ec0: 20 7d 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67   }.  if( p->flag
3ed0: 73 20 26 20 4d 45 4d 5f 53 75 62 74 79 70 65 20  s & MEM_Subtype 
3ee0: 29 20 70 72 69 6e 74 66 28 22 20 73 75 62 74 79  ) printf(" subty
3ef0: 70 65 3d 30 78 25 30 32 78 22 2c 20 70 2d 3e 65  pe=0x%02x", p->e
3f00: 53 75 62 74 79 70 65 29 3b 0a 7d 0a 73 74 61 74  Subtype);.}.stat
3f10: 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65 72  ic void register
3f20: 54 72 61 63 65 28 69 6e 74 20 69 52 65 67 2c 20  Trace(int iReg, 
3f30: 4d 65 6d 20 2a 70 29 7b 0a 20 20 70 72 69 6e 74  Mem *p){.  print
3f40: 66 28 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c 20  f("REG[%d] = ", 
3f50: 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61 63  iReg);.  memTrac
3f60: 65 50 72 69 6e 74 28 70 29 3b 0a 20 20 70 72 69  ePrint(p);.  pri
3f70: 6e 74 66 28 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e  ntf("\n");.}.#en
3f80: 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
3f90: 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69  TE_DEBUG.#  defi
3fa0: 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  ne REGISTER_TRAC
3fb0: 45 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c  E(R,M) if(db->fl
3fc0: 61 67 73 26 53 51 4c 49 54 45 5f 56 64 62 65 54  ags&SQLITE_VdbeT
3fd0: 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72 61  race)registerTra
3fe0: 63 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20  ce(R,M).#else.# 
3ff0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
4000: 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64  _TRACE(R,M).#end
4010: 69 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45  if...#ifdef VDBE
4020: 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a  _PROFILE../* .**
4030: 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69   hwtime.h contai
4040: 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62  ns inline assemb
4050: 6c 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70  ler code for imp
4060: 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69  lementing .** hi
4070: 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74  gh-performance t
4080: 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a  iming routines..
4090: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74  */.#include "hwt
40a0: 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a  ime.h"..#endif..
40b0: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f  #ifndef NDEBUG./
40c0: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
40d0: 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65  on is only calle
40e0: 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e  d from within an
40f0: 20 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73   assert() expres
4100: 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63  sion. It.** chec
4110: 6b 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69  ks that the sqli
4120: 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e  te3.nTransaction
4130: 20 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72   variable is cor
4140: 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a  rectly set to.**
4150: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e   the number of n
4160: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
4170: 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e  avepoints curren
4180: 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c  tly in the .** l
4190: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
41a0: 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70  ing at sqlite3.p
41b0: 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a  Savepoint..** .*
41c0: 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20  * Usage:.**.**  
41d0: 20 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b     assert( check
41e0: 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
41f0: 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20  b) );.*/.static 
4200: 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69  int checkSavepoi
4210: 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20  ntCount(sqlite3 
4220: 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20  *db){.  int n = 
4230: 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  0;.  Savepoint *
4240: 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70  p;.  for(p=db->p
4250: 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d  Savepoint; p; p=
4260: 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20  p->pNext) n++;. 
4270: 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d   assert( n==(db-
4280: 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
4290: 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
42a0: 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72  avepoint) );.  r
42b0: 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69  eturn 1;.}.#endi
42c0: 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  f../*.** Return 
42d0: 74 68 65 20 72 65 67 69 73 74 65 72 20 6f 66 20  the register of 
42e0: 70 4f 70 2d 3e 70 32 20 61 66 74 65 72 20 66 69  pOp->p2 after fi
42f0: 72 73 74 20 70 72 65 70 61 72 69 6e 67 20 69 74  rst preparing it
4300: 20 74 6f 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72   to be.** overwr
4310: 69 74 74 65 6e 20 77 69 74 68 20 61 6e 20 69 6e  itten with an in
4320: 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a  teger value..*/.
4330: 73 74 61 74 69 63 20 53 51 4c 49 54 45 5f 4e 4f  static SQLITE_NO
4340: 49 4e 4c 49 4e 45 20 4d 65 6d 20 2a 6f 75 74 32  INLINE Mem *out2
4350: 50 72 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c  PrereleaseWithCl
4360: 65 61 72 28 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a  ear(Mem *pOut){.
4370: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
4380: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
4390: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
43a0: 45 4d 5f 49 6e 74 3b 0a 20 20 72 65 74 75 72 6e  EM_Int;.  return
43b0: 20 70 4f 75 74 3b 0a 7d 0a 73 74 61 74 69 63 20   pOut;.}.static 
43c0: 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c 65  Mem *out2Prerele
43d0: 61 73 65 28 56 64 62 65 20 2a 70 2c 20 56 64 62  ase(Vdbe *p, Vdb
43e0: 65 4f 70 20 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d  eOp *pOp){.  Mem
43f0: 20 2a 70 4f 75 74 3b 0a 20 20 61 73 73 65 72 74   *pOut;.  assert
4400: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
4410: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
4420: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
4430: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
4440: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
4450: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41  pOp->p2];.  memA
4460: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
4470: 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 56 64 62  pOut);.  if( Vdb
4480: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74  eMemDynamic(pOut
4490: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
44a0: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 57 69  out2PrereleaseWi
44b0: 74 68 43 6c 65 61 72 28 70 4f 75 74 29 3b 0a 20  thClear(pOut);. 
44c0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74   }else{.    pOut
44d0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
44e0: 74 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 70 4f  t;.    return pO
44f0: 75 74 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a  ut;.  }.}.../*.*
4500: 2a 20 45 78 65 63 75 74 65 20 61 73 20 6d 75 63  * Execute as muc
4510: 68 20 6f 66 20 61 20 56 44 42 45 20 70 72 6f 67  h of a VDBE prog
4520: 72 61 6d 20 61 73 20 77 65 20 63 61 6e 2e 0a 2a  ram as we can..*
4530: 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 63 6f  * This is the co
4540: 72 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 73 74  re of sqlite3_st
4550: 65 70 28 29 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73  ep().  .*/.int s
4560: 71 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 0a  qlite3VdbeExec(.
4570: 20 20 56 64 62 65 20 2a 70 20 20 20 20 20 20 20    Vdbe *p       
4580: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4590: 54 68 65 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20  The VDBE */.){. 
45a0: 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f   Op *aOp = p->aO
45b0: 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  p;          /* C
45c0: 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f  opy of p->aOp */
45d0: 0a 20 20 4f 70 20 2a 70 4f 70 20 3d 20 61 4f 70  .  Op *pOp = aOp
45e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
45f0: 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61 74 69   Current operati
4600: 6f 6e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  on */.#if define
4610: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
4620: 7c 7c 20 64 65 66 69 6e 65 64 28 56 44 42 45 5f  || defined(VDBE_
4630: 50 52 4f 46 49 4c 45 29 0a 20 20 4f 70 20 2a 70  PROFILE).  Op *p
4640: 4f 72 69 67 4f 70 3b 20 20 20 20 20 20 20 20 20  OrigOp;         
4650: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f        /* Value o
4660: 66 20 70 4f 70 20 61 74 20 74 68 65 20 74 6f 70  f pOp at the top
4670: 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a   of the loop */.
4680: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
4690: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74  LITE_DEBUG.  int
46a0: 20 6e 45 78 74 72 61 44 65 6c 65 74 65 20 3d 20   nExtraDelete = 
46b0: 30 3b 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66  0;      /* Verif
46c0: 69 65 73 20 46 4f 52 44 45 4c 45 54 45 20 61 6e  ies FORDELETE an
46d0: 64 20 41 55 58 44 45 4c 45 54 45 20 66 6c 61 67  d AUXDELETE flag
46e0: 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  s */.#endif.  in
46f0: 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  t rc = SQLITE_OK
4700: 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75  ;        /* Valu
4710: 65 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20  e to return */. 
4720: 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70   sqlite3 *db = p
4730: 2d 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54  ->db;       /* T
4740: 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  he database */. 
4750: 20 75 38 20 72 65 73 65 74 53 63 68 65 6d 61 4f   u8 resetSchemaO
4760: 6e 46 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52  nFault = 0; /* R
4770: 65 73 65 74 20 73 63 68 65 6d 61 20 61 66 74 65  eset schema afte
4780: 72 20 61 6e 20 65 72 72 6f 72 20 69 66 20 70 6f  r an error if po
4790: 73 69 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65  sitive */.  u8 e
47a0: 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62  ncoding = ENC(db
47b0: 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61  );     /* The da
47c0: 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20  tabase encoding 
47d0: 2a 2f 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72  */.  int iCompar
47e0: 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  e = 0;          
47f0: 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73  /* Result of las
4800: 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65  t OP_Compare ope
4810: 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69  ration */.  unsi
4820: 67 6e 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30  gned nVmStep = 0
4830: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
4840: 20 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68   of virtual mach
4850: 69 6e 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66  ine steps */.#if
4860: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
4870: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
4880: 43 4b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  CK.  unsigned nP
4890: 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 30  rogressLimit = 0
48a0: 3b 2f 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67  ;/* Invoke xProg
48b0: 72 65 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53  ress() when nVmS
48c0: 74 65 70 20 72 65 61 63 68 65 73 20 74 68 69 73  tep reaches this
48d0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d   */.#endif.  Mem
48e0: 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d   *aMem = p->aMem
48f0: 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20  ;       /* Copy 
4900: 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20  of p->aMem */.  
4910: 4d 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20  Mem *pIn1 = 0;  
4920: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
4930: 74 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20  t input operand 
4940: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d  */.  Mem *pIn2 =
4950: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
4960: 2f 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65  /* 2nd input ope
4970: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
4980: 49 6e 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In3 = 0;        
4990: 20 20 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75       /* 3rd inpu
49a0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
49b0: 65 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20  em *pOut = 0;   
49c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74            /* Out
49d0: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
49e0: 20 69 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d   int *aPermute =
49f0: 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50   0;         /* P
4a00: 65 72 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f  ermutation of co
4a10: 6c 75 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d  lumns for OP_Com
4a20: 70 61 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61  pare */.  i64 la
4a30: 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61  stRowid = db->la
4a40: 73 74 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76  stRowid;  /* Sav
4a50: 65 64 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ed value of the 
4a60: 6c 61 73 74 20 69 6e 73 65 72 74 20 52 4f 57 49  last insert ROWI
4a70: 44 20 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45  D */.#ifdef VDBE
4a80: 5f 50 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73  _PROFILE.  u64 s
4a90: 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  tart;           
4aa0: 20 20 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f        /* CPU clo
4ab0: 63 6b 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72  ck count at star
4ac0: 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23  t of opcode */.#
4ad0: 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53  endif.  /*** INS
4ae0: 45 52 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20  ERT STACK UNION 
4af0: 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73  HERE ***/..  ass
4b00: 65 72 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56  ert( p->magic==V
4b10: 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b  DBE_MAGIC_RUN );
4b20: 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65    /* sqlite3_ste
4b30: 70 28 29 20 76 65 72 69 66 69 65 73 20 74 68 69  p() verifies thi
4b40: 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64  s */.  sqlite3Vd
4b50: 62 65 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66  beEnter(p);.  if
4b60: 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
4b70: 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20  NOMEM ){.    /* 
4b80: 54 68 69 73 20 68 61 70 70 65 6e 73 20 69 66 20  This happens if 
4b90: 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64  a malloc() insid
4ba0: 65 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69  e a call to sqli
4bb0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
4bc0: 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69  ) or.    ** sqli
4bd0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31  te3_column_text1
4be0: 36 28 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a  6() failed.  */.
4bf0: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
4c00: 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
4c10: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc==SQLITE_OK 
4c20: 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d  || (p->rc&0xff)=
4c30: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a  =SQLITE_BUSY );.
4c40: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
4c50: 52 65 61 64 65 72 20 7c 7c 20 70 2d 3e 72 65 61  Reader || p->rea
4c60: 64 4f 6e 6c 79 21 3d 30 20 29 3b 0a 20 20 70 2d  dOnly!=0 );.  p-
4c70: 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b  >rc = SQLITE_OK;
4c80: 0a 20 20 70 2d 3e 69 43 75 72 72 65 6e 74 54 69  .  p->iCurrentTi
4c90: 6d 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  me = 0;.  assert
4ca0: 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20  ( p->explain==0 
4cb0: 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53  );.  p->pResultS
4cc0: 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75  et = 0;.  db->bu
4cd0: 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20  syHandler.nBusy 
4ce0: 3d 20 30 3b 0a 20 20 69 66 28 20 64 62 2d 3e 75  = 0;.  if( db->u
4cf0: 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
4d00: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
4d10: 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20  _to_interrupt;. 
4d20: 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
4d30: 61 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e 64  aceSql(p);.#ifnd
4d40: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
4d50: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
4d60: 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67  .  if( db->xProg
4d70: 72 65 73 73 20 29 7b 0a 20 20 20 20 75 33 32 20  ress ){.    u32 
4d80: 69 50 72 69 6f 72 20 3d 20 70 2d 3e 61 43 6f 75  iPrior = p->aCou
4d90: 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54  nter[SQLITE_STMT
4da0: 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 3b  STATUS_VM_STEP];
4db0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 30 20 3c  .    assert( 0 <
4dc0: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
4dd0: 73 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65  s );.    nProgre
4de0: 73 73 4c 69 6d 69 74 20 3d 20 64 62 2d 3e 6e 50  ssLimit = db->nP
4df0: 72 6f 67 72 65 73 73 4f 70 73 20 2d 20 28 69 50  rogressOps - (iP
4e00: 72 69 6f 72 20 25 20 64 62 2d 3e 6e 50 72 6f 67  rior % db->nProg
4e10: 72 65 73 73 4f 70 73 29 3b 0a 20 20 7d 0a 23 65  ressOps);.  }.#e
4e20: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
4e30: 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74  TE_DEBUG.  sqlit
4e40: 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
4e50: 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e  loc();.  if( p->
4e60: 70 63 3d 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e  pc==0.   && (p->
4e70: 64 62 2d 3e 66 6c 61 67 73 20 26 20 28 53 51 4c  db->flags & (SQL
4e80: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c  ITE_VdbeListing|
4e90: 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 7c 53  SQLITE_VdbeEQP|S
4ea0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 29  QLITE_VdbeTrace)
4eb0: 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e  )!=0.  ){.    in
4ec0: 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63  t i;.    int onc
4ed0: 65 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74  e = 1;.    sqlit
4ee0: 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70  e3VdbePrintSql(p
4ef0: 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62  );.    if( p->db
4f00: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
4f10: 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a  _VdbeListing ){.
4f20: 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 56 44        printf("VD
4f30: 42 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69  BE Program Listi
4f40: 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66  ng:\n");.      f
4f50: 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70  or(i=0; i<p->nOp
4f60: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
4f70: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
4f80: 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 61  Op(stdout, i, &a
4f90: 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  Op[i]);.      }.
4fa0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d      }.    if( p-
4fb0: 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  >db->flags & SQL
4fc0: 49 54 45 5f 56 64 62 65 45 51 50 20 29 7b 0a 20  ITE_VdbeEQP ){. 
4fd0: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
4fe0: 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20  p->nOp; i++){.  
4ff0: 20 20 20 20 20 20 69 66 28 20 61 4f 70 5b 69 5d        if( aOp[i]
5000: 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c  .opcode==OP_Expl
5010: 61 69 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ain ){.         
5020: 20 69 66 28 20 6f 6e 63 65 20 29 20 70 72 69 6e   if( once ) prin
5030: 74 66 28 22 56 44 42 45 20 51 75 65 72 79 20 50  tf("VDBE Query P
5040: 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20  lan:\n");.      
5050: 20 20 20 20 70 72 69 6e 74 66 28 22 25 73 5c 6e      printf("%s\n
5060: 22 2c 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b  ", aOp[i].p4.z);
5070: 0a 20 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20  .          once 
5080: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  = 0;.        }. 
5090: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
50a0: 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67   if( p->db->flag
50b0: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54  s & SQLITE_VdbeT
50c0: 72 61 63 65 20 29 20 20 70 72 69 6e 74 66 28 22  race )  printf("
50d0: 56 44 42 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b  VDBE Trace:\n");
50e0: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e  .  }.  sqlite3En
50f0: 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  dBenignMalloc();
5100: 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 4f  .#endif.  for(pO
5110: 70 3d 26 61 4f 70 5b 70 2d 3e 70 63 5d 3b 20 31  p=&aOp[p->pc]; 1
5120: 3b 20 70 4f 70 2b 2b 29 7b 0a 20 20 20 20 2f 2a  ; pOp++){.    /*
5130: 20 45 72 72 6f 72 73 20 61 72 65 20 64 65 74 65   Errors are dete
5140: 63 74 65 64 20 62 79 20 69 6e 64 69 76 69 64 75  cted by individu
5150: 61 6c 20 6f 70 63 6f 64 65 73 2c 20 77 69 74 68  al opcodes, with
5160: 20 61 6e 20 69 6d 6d 65 64 69 61 74 65 0a 20 20   an immediate.  
5170: 20 20 2a 2a 20 6a 75 6d 70 73 20 74 6f 20 61 62    ** jumps to ab
5180: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
5190: 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28  . */.    assert(
51a0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
51b0: 3b 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ;..    assert( p
51c0: 4f 70 3e 3d 61 4f 70 20 26 26 20 70 4f 70 3c 26  Op>=aOp && pOp<&
51d0: 61 4f 70 5b 70 2d 3e 6e 4f 70 5d 29 3b 0a 23 69  aOp[p->nOp]);.#i
51e0: 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
51f0: 45 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73 71  E.    start = sq
5200: 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 23  lite3Hwtime();.#
5210: 65 6e 64 69 66 0a 20 20 20 20 6e 56 6d 53 74 65  endif.    nVmSte
5220: 70 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  p++;.#ifdef SQLI
5230: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
5240: 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20 69 66  CANSTATUS.    if
5250: 28 20 70 2d 3e 61 6e 45 78 65 63 20 29 20 70 2d  ( p->anExec ) p-
5260: 3e 61 6e 45 78 65 63 5b 28 69 6e 74 29 28 70 4f  >anExec[(int)(pO
5270: 70 2d 61 4f 70 29 5d 2b 2b 3b 0a 23 65 6e 64 69  p-aOp)]++;.#endi
5280: 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61  f..    /* Only a
5290: 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20 69 66 20  llow tracing if 
52a0: 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20  SQLITE_DEBUG is 
52b0: 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a  defined..    */.
52c0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
52d0: 42 55 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  BUG.    if( db->
52e0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
52f0: 64 62 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20  dbeTrace ){.    
5300: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
5310: 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 28 69 6e  ntOp(stdout, (in
5320: 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 2c 20 70  t)(pOp - aOp), p
5330: 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  Op);.    }.#endi
5340: 66 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a  f.      ..    /*
5350: 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66   Check to see if
5360: 20 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75   we need to simu
5370: 6c 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70  late an interrup
5380: 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61  t.  This only ha
5390: 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20  ppens.    ** if 
53a0: 77 65 20 68 61 76 65 20 61 20 73 70 65 63 69 61  we have a specia
53b0: 6c 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20  l test build..  
53c0: 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49    */.#ifdef SQLI
53d0: 54 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20  TE_TEST.    if( 
53e0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
53f0: 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20  t_count>0 ){.   
5400: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72     sqlite3_inter
5410: 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20  rupt_count--;.  
5420: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
5430: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d  interrupt_count=
5440: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  =0 ){.        sq
5450: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
5460: 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  db);.      }.   
5470: 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f   }.#endif..    /
5480: 2a 20 53 61 6e 69 74 79 20 63 68 65 63 6b 69 6e  * Sanity checkin
5490: 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70 65 72 61  g on other opera
54a0: 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  nds */.#ifdef SQ
54b0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 61  LITE_DEBUG.    a
54c0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c  ssert( pOp->opfl
54d0: 61 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f  ags==sqlite3Opco
54e0: 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e  deProperty[pOp->
54f0: 6f 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69  opcode] );.    i
5500: 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  f( (pOp->opflags
5510: 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30   & OPFLG_IN1)!=0
5520: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
5530: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20  ( pOp->p1>0 );. 
5540: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5550: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p1<=(p->nMem+1
5560: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
5570: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5580: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
5590: 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20  [pOp->p1]) );.  
55a0: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
55b0: 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49  te3VdbeCheckMemI
55c0: 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b  nvariants(&aMem[
55d0: 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20  pOp->p1]) );.   
55e0: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
55f0: 45 28 70 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d  E(pOp->p1, &aMem
5600: 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20  [pOp->p1]);.    
5610: 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  }.    if( (pOp->
5620: 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f  opflags & OPFLG_
5630: 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN2)!=0 ){.     
5640: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5650: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5660: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d  rt( pOp->p2<=(p-
5670: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
5680: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61  rsor) );.      a
5690: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
56a0: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  d(&aMem[pOp->p2]
56b0: 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ) );.      asser
56c0: 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  t( sqlite3VdbeCh
56d0: 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73  eckMemInvariants
56e0: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29  (&aMem[pOp->p2])
56f0: 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54   );.      REGIST
5700: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
5710: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  , &aMem[pOp->p2]
5720: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
5730: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
5740: 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29   OPFLG_IN3)!=0 )
5750: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
5760: 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20  pOp->p3>0 );.   
5770: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5780: 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
5790: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
57a0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
57b0: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
57c0: 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
57d0: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
57e0: 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76  3VdbeCheckMemInv
57f0: 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f  ariants(&aMem[pO
5800: 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20  p->p3]) );.     
5810: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5820: 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70  pOp->p3, &aMem[p
5830: 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a  Op->p3]);.    }.
5840: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
5850: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55  flags & OPFLG_OU
5860: 54 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  T2)!=0 ){.      
5870: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
5880: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
5890: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  t( pOp->p2<=(p->
58a0: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
58b0: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d 65  sor) );.      me
58c0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
58d0: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  , &aMem[pOp->p2]
58e0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
58f0: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
5900: 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20   OPFLG_OUT3)!=0 
5910: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
5920: 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
5930: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5940: 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p3<=(p->nMem+1 
5950: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
5960: 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  .      memAboutT
5970: 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d  oChange(p, &aMem
5980: 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20  [pOp->p3]);.    
5990: 7d 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  }.#endif.#if def
59a0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
59b0: 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 56 44  G) || defined(VD
59c0: 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20 20 20  BE_PROFILE).    
59d0: 70 4f 72 69 67 4f 70 20 3d 20 70 4f 70 3b 0a 23  pOrigOp = pOp;.#
59e0: 65 6e 64 69 66 0a 20 20 0a 20 20 20 20 73 77 69  endif.  .    swi
59f0: 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
5a00: 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ){../**********
5a10: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a50: 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c  ***.** What foll
5a60: 6f 77 73 20 69 73 20 61 20 6d 61 73 73 69 76 65  ows is a massive
5a70: 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
5a80: 74 20 77 68 65 72 65 20 65 61 63 68 20 63 61 73  t where each cas
5a90: 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a  e implements a.*
5aa0: 2a 20 73 65 70 61 72 61 74 65 20 69 6e 73 74 72  * separate instr
5ab0: 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20 76 69  uction in the vi
5ac0: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20  rtual machine.  
5ad0: 49 66 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65  If we follow the
5ae0: 20 75 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74   usual.** indent
5af0: 61 74 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e  ation convention
5b00: 73 2c 20 65 61 63 68 20 63 61 73 65 20 73 68 6f  s, each case sho
5b10: 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20  uld be indented 
5b20: 62 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75  by 6 spaces.  Bu
5b30: 74 0a 2a 2a 20 74 68 61 74 20 69 73 20 61 20 6c  t.** that is a l
5b40: 6f 74 20 6f 66 20 77 61 73 74 65 64 20 73 70 61  ot of wasted spa
5b50: 63 65 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d  ce on the left m
5b60: 61 72 67 69 6e 2e 20 20 53 6f 20 74 68 65 20 63  argin.  So the c
5b70: 6f 64 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68  ode within.** th
5b80: 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65  e switch stateme
5b90: 6e 74 20 77 69 6c 6c 20 62 72 65 61 6b 20 77 69  nt will break wi
5ba0: 74 68 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e  th convention an
5bb0: 64 20 62 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e  d be flush-left.
5bc0: 20 41 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20   Another.** big 
5bd0: 63 6f 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72  comment (similar
5be0: 20 74 6f 20 74 68 69 73 20 6f 6e 65 29 20 77 69   to this one) wi
5bf0: 6c 6c 20 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e  ll mark the poin
5c00: 74 20 69 6e 20 74 68 65 20 63 6f 64 65 20 77 68  t in the code wh
5c10: 65 72 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69  ere.** we transi
5c20: 74 69 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72  tion back to nor
5c30: 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e  mal indentation.
5c40: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61  .**.** The forma
5c50: 74 74 69 6e 67 20 6f 66 20 65 61 63 68 20 63 61  tting of each ca
5c60: 73 65 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e  se is important.
5c70: 20 20 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 66    The makefile f
5c80: 6f 72 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e  or SQLite.** gen
5c90: 65 72 61 74 65 73 20 74 77 6f 20 43 20 66 69 6c  erates two C fil
5ca0: 65 73 20 22 6f 70 63 6f 64 65 73 2e 68 22 20 61  es "opcodes.h" a
5cb0: 6e 64 20 22 6f 70 63 6f 64 65 73 2e 63 22 20 62  nd "opcodes.c" b
5cc0: 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a  y scanning this.
5cd0: 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20  ** file looking 
5ce0: 66 6f 72 20 6c 69 6e 65 73 20 74 68 61 74 20 62  for lines that b
5cf0: 65 67 69 6e 20 77 69 74 68 20 22 63 61 73 65 20  egin with "case 
5d00: 4f 50 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f 64  OP_".  The opcod
5d10: 65 73 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69  es.h files.** wi
5d20: 6c 6c 20 62 65 20 66 69 6c 6c 65 64 20 77 69 74  ll be filled wit
5d30: 68 20 23 64 65 66 69 6e 65 73 20 74 68 61 74 20  h #defines that 
5d40: 67 69 76 65 20 75 6e 69 71 75 65 20 69 6e 74 65  give unique inte
5d50: 67 65 72 20 76 61 6c 75 65 73 20 74 6f 20 65 61  ger values to ea
5d60: 63 68 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64  ch.** opcode and
5d70: 20 74 68 65 20 6f 70 63 6f 64 65 73 2e 63 20 66   the opcodes.c f
5d80: 69 6c 65 20 69 73 20 66 69 6c 6c 65 64 20 77 69  ile is filled wi
5d90: 74 68 20 61 6e 20 61 72 72 61 79 20 6f 66 20 73  th an array of s
5da0: 74 72 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20  trings where.** 
5db0: 65 61 63 68 20 73 74 72 69 6e 67 20 69 73 20 74  each string is t
5dc0: 68 65 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65  he symbolic name
5dd0: 20 66 6f 72 20 74 68 65 20 63 6f 72 72 65 73 70   for the corresp
5de0: 6f 6e 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20  onding opcode.  
5df0: 49 66 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 73  If the.** case s
5e00: 74 61 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c  tatement is foll
5e10: 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e  owed by a commen
5e20: 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 2f  t of the form "/
5e30: 23 20 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f  # same as ... #/
5e40: 22 0a 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e  ".** that commen
5e50: 74 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  t is used to det
5e60: 65 72 6d 69 6e 65 20 74 68 65 20 70 61 72 74 69  ermine the parti
5e70: 63 75 6c 61 72 20 76 61 6c 75 65 20 6f 66 20 74  cular value of t
5e80: 68 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  he opcode..**.**
5e90: 20 4f 74 68 65 72 20 6b 65 79 77 6f 72 64 73 20   Other keywords 
5ea0: 69 6e 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  in the comment t
5eb0: 68 61 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68  hat follows each
5ec0: 20 63 61 73 65 20 61 72 65 20 75 73 65 64 20 74   case are used t
5ed0: 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20 74  o.** construct t
5ee0: 68 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c  he OPFLG_INITIAL
5ef0: 49 5a 45 52 20 76 61 6c 75 65 20 74 68 61 74 20  IZER value that 
5f00: 69 6e 69 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f  initializes opco
5f10: 64 65 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a  deProperty[]..**
5f20: 20 4b 65 79 77 6f 72 64 73 20 69 6e 63 6c 75 64   Keywords includ
5f30: 65 3a 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33  e: in1, in2, in3
5f40: 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53  , out2, out3.  S
5f50: 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f  ee.** the mkopco
5f60: 64 65 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66  deh.awk script f
5f70: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
5f80: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  formation..**.**
5f90: 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61   Documentation a
5fa0: 62 6f 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65  bout VDBE opcode
5fb0: 73 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 62  s is generated b
5fc0: 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20  y scanning this 
5fd0: 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65  file.** for line
5fe0: 73 20 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69  s of that contai
5ff0: 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68  n "Opcode:".  Th
6000: 61 74 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20  at line and all 
6010: 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f  subsequent.** co
6020: 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20  mment lines are 
6030: 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65  used in the gene
6040: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70  ration of the op
6050: 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65  code.html docume
6060: 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e  ntation.** file.
6070: 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a  .**.** SUMMARY:.
6080: 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74  **.**     Format
6090: 74 69 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e  ting is importan
60a0: 74 20 74 6f 20 73 63 72 69 70 74 73 20 74 68 61  t to scripts tha
60b0: 74 20 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65  t scan this file
60c0: 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20  ..**     Do not 
60d0: 64 65 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65  deviate from the
60e0: 20 66 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c   formatting styl
60f0: 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75  e currently in u
6100: 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a  se..**.*********
6110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6150: 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ****/../* Opcode
6160: 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a  :  Goto * P2 * *
6170: 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f   *.**.** An unco
6180: 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74  nditional jump t
6190: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a  o address P2..**
61a0: 20 54 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   The next instru
61b0: 63 74 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77  ction executed w
61c0: 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f  ill be .** the o
61d0: 6e 65 20 61 74 20 69 6e 64 65 78 20 50 32 20 66  ne at index P2 f
61e0: 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
61f0: 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67  g of.** the prog
6200: 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ram..**.** The P
6210: 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e  1 parameter is n
6220: 6f 74 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64  ot actually used
6230: 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   by this opcode.
6240: 20 20 48 6f 77 65 76 65 72 2c 20 69 74 0a 2a 2a    However, it.**
6250: 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 20 73 65   is sometimes se
6260: 74 20 74 6f 20 31 20 69 6e 73 74 65 61 64 20 6f  t to 1 instead o
6270: 66 20 30 20 61 73 20 61 20 68 69 6e 74 20 74 6f  f 0 as a hint to
6280: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e   the command-lin
6290: 65 20 73 68 65 6c 6c 0a 2a 2a 20 74 68 61 74 20  e shell.** that 
62a0: 74 68 69 73 20 47 6f 74 6f 20 69 73 20 74 68 65  this Goto is the
62b0: 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f   bottom of a loo
62c0: 70 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 6c  p and that the l
62d0: 69 6e 65 73 20 66 72 6f 6d 20 50 32 20 64 6f 77  ines from P2 dow
62e0: 6e 0a 2a 2a 20 74 6f 20 74 68 65 20 63 75 72 72  n.** to the curr
62f0: 65 6e 74 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20  ent line should 
6300: 62 65 20 69 6e 64 65 6e 74 65 64 20 66 6f 72 20  be indented for 
6310: 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 2e 0a  EXPLAIN output..
6320: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a  */.case OP_Goto:
6330: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
6340: 2a 20 6a 75 6d 70 20 2a 2f 0a 6a 75 6d 70 5f 74  * jump */.jump_t
6350: 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66  o_p2_and_check_f
6360: 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20  or_interrupt:.  
6370: 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e  pOp = &aOp[pOp->
6380: 70 32 20 2d 20 31 5d 3b 0a 0a 20 20 2f 2a 20 4f  p2 - 1];..  /* O
6390: 70 63 6f 64 65 73 20 74 68 61 74 20 61 72 65 20  pcodes that are 
63a0: 75 73 65 64 20 61 73 20 74 68 65 20 62 6f 74 74  used as the bott
63b0: 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50  om of a loop (OP
63c0: 5f 4e 65 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a  _Next, OP_Prev,.
63d0: 20 20 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 4f    ** OP_VNext, O
63e0: 50 5f 52 6f 77 53 65 74 4e 65 78 74 2c 20 6f 72  P_RowSetNext, or
63f0: 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 29 20   OP_SorterNext) 
6400: 61 6c 6c 20 6a 75 6d 70 20 68 65 72 65 20 75 70  all jump here up
6410: 6f 6e 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69  on.  ** completi
6420: 6f 6e 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65  on.  Check to se
6430: 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74  e if sqlite3_int
6440: 65 72 72 75 70 74 28 29 20 68 61 73 20 62 65 65  errupt() has bee
6450: 6e 20 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72  n called.  ** or
6460: 20 69 66 20 74 68 65 20 70 72 6f 67 72 65 73 73   if the progress
6470: 20 63 61 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20   callback needs 
6480: 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a  to be invoked. .
6490: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63    **.  ** This c
64a0: 6f 64 65 20 75 73 65 73 20 75 6e 73 74 72 75 63  ode uses unstruc
64b0: 74 75 72 65 64 20 22 67 6f 74 6f 22 20 73 74 61  tured "goto" sta
64c0: 74 65 6d 65 6e 74 73 20 61 6e 64 20 64 6f 65 73  tements and does
64d0: 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e   not look clean.
64e0: 0a 20 20 2a 2a 20 42 75 74 20 74 68 61 74 20 69  .  ** But that i
64f0: 73 20 6e 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f  s not due to slo
6500: 70 70 79 20 63 6f 64 69 6e 67 20 68 61 62 69 74  ppy coding habit
6510: 73 2e 20 54 68 65 20 63 6f 64 65 20 69 73 20 77  s. The code is w
6520: 72 69 74 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a  ritten this.  **
6530: 20 77 61 79 20 66 6f 72 20 70 65 72 66 6f 72 6d   way for perform
6540: 61 6e 63 65 2c 20 74 6f 20 61 76 6f 69 64 20 68  ance, to avoid h
6550: 61 76 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65  aving to run the
6560: 20 69 6e 74 65 72 72 75 70 74 20 61 6e 64 20 70   interrupt and p
6570: 72 6f 67 72 65 73 73 0a 20 20 2a 2a 20 63 68 65  rogress.  ** che
6580: 63 6b 73 20 6f 6e 20 65 76 65 72 79 20 6f 70 63  cks on every opc
6590: 6f 64 65 2e 20 20 54 68 69 73 20 68 65 6c 70 73  ode.  This helps
65a0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
65b0: 74 6f 20 72 75 6e 20 61 62 6f 75 74 20 31 2e 35  to run about 1.5
65c0: 25 0a 20 20 2a 2a 20 66 61 73 74 65 72 20 61 63  %.  ** faster ac
65d0: 63 6f 72 64 69 6e 67 20 74 6f 20 22 76 61 6c 67  cording to "valg
65e0: 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68  rind --tool=cach
65f0: 65 67 72 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b  egrind" */.check
6600: 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a  _for_interrupt:.
6610: 20 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49    if( db->u1.isI
6620: 6e 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74  nterrupted ) got
6630: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69  o abort_due_to_i
6640: 6e 74 65 72 72 75 70 74 3b 0a 23 69 66 6e 64 65  nterrupt;.#ifnde
6650: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
6660: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
6670: 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72    /* Call the pr
6680: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
6690: 69 66 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75  if it is configu
66a0: 72 65 64 20 61 6e 64 20 74 68 65 20 72 65 71 75  red and the requ
66b0: 69 72 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a  ired number.  **
66c0: 20 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61 76   of VDBE ops hav
66d0: 65 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20  e been executed 
66e0: 28 65 69 74 68 65 72 20 73 69 6e 63 65 20 74 68  (either since th
66f0: 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  is invocation of
6700: 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62  .  ** sqlite3Vdb
6710: 65 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65  eExec() or since
6720: 20 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20 70   last time the p
6730: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
6740: 20 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20   was called)..  
6750: 2a 2a 20 49 66 20 74 68 65 20 70 72 6f 67 72 65  ** If the progre
6760: 73 73 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75  ss callback retu
6770: 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78  rns non-zero, ex
6780: 69 74 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d  it the virtual m
6790: 61 63 68 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a  achine with.  **
67a0: 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53   a return code S
67b0: 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a  QLITE_ABORT..  *
67c0: 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f  /.  if( db->xPro
67d0: 67 72 65 73 73 21 3d 30 20 26 26 20 6e 56 6d 53  gress!=0 && nVmS
67e0: 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69  tep>=nProgressLi
67f0: 6d 69 74 20 29 7b 0a 20 20 20 20 61 73 73 65 72  mit ){.    asser
6800: 74 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73  t( db->nProgress
6810: 4f 70 73 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50  Ops!=0 );.    nP
6820: 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e  rogressLimit = n
6830: 56 6d 53 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72  VmStep + db->nPr
6840: 6f 67 72 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d  ogressOps - (nVm
6850: 53 74 65 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65  Step%db->nProgre
6860: 73 73 4f 70 73 29 3b 0a 20 20 20 20 69 66 28 20  ssOps);.    if( 
6870: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62  db->xProgress(db
6880: 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 20  ->pProgressArg) 
6890: 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
68a0: 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a  LITE_INTERRUPT;.
68b0: 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
68c0: 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
68d0: 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a     }.  }.#endif.
68e0: 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f    .  break;.}../
68f0: 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62  * Opcode:  Gosub
6900: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
6910: 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72  ** Write the cur
6920: 72 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74  rent address ont
6930: 6f 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a  o register P1.**
6940: 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74   and then jump t
6950: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f  o address P2..*/
6960: 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20  .case OP_Gosub: 
6970: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
6980: 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
6990: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70  ( pOp->p1>0 && p
69a0: 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p1<=(p->nMem
69b0: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
69c0: 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
69d0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
69e0: 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79  ssert( VdbeMemDy
69f0: 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29  namic(pIn1)==0 )
6a00: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
6a10: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
6a20: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
6a30: 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e  EM_Int;.  pIn1->
6a40: 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 2d  u.i = (int)(pOp-
6a50: 61 4f 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52  aOp);.  REGISTER
6a60: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
6a70: 70 49 6e 31 29 3b 0a 0a 20 20 2f 2a 20 4d 6f 73  pIn1);..  /* Mos
6a80: 74 20 6a 75 6d 70 20 6f 70 65 72 61 74 69 6f 6e  t jump operation
6a90: 73 20 64 6f 20 61 20 67 6f 74 6f 20 74 6f 20 74  s do a goto to t
6aa0: 68 69 73 20 73 70 6f 74 20 69 6e 20 6f 72 64 65  his spot in orde
6ab0: 72 20 74 6f 20 75 70 64 61 74 65 0a 20 20 2a 2a  r to update.  **
6ac0: 20 74 68 65 20 70 4f 70 20 70 6f 69 6e 74 65 72   the pOp pointer
6ad0: 2e 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 3a  . */.jump_to_p2:
6ae0: 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f  .  pOp = &aOp[pO
6af0: 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 62 72  p->p2 - 1];.  br
6b00: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
6b10: 65 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20  e:  Return P1 * 
6b20: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  * * *.**.** Jump
6b30: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
6b40: 74 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74  truction after t
6b50: 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65  he address in re
6b60: 67 69 73 74 65 72 20 50 31 2e 20 20 41 66 74 65  gister P1.  Afte
6b70: 72 0a 2a 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72  r.** the jump, r
6b80: 65 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d  egister P1 becom
6b90: 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f  es undefined..*/
6ba0: 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a  .case OP_Return:
6bb0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
6bc0: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
6bd0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
6be0: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
6bf0: 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29  flags==MEM_Int )
6c00: 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  ;.  pOp = &aOp[p
6c10: 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 70 49 6e  In1->u.i];.  pIn
6c20: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55  1->flags = MEM_U
6c30: 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61  ndefined;.  brea
6c40: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6c50: 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20 50   InitCoroutine P
6c60: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
6c70: 2a 20 53 65 74 20 75 70 20 72 65 67 69 73 74 65  * Set up registe
6c80: 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
6c90: 77 69 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74 68  will Yield to th
6ca0: 65 20 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c  e coroutine.** l
6cb0: 6f 63 61 74 65 64 20 61 74 20 61 64 64 72 65 73  ocated at addres
6cc0: 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  s P3..**.** If P
6cd0: 32 21 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f  2!=0 then the co
6ce0: 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e  routine implemen
6cf0: 74 61 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65  tation immediate
6d00: 6c 79 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68  ly follows.** th
6d10: 69 73 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a  is opcode.  So j
6d20: 75 6d 70 20 6f 76 65 72 20 74 68 65 20 63 6f 72  ump over the cor
6d30: 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74  outine implement
6d40: 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72  ation to.** addr
6d50: 65 73 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65  ess P2..**.** Se
6d60: 65 20 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75  e also: EndCorou
6d70: 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  tine.*/.case OP_
6d80: 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b  InitCoroutine: {
6d90: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
6da0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
6db0: 31 3e 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c  1>0 &&  pOp->p1<
6dc0: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
6dd0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61  >nCursor) );.  a
6de0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d  ssert( pOp->p2>=
6df0: 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e  0 && pOp->p2<p->
6e00: 6e 4f 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nOp );.  assert(
6e10: 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70   pOp->p3>=0 && p
6e20: 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p3<p->nOp );
6e30: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
6e40: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
6e50: 72 74 28 20 21 56 64 62 65 4d 65 6d 44 79 6e 61  rt( !VdbeMemDyna
6e60: 6d 69 63 28 70 4f 75 74 29 20 29 3b 0a 20 20 70  mic(pOut) );.  p
6e70: 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e  Out->u.i = pOp->
6e80: 70 33 20 2d 20 31 3b 0a 20 20 70 4f 75 74 2d 3e  p3 - 1;.  pOut->
6e90: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
6ea0: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29  .  if( pOp->p2 )
6eb0: 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
6ec0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6ed0: 20 4f 70 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72   Opcode:  EndCor
6ee0: 6f 75 74 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20  outine P1 * * * 
6ef0: 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74  *.**.** The inst
6f00: 72 75 63 74 69 6f 6e 20 61 74 20 74 68 65 20 61  ruction at the a
6f10: 64 64 72 65 73 73 20 69 6e 20 72 65 67 69 73 74  ddress in regist
6f20: 65 72 20 50 31 20 69 73 20 61 20 59 69 65 6c 64  er P1 is a Yield
6f30: 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65  ..** Jump to the
6f40: 20 50 32 20 70 61 72 61 6d 65 74 65 72 20 6f 66   P2 parameter of
6f50: 20 74 68 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20   that Yield..** 
6f60: 41 66 74 65 72 20 74 68 65 20 6a 75 6d 70 2c 20  After the jump, 
6f70: 72 65 67 69 73 74 65 72 20 50 31 20 62 65 63 6f  register P1 beco
6f80: 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a  mes undefined..*
6f90: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49  *.** See also: I
6fa0: 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a  nitCoroutine.*/.
6fb0: 63 61 73 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75  case OP_EndCorou
6fc0: 74 69 6e 65 3a 20 7b 20 20 20 20 20 20 20 20 20  tine: {         
6fd0: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64    /* in1 */.  Vd
6fe0: 62 65 4f 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20  beOp *pCaller;. 
6ff0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
7000: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
7010: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d  ( pIn1->flags==M
7020: 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65  EM_Int );.  asse
7030: 72 74 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30  rt( pIn1->u.i>=0
7040: 20 26 26 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d   && pIn1->u.i<p-
7050: 3e 6e 4f 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65  >nOp );.  pCalle
7060: 72 20 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75  r = &aOp[pIn1->u
7070: 2e 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  .i];.  assert( p
7080: 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d  Caller->opcode==
7090: 4f 50 5f 59 69 65 6c 64 20 29 3b 0a 20 20 61 73  OP_Yield );.  as
70a0: 73 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70  sert( pCaller->p
70b0: 32 3e 3d 30 20 26 26 20 70 43 61 6c 6c 65 72 2d  2>=0 && pCaller-
70c0: 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  >p2<p->nOp );.  
70d0: 70 4f 70 20 3d 20 26 61 4f 70 5b 70 43 61 6c 6c  pOp = &aOp[pCall
70e0: 65 72 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 70  er->p2 - 1];.  p
70f0: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
7100: 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72  _Undefined;.  br
7110: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7120: 65 3a 20 20 59 69 65 6c 64 20 50 31 20 50 32 20  e:  Yield P1 P2 
7130: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70  * * *.**.** Swap
7140: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75   the program cou
7150: 6e 74 65 72 20 77 69 74 68 20 74 68 65 20 76 61  nter with the va
7160: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
7170: 50 31 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73  P1.  This.** has
7180: 20 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 79   the effect of y
7190: 69 65 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72  ielding to a cor
71a0: 6f 75 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  outine..**.** If
71b0: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74   the coroutine t
71c0: 68 61 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20  hat is launched 
71d0: 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  by this instruct
71e0: 69 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a  ion ends with.**
71f0: 20 59 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e   Yield or Return
7200: 20 74 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74   then continue t
7210: 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
7220: 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a  uction.  But if.
7230: 2a 2a 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65  ** the coroutine
7240: 20 6c 61 75 6e 63 68 65 64 20 62 79 20 74 68 69   launched by thi
7250: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e  s instruction en
7260: 64 73 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f  ds with.** EndCo
7270: 72 6f 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75  routine, then ju
7280: 6d 70 20 74 6f 20 50 32 20 72 61 74 68 65 72 20  mp to P2 rather 
7290: 74 68 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20  than continuing 
72a0: 77 69 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74  with the.** next
72b0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
72c0: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e  .** See also: In
72d0: 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63  itCoroutine.*/.c
72e0: 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20  ase OP_Yield: { 
72f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
7300: 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74  1, jump */.  int
7310: 20 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20   pcDest;.  pIn1 
7320: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
7330: 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65  ;.  assert( Vdbe
7340: 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29  MemDynamic(pIn1)
7350: 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  ==0 );.  pIn1->f
7360: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
7370: 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29    pcDest = (int)
7380: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e  pIn1->u.i;.  pIn
7390: 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70  1->u.i = (int)(p
73a0: 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 52 45 47  Op - aOp);.  REG
73b0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
73c0: 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 4f  >p1, pIn1);.  pO
73d0: 70 20 3d 20 26 61 4f 70 5b 70 63 44 65 73 74 5d  p = &aOp[pcDest]
73e0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
73f0: 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66   Opcode:  HaltIf
7400: 4e 75 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50  Null  P1 P2 P3 P
7410: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
7420: 3a 20 20 69 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c  :  if r[P3]=null
7430: 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63   halt.**.** Chec
7440: 6b 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  k the value in r
7450: 65 67 69 73 74 65 72 20 50 33 2e 20 20 49 66 20  egister P3.  If 
7460: 69 74 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  it is NULL then 
7470: 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61  Halt using.** pa
7480: 72 61 6d 65 74 65 72 20 50 31 2c 20 50 32 2c 20  rameter P1, P2, 
7490: 61 6e 64 20 50 34 20 61 73 20 69 66 20 74 68 69  and P4 as if thi
74a0: 73 20 77 65 72 65 20 61 20 48 61 6c 74 20 69 6e  s were a Halt in
74b0: 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74  struction.  If t
74c0: 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72  he.** value in r
74d0: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6e 6f  egister P3 is no
74e0: 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69  t NULL, then thi
74f0: 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e  s routine is a n
7500: 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20  o-op..** The P5 
7510: 70 61 72 61 6d 65 74 65 72 20 73 68 6f 75 6c 64  parameter should
7520: 20 62 65 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f   be 1..*/.case O
7530: 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20  P_HaltIfNull: { 
7540: 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20       /* in3 */. 
7550: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
7560: 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70  p->p3];.  if( (p
7570: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
7580: 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61  _Null)==0 ) brea
7590: 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  k;.  /* Fall thr
75a0: 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c  ough into OP_Hal
75b0: 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  t */.}../* Opcod
75c0: 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a  e:  Halt P1 P2 *
75d0: 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69   P4 P5.**.** Exi
75e0: 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20  t immediately.  
75f0: 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73  All open cursors
7600: 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64  , etc are closed
7610: 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  .** automaticall
7620: 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  y..**.** P1 is t
7630: 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72  he result code r
7640: 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
7650: 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74  e3_exec(), sqlit
7660: 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f  e3_reset(),.** o
7670: 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  r sqlite3_finali
7680: 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72  ze().  For a nor
7690: 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73  mal halt, this s
76a0: 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f  hould be SQLITE_
76b0: 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65  OK (0)..** For e
76c0: 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65  rrors, it can be
76d0: 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75   some other valu
76e0: 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74 68 65  e.  If P1!=0 the
76f0: 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d  n P2 will determ
7700: 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f  ine.** whether o
7710: 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63  r not to rollbac
7720: 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  k the current tr
7730: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e  ansaction.  Do n
7740: 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69  ot rollback.** i
7750: 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44  f P2==OE_Fail. D
7760: 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69  o the rollback i
7770: 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63  f P2==OE_Rollbac
7780: 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62  k.  If P2==OE_Ab
7790: 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63  ort,.** then bac
77a0: 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65  k out all change
77b0: 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63 75  s that have occu
77c0: 72 72 65 64 20 64 75 72 69 6e 67 20 74 68 69 73  rred during this
77d0: 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68   execution of th
77e0: 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64  e.** VDBE, but d
77f0: 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74  o not rollback t
7800: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  he transaction. 
7810: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
7820: 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74  not null then it
7830: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73   is an error mes
7840: 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a  sage string..**.
7850: 2a 2a 20 50 35 20 69 73 20 61 20 76 61 6c 75 65  ** P5 is a value
7860: 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20 34   between 0 and 4
7870: 2c 20 69 6e 63 6c 75 73 69 76 65 2c 20 74 68 61  , inclusive, tha
7880: 74 20 6d 6f 64 69 66 69 65 73 20 74 68 65 20 50  t modifies the P
7890: 34 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  4 string..**.** 
78a0: 20 20 20 30 3a 20 20 28 6e 6f 20 63 68 61 6e 67     0:  (no chang
78b0: 65 29 0a 2a 2a 20 20 20 20 31 3a 20 20 4e 4f 54  e).**    1:  NOT
78c0: 20 4e 55 4c 4c 20 63 6f 6e 74 72 61 69 6e 74 20   NULL contraint 
78d0: 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20  failed: P4.**   
78e0: 20 32 3a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73   2:  UNIQUE cons
78f0: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
7900: 34 0a 2a 2a 20 20 20 20 33 3a 20 20 43 48 45 43  4.**    3:  CHEC
7910: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  K constraint fai
7920: 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 34 3a  led: P4.**    4:
7930: 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f    FOREIGN KEY co
7940: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
7950: 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20   P4.**.** If P5 
7960: 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20  is not zero and 
7970: 50 34 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e  P4 is NULL, then
7980: 20 65 76 65 72 79 74 68 69 6e 67 20 61 66 74 65   everything afte
7990: 72 20 74 68 65 20 22 3a 22 20 69 73 0a 2a 2a 20  r the ":" is.** 
79a0: 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  omitted..**.** T
79b0: 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69  here is an impli
79c0: 65 64 20 22 48 61 6c 74 20 30 20 30 20 30 22 20  ed "Halt 0 0 0" 
79d0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65  instruction inse
79e0: 72 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79  rted at the very
79f0: 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79   end of.** every
7a00: 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20   program.  So a 
7a10: 6a 75 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61  jump past the la
7a20: 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  st instruction o
7a30: 66 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a  f the program.**
7a40: 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
7a50: 65 78 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a  executing Halt..
7a60: 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a  */.case OP_Halt:
7a70: 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
7a80: 2a 7a 54 79 70 65 3b 0a 20 20 63 6f 6e 73 74 20  *zType;.  const 
7a90: 63 68 61 72 20 2a 7a 4c 6f 67 46 6d 74 3b 0a 20  char *zLogFmt;. 
7aa0: 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
7ab0: 6d 65 3b 0a 20 20 69 6e 74 20 70 63 78 3b 0a 0a  me;.  int pcx;..
7ac0: 20 20 70 63 78 20 3d 20 28 69 6e 74 29 28 70 4f    pcx = (int)(pO
7ad0: 70 20 2d 20 61 4f 70 29 3b 0a 20 20 69 66 28 20  p - aOp);.  if( 
7ae0: 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f  pOp->p1==SQLITE_
7af0: 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20  OK && p->pFrame 
7b00: 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74  ){.    /* Halt t
7b10: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20  he sub-program. 
7b20: 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74  Return control t
7b30: 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61  o the parent fra
7b40: 6d 65 2e 20 2a 2f 0a 20 20 20 20 70 46 72 61 6d  me. */.    pFram
7b50: 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20  e = p->pFrame;. 
7b60: 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70     p->pFrame = p
7b70: 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a  Frame->pParent;.
7b80: 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b      p->nFrame--;
7b90: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
7ba0: 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70  SetChanges(db, p
7bb0: 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20  ->nChange);.    
7bc0: 70 63 78 20 3d 20 73 71 6c 69 74 65 33 56 64 62  pcx = sqlite3Vdb
7bd0: 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46  eFrameRestore(pF
7be0: 72 61 6d 65 29 3b 0a 20 20 20 20 6c 61 73 74 52  rame);.    lastR
7bf0: 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52  owid = db->lastR
7c00: 6f 77 69 64 3b 0a 20 20 20 20 69 66 28 20 70 4f  owid;.    if( pO
7c10: 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65  p->p2==OE_Ignore
7c20: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73   ){.      /* Ins
7c30: 74 72 75 63 74 69 6f 6e 20 70 63 78 20 69 73 20  truction pcx is 
7c40: 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74  the OP_Program t
7c50: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20  hat invoked the 
7c60: 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20  sub-program .   
7c70: 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20     ** currently 
7c80: 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66  being halted. If
7c90: 20 74 68 65 20 70 32 20 69 6e 73 74 72 75 63 74   the p2 instruct
7ca0: 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48  ion of this OP_H
7cb0: 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73  alt.      ** ins
7cc0: 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20  truction is set 
7cd0: 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68  to OE_Ignore, th
7ce0: 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  en the sub-progr
7cf0: 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20  am is throwing. 
7d00: 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52       ** an IGNOR
7d10: 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20  E exception. In 
7d20: 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74  this case jump t
7d30: 6f 20 74 68 65 20 61 64 64 72 65 73 73 20 73 70  o the address sp
7d40: 65 63 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a  ecified.      **
7d50: 20 61 73 20 74 68 65 20 70 32 20 6f 66 20 74 68   as the p2 of th
7d60: 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f  e calling OP_Pro
7d70: 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20  gram.  */.      
7d80: 70 63 78 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 78  pcx = p->aOp[pcx
7d90: 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20  ].p2-1;.    }.  
7da0: 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a    aOp = p->aOp;.
7db0: 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d      aMem = p->aM
7dc0: 65 6d 3b 0a 20 20 20 20 70 4f 70 20 3d 20 26 61  em;.    pOp = &a
7dd0: 4f 70 5b 70 63 78 5d 3b 0a 20 20 20 20 62 72 65  Op[pcx];.    bre
7de0: 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72 63 20  ak;.  }.  p->rc 
7df0: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e  = pOp->p1;.  p->
7e00: 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 75  errorAction = (u
7e10: 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e  8)pOp->p2;.  p->
7e20: 70 63 20 3d 20 70 63 78 3b 0a 20 20 69 66 28 20  pc = pcx;.  if( 
7e30: 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69 66 28  p->rc ){.    if(
7e40: 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
7e50: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
7e60: 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54 79  har * const azTy
7e70: 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e 55  pe[] = { "NOT NU
7e80: 4c 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c 20 22  LL", "UNIQUE", "
7e90: 43 48 45 43 4b 22 2c 0a 20 20 20 20 20 20 20 20  CHECK",.        
7ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ec0: 20 20 20 20 20 22 46 4f 52 45 49 47 4e 20 4b 45       "FOREIGN KE
7ed0: 59 22 20 7d 3b 0a 20 20 20 20 20 20 61 73 73 65  Y" };.      asse
7ee0: 72 74 28 20 70 4f 70 2d 3e 70 35 3e 3d 31 20 26  rt( pOp->p5>=1 &
7ef0: 26 20 70 4f 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a  & pOp->p5<=4 );.
7f00: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
7f10: 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20  pOp->p5==1 );.  
7f20: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
7f30: 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20 20  p->p5==2 );.    
7f40: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
7f50: 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20 20  >p5==3 );.      
7f60: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
7f70: 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20 20 7a 54  5==4 );.      zT
7f80: 79 70 65 20 3d 20 61 7a 54 79 70 65 5b 70 4f 70  ype = azType[pOp
7f90: 2d 3e 70 35 2d 31 5d 3b 0a 20 20 20 20 7d 65 6c  ->p5-1];.    }el
7fa0: 73 65 7b 0a 20 20 20 20 20 20 7a 54 79 70 65 20  se{.      zType 
7fb0: 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  = 0;.    }.    a
7fc0: 73 73 65 72 74 28 20 7a 54 79 70 65 21 3d 30 20  ssert( zType!=0 
7fd0: 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20  || pOp->p4.z!=0 
7fe0: 29 3b 0a 20 20 20 20 7a 4c 6f 67 46 6d 74 20 3d  );.    zLogFmt =
7ff0: 20 22 61 62 6f 72 74 20 61 74 20 25 64 20 69 6e   "abort at %d in
8000: 20 5b 25 73 5d 3a 20 25 73 22 3b 0a 20 20 20 20   [%s]: %s";.    
8010: 69 66 28 20 7a 54 79 70 65 20 26 26 20 70 4f 70  if( zType && pOp
8020: 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20  ->p4.z ){.      
8030: 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
8040: 28 70 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69  (p, "%s constrai
8050: 6e 74 20 66 61 69 6c 65 64 3a 20 25 73 22 2c 20  nt failed: %s", 
8060: 7a 54 79 70 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a  zType, pOp->p4.z
8070: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
8080: 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20   pOp->p4.z ){.  
8090: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
80a0: 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 70 4f  rror(p, "%s", pO
80b0: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 65  p->p4.z);.    }e
80c0: 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  lse{.      sqlit
80d0: 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
80e0: 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  %s constraint fa
80f0: 69 6c 65 64 22 2c 20 7a 54 79 70 65 29 3b 0a 20  iled", zType);. 
8100: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
8110: 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 7a 4c  _log(pOp->p1, zL
8120: 6f 67 46 6d 74 2c 20 70 63 78 2c 20 70 2d 3e 7a  ogFmt, pcx, p->z
8130: 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  Sql, p->zErrMsg)
8140: 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
8150: 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b  ite3VdbeHalt(p);
8160: 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
8170: 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63  QLITE_BUSY || rc
8180: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72  ==SQLITE_OK || r
8190: 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20  c==SQLITE_ERROR 
81a0: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
81b0: 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
81c0: 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
81d0: 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  ITE_BUSY;.  }els
81e0: 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  e{.    assert( r
81f0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
8200: 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53 51  (p->rc&0xff)==SQ
8210: 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
8220: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
8230: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
8240: 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
8250: 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65  s>0 || db->nDefe
8260: 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b  rredImmCons>0 );
8270: 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20  .    rc = p->rc 
8280: 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a  ? SQLITE_ERROR :
8290: 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
82a0: 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65  }.  goto vdbe_re
82b0: 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  turn;.}../* Opco
82c0: 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20 50  de: Integer P1 P
82d0: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
82e0: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a  sis: r[P2]=P1.**
82f0: 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20 69  .** The 32-bit i
8300: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 31 20  nteger value P1 
8310: 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20  is written into 
8320: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
8330: 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a  case OP_Integer:
8340: 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75   {         /* ou
8350: 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f  t2 */.  pOut = o
8360: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
8370: 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75   pOp);.  pOut->u
8380: 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  .i = pOp->p1;.  
8390: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
83a0: 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20  ode: Int64 * P2 
83b0: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
83c0: 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a  is: r[P2]=P4.**.
83d0: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
83e0: 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69  er to a 64-bit i
83f0: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a  nteger value..**
8400: 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75   Write that valu
8410: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
8420: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
8430: 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20  nt64: {         
8440: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70    /* out2 */.  p
8450: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
8460: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
8470: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
8480: 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75  pI64!=0 );.  pOu
8490: 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70  t->u.i = *pOp->p
84a0: 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b  4.pI64;.  break;
84b0: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
84c0: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
84d0: 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65  _POINT./* Opcode
84e0: 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34  : Real * P2 * P4
84f0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
8500: 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50  r[P2]=P4.**.** P
8510: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
8520: 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74  o a 64-bit float
8530: 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
8540: 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76  .** Write that v
8550: 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
8560: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
8570: 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20  P_Real: {       
8580: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
8590: 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 20 2a  TK_FLOAT, out2 *
85a0: 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  /.  pOut = out2P
85b0: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
85c0: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
85d0: 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61   = MEM_Real;.  a
85e0: 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 49  ssert( !sqlite3I
85f0: 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52  sNaN(*pOp->p4.pR
8600: 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  eal) );.  pOut->
8610: 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70  u.r = *pOp->p4.p
8620: 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Real;.  break;.}
8630: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
8640: 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32  de: String8 * P2
8650: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
8660: 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 0a  sis: r[P2]='P4'.
8670: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
8680: 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61  to a nul termina
8690: 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ted UTF-8 string
86a0: 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  . This opcode is
86b0: 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a   transformed .**
86c0: 20 69 6e 74 6f 20 61 20 53 74 72 69 6e 67 20 6f   into a String o
86d0: 70 63 6f 64 65 20 62 65 66 6f 72 65 20 69 74 20  pcode before it 
86e0: 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  is executed for 
86f0: 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 20  the first time. 
8700: 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73 20   During.** this 
8710: 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c 20  transformation, 
8720: 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 73 74  the length of st
8730: 72 69 6e 67 20 50 34 20 69 73 20 63 6f 6d 70 75  ring P4 is compu
8740: 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64 0a 2a  ted and stored.*
8750: 2a 20 61 73 20 74 68 65 20 50 31 20 70 61 72 61  * as the P1 para
8760: 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  meter..*/.case O
8770: 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20  P_String8: {    
8780: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
8790: 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 20  TK_STRING, out2 
87a0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
87b0: 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70  ->p4.z!=0 );.  p
87c0: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
87d0: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
87e0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50  pOp->opcode = OP
87f0: 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e  _String;.  pOp->
8800: 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  p1 = sqlite3Strl
8810: 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b  en30(pOp->p4.z);
8820: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
8830: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66  _OMIT_UTF16.  if
8840: 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49  ( encoding!=SQLI
8850: 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 72  TE_UTF8 ){.    r
8860: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
8870: 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70  emSetStr(pOut, p
8880: 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51  Op->p4.z, -1, SQ
8890: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
88a0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 69  E_STATIC);.    i
88b0: 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 61  f( rc ){.      a
88c0: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
88d0: 45 5f 54 4f 4f 42 49 47 20 29 3b 20 2f 2a 20 54  E_TOOBIG ); /* T
88e0: 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20  his is the only 
88f0: 70 6f 73 73 69 62 6c 65 20 65 72 72 6f 72 20 68  possible error h
8900: 65 72 65 20 2a 2f 0a 20 20 20 20 20 20 67 6f 74  ere */.      got
8910: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d  o too_big;.    }
8920: 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f  .    if( SQLITE_
8930: 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43  OK!=sqlite3VdbeC
8940: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f  hangeEncoding(pO
8950: 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20  ut, encoding) ) 
8960: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
8970: 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 73   assert( pOut->s
8980: 7a 4d 61 6c 6c 6f 63 3e 30 20 26 26 20 70 4f 75  zMalloc>0 && pOu
8990: 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74  t->zMalloc==pOut
89a0: 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ->z );.    asser
89b0: 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  t( VdbeMemDynami
89c0: 63 28 70 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20  c(pOut)==0 );.  
89d0: 20 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63    pOut->szMalloc
89e0: 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e   = 0;.    pOut->
89f0: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61  flags |= MEM_Sta
8a00: 74 69 63 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  tic;.    if( pOp
8a10: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e  ->p4type==P4_DYN
8a20: 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73 71  AMIC ){.      sq
8a30: 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
8a40: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
8a50: 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70  }.    pOp->p4typ
8a60: 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a  e = P4_DYNAMIC;.
8a70: 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20      pOp->p4.z = 
8a80: 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70  pOut->z;.    pOp
8a90: 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a  ->p1 = pOut->n;.
8aa0: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28    }.#endif.  if(
8ab0: 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69   pOp->p1>db->aLi
8ac0: 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
8ad0: 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
8ae0: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
8af0: 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  }.  /* Fall thro
8b00: 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
8b10: 63 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20  case, OP_String 
8b20: 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64  */.}.  ./* Opcod
8b30: 65 3a 20 53 74 72 69 6e 67 20 50 31 20 50 32 20  e: String P1 P2 
8b40: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
8b50: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27  psis: r[P2]='P4'
8b60: 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20   (len=P1).**.** 
8b70: 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65  The string value
8b80: 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31   P4 of length P1
8b90: 20 28 62 79 74 65 73 29 20 69 73 20 73 74 6f 72   (bytes) is stor
8ba0: 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
8bb0: 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d  2..**.** If P5!=
8bc0: 30 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e  0 and the conten
8bd0: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
8be0: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
8bf0: 20 7a 65 72 6f 2c 20 74 68 65 6e 0a 2a 2a 20 74   zero, then.** t
8c00: 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 74  he datatype of t
8c10: 68 65 20 72 65 67 69 73 74 65 72 20 50 32 20 69  he register P2 i
8c20: 73 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 42  s converted to B
8c30: 4c 4f 42 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e  LOB.  The conten
8c40: 74 20 69 73 0a 2a 2a 20 74 68 65 20 73 61 6d 65  t is.** the same
8c50: 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74   sequence of byt
8c60: 65 73 2c 20 69 74 20 69 73 20 6d 65 72 65 6c 79  es, it is merely
8c70: 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
8c80: 61 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 0a 2a  a BLOB instead.*
8c90: 2a 20 6f 66 20 61 20 73 74 72 69 6e 67 2c 20 61  * of a string, a
8ca0: 73 20 69 66 20 69 74 20 68 61 64 20 62 65 65 6e  s if it had been
8cb0: 20 43 41 53 54 2e 0a 2a 2f 0a 63 61 73 65 20 4f   CAST..*/.case O
8cc0: 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20  P_String: {     
8cd0: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
8ce0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8cf0: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  4.z!=0 );.  pOut
8d00: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
8d10: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
8d20: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53  t->flags = MEM_S
8d30: 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  tr|MEM_Static|ME
8d40: 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
8d50: 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  z = pOp->p4.z;. 
8d60: 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e   pOut->n = pOp->
8d70: 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  p1;.  pOut->enc 
8d80: 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50  = encoding;.  UP
8d90: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
8da0: 45 28 70 4f 75 74 29 3b 0a 23 69 66 6e 64 65 66  E(pOut);.#ifndef
8db0: 20 53 51 4c 49 54 45 5f 4c 49 4b 45 5f 44 4f 45   SQLITE_LIKE_DOE
8dc0: 53 4e 54 5f 4d 41 54 43 48 5f 42 4c 4f 42 53 0a  SNT_MATCH_BLOBS.
8dd0: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
8de0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
8df0: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 61 73  ->p3>0 );.    as
8e00: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
8e10: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
8e20: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 70  Cursor) );.    p
8e30: 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
8e40: 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  >p3];.    assert
8e50: 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
8e60: 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 69  MEM_Int );.    i
8e70: 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20 29 20 70  f( pIn3->u.i ) p
8e80: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
8e90: 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 61 74 69 63  _Blob|MEM_Static
8ea0: 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d 0a 23  |MEM_Term;.  }.#
8eb0: 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d  endif.  break;.}
8ec0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c  ../* Opcode: Nul
8ed0: 6c 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  l P1 P2 P3 * *.*
8ee0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
8ef0: 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a  2..P3]=NULL.**.*
8f00: 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69  * Write a NULL i
8f10: 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32  nto registers P2
8f20: 2e 20 20 49 66 20 50 33 20 67 72 65 61 74 65 72  .  If P3 greater
8f30: 20 74 68 61 6e 20 50 32 2c 20 74 68 65 6e 20 61   than P2, then a
8f40: 6c 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c  lso write.** NUL
8f50: 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  L into register 
8f60: 50 33 20 61 6e 64 20 65 76 65 72 79 20 72 65 67  P3 and every reg
8f70: 69 73 74 65 72 20 69 6e 20 62 65 74 77 65 65 6e  ister in between
8f80: 20 50 32 20 61 6e 64 20 50 33 2e 20 20 49 66 20   P2 and P3.  If 
8f90: 50 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  P3.** is less th
8fa0: 61 6e 20 50 32 20 28 74 79 70 69 63 61 6c 6c 79  an P2 (typically
8fb0: 20 50 33 20 69 73 20 7a 65 72 6f 29 20 74 68 65   P3 is zero) the
8fc0: 6e 20 6f 6e 6c 79 20 72 65 67 69 73 74 65 72 20  n only register 
8fd0: 50 32 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20  P2 is.** set to 
8fe0: 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  NULL..**.** If t
8ff0: 68 65 20 50 31 20 76 61 6c 75 65 20 69 73 20 6e  he P1 value is n
9000: 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c  on-zero, then al
9010: 73 6f 20 73 65 74 20 74 68 65 20 4d 45 4d 5f 43  so set the MEM_C
9020: 6c 65 61 72 65 64 20 66 6c 61 67 20 73 6f 20 74  leared flag so t
9030: 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75  hat.** NULL valu
9040: 65 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70  es will not comp
9050: 61 72 65 20 65 71 75 61 6c 20 65 76 65 6e 20 69  are equal even i
9060: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
9070: 69 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f  is set on.** OP_
9080: 4e 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a  Ne or OP_Eq..*/.
9090: 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20  case OP_Null: { 
90a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
90b0: 32 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 0a  2 */.  int cnt;.
90c0: 20 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a    u16 nullFlag;.
90d0: 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
90e0: 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
90f0: 0a 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33  .  cnt = pOp->p3
9100: 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65  -pOp->p2;.  asse
9110: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
9120: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
9130: 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d  rsor) );.  pOut-
9140: 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61  >flags = nullFla
9150: 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f 20 28 4d  g = pOp->p1 ? (M
9160: 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61  EM_Null|MEM_Clea
9170: 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b  red) : MEM_Null;
9180: 0a 20 20 77 68 69 6c 65 28 20 63 6e 74 3e 30 20  .  while( cnt>0 
9190: 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20  ){.    pOut++;. 
91a0: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
91b0: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
91c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
91d0: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
91e0: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
91f0: 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 63   nullFlag;.    c
9200: 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61  nt--;.  }.  brea
9210: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
9220: 20 53 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20 2a   SoftNull P1 * *
9230: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
9240: 3a 20 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a  :  r[P1]=NULL.**
9250: 0a 2a 2a 20 53 65 74 20 72 65 67 69 73 74 65 72  .** Set register
9260: 20 50 31 20 74 6f 20 68 61 76 65 20 74 68 65 20   P1 to have the 
9270: 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73 65  value NULL as se
9280: 65 6e 20 62 79 20 74 68 65 20 4f 50 5f 4d 61 6b  en by the OP_Mak
9290: 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74 72  eRecord.** instr
92a0: 75 63 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20 6e  uction, but do n
92b0: 6f 74 20 66 72 65 65 20 61 6e 79 20 73 74 72 69  ot free any stri
92c0: 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f 72  ng or blob memor
92d0: 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  y associated wit
92e0: 68 0a 2a 2a 20 74 68 65 20 72 65 67 69 73 74 65  h.** the registe
92f0: 72 2c 20 73 6f 20 74 68 61 74 20 69 66 20 74 68  r, so that if th
9300: 65 20 76 61 6c 75 65 20 77 61 73 20 61 20 73 74  e value was a st
9310: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68 61  ring or blob tha
9320: 74 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75  t was.** previou
9330: 73 6c 79 20 63 6f 70 69 65 64 20 75 73 69 6e 67  sly copied using
9340: 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68 65 20 63   OP_SCopy, the c
9350: 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74 69  opies will conti
9360: 6e 75 65 20 74 6f 20 62 65 20 76 61 6c 69 64 2e  nue to be valid.
9370: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66 74  .*/.case OP_Soft
9380: 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72 74  Null: {.  assert
9390: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70  ( pOp->p1>0 && p
93a0: 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p1<=(p->nMem
93b0: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
93c0: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
93d0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
93e0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 28 70 4f  Out->flags = (pO
93f0: 75 74 2d 3e 66 6c 61 67 73 7c 4d 45 4d 5f 4e 75  ut->flags|MEM_Nu
9400: 6c 6c 29 26 7e 4d 45 4d 5f 55 6e 64 65 66 69 6e  ll)&~MEM_Undefin
9410: 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ed;.  break;.}..
9420: 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20  /* Opcode: Blob 
9430: 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
9440: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
9450: 50 34 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a  P4 (len=P1).**.*
9460: 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61  * P4 points to a
9470: 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31   blob of data P1
9480: 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74   bytes long.  St
9490: 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62  ore this.** blob
94a0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
94b0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62  .*/.case OP_Blob
94c0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
94d0: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
94e0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20  assert( pOp->p1 
94f0: 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  <= SQLITE_MAX_LE
9500: 4e 47 54 48 20 29 3b 0a 20 20 70 4f 75 74 20 3d  NGTH );.  pOut =
9510: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
9520: 70 2c 20 70 4f 70 29 3b 0a 20 20 73 71 6c 69 74  p, pOp);.  sqlit
9530: 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
9540: 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  pOut, pOp->p4.z,
9550: 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b   pOp->p1, 0, 0);
9560: 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65  .  pOut->enc = e
9570: 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54  ncoding;.  UPDAT
9580: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
9590: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
95a0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72  ../* Opcode: Var
95b0: 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50 34  iable P1 P2 * P4
95c0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
95d0: 72 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65 72 28  r[P2]=parameter(
95e0: 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72 61  P1,P4).**.** Tra
95f0: 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75 65 73  nsfer the values
9600: 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65   of bound parame
9610: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
9620: 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66  ster P2.**.** If
9630: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 69   the parameter i
9640: 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69 74  s named, then it
9650: 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73 20 69  s name appears i
9660: 6e 20 50 34 2e 0a 2a 2a 20 54 68 65 20 50 34 20  n P4..** The P4 
9670: 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 62 79  value is used by
9680: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61   sqlite3_bind_pa
9690: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a  rameter_name()..
96a0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61  */.case OP_Varia
96b0: 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ble: {          
96c0: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 4d    /* out2 */.  M
96d0: 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20  em *pVar;       
96e0: 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74  /* Value being t
96f0: 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20  ransferred */.. 
9700: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
9710: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70  >0 && pOp->p1<=p
9720: 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65  ->nVar );.  asse
9730: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30  rt( pOp->p4.z==0
9740: 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70   || pOp->p4.z==p
9750: 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d  ->azVar[pOp->p1-
9760: 31 5d 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26  1] );.  pVar = &
9770: 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20  p->aVar[pOp->p1 
9780: 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69  - 1];.  if( sqli
9790: 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
97a0: 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f  (pVar) ){.    go
97b0: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
97c0: 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
97d0: 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
97e0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
97f0: 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
9800: 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61  t, pVar, MEM_Sta
9810: 74 69 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  tic);.  UPDATE_M
9820: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
9830: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
9840: 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50  * Opcode: Move P
9850: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
9860: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32 40 50  ynopsis:  r[P2@P
9870: 33 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a  3]=r[P1@P3].**.*
9880: 2a 20 4d 6f 76 65 20 74 68 65 20 50 33 20 76 61  * Move the P3 va
9890: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
98a0: 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65   P1..P1+P3-1 ove
98b0: 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  r into.** regist
98c0: 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e  ers P2..P2+P3-1.
98d0: 20 20 52 65 67 69 73 74 65 72 73 20 50 31 2e 2e    Registers P1..
98e0: 50 31 2b 50 33 2d 31 20 61 72 65 0a 2a 2a 20 6c  P1+P3-1 are.** l
98f0: 65 66 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55  eft holding a NU
9900: 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72  LL.  It is an er
9910: 72 6f 72 20 66 6f 72 20 72 65 67 69 73 74 65 72  ror for register
9920: 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50   ranges.** P1..P
9930: 31 2b 50 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50  1+P3-1 and P2..P
9940: 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61  2+P3-1 to overla
9950: 70 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72 72  p.  It is an err
9960: 6f 72 0a 2a 2a 20 66 6f 72 20 50 33 20 74 6f 20  or.** for P3 to 
9970: 62 65 20 6c 65 73 73 20 74 68 61 6e 20 31 2e 0a  be less than 1..
9980: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a  */.case OP_Move:
9990: 20 7b 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20   {.  int n;     
99a0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
99b0: 6f 66 20 72 65 67 69 73 74 65 72 73 20 6c 65 66  of registers lef
99c0: 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69  t to copy */.  i
99d0: 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20  nt p1;          
99e0: 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63  /* Register to c
99f0: 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e  opy from */.  in
9a00: 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 2f  t p2;          /
9a10: 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f  * Register to co
9a20: 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20  py to */..  n = 
9a30: 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20  pOp->p3;.  p1 = 
9a40: 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20  pOp->p1;.  p2 = 
9a50: 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
9a60: 74 28 20 6e 3e 30 20 26 26 20 70 31 3e 30 20 26  t( n>0 && p1>0 &
9a70: 26 20 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65  & p2>0 );.  asse
9a80: 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20  rt( p1+n<=p2 || 
9a90: 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70  p2+n<=p1 );..  p
9aa0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b  In1 = &aMem[p1];
9ab0: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
9ac0: 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61  p2];.  do{.    a
9ad0: 73 73 65 72 74 28 20 70 4f 75 74 3c 3d 26 61 4d  ssert( pOut<=&aM
9ae0: 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  em[(p->nMem+1 - 
9af0: 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a  p->nCursor)] );.
9b00: 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31      assert( pIn1
9b10: 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d  <=&aMem[(p->nMem
9b20: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
9b30: 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ] );.    assert(
9b40: 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31   memIsValid(pIn1
9b50: 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  ) );.    memAbou
9b60: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
9b70: 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  t);.    sqlite3V
9b80: 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c  dbeMemMove(pOut,
9b90: 20 70 49 6e 31 29 3b 0a 23 69 66 64 65 66 20 53   pIn1);.#ifdef S
9ba0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
9bb0: 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79  if( pOut->pScopy
9bc0: 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20  From>=&aMem[p1] 
9bd0: 26 26 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46  && pOut->pScopyF
9be0: 72 6f 6d 3c 70 4f 75 74 20 29 7b 0a 20 20 20 20  rom<pOut ){.    
9bf0: 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72    pOut->pScopyFr
9c00: 6f 6d 20 2b 3d 20 70 4f 70 2d 3e 70 32 20 2d 20  om += pOp->p2 - 
9c10: 70 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  p1;.    }.#endif
9c20: 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c  .    Deephemeral
9c30: 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20 20 20 52  ize(pOut);.    R
9c40: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32  EGISTER_TRACE(p2
9c50: 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 70  ++, pOut);.    p
9c60: 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b  In1++;.    pOut+
9c70: 2b 3b 0a 20 20 7d 77 68 69 6c 65 28 20 2d 2d 6e  +;.  }while( --n
9c80: 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
9c90: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20  /* Opcode: Copy 
9ca0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
9cb0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 40 50  Synopsis: r[P2@P
9cc0: 33 2b 31 5d 3d 72 5b 50 31 40 50 33 2b 31 5d 0a  3+1]=r[P1@P3+1].
9cd0: 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70  **.** Make a cop
9ce0: 79 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 50  y of registers P
9cf0: 31 2e 2e 50 31 2b 50 33 20 69 6e 74 6f 20 72 65  1..P1+P3 into re
9d00: 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50  gisters P2..P2+P
9d10: 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  3..**.** This in
9d20: 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20  struction makes 
9d30: 61 20 64 65 65 70 20 63 6f 70 79 20 6f 66 20 74  a deep copy of t
9d40: 68 65 20 76 61 6c 75 65 2e 20 20 41 20 64 75 70  he value.  A dup
9d50: 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64  licate.** is mad
9d60: 65 20 6f 66 20 61 6e 79 20 73 74 72 69 6e 67 20  e of any string 
9d70: 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74  or blob constant
9d80: 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53  .  See also OP_S
9d90: 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Copy..*/.case OP
9da0: 5f 43 6f 70 79 3a 20 7b 0a 20 20 69 6e 74 20 6e  _Copy: {.  int n
9db0: 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33  ;..  n = pOp->p3
9dc0: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
9dd0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
9de0: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
9df0: 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
9e00: 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 77 68  ut!=pIn1 );.  wh
9e10: 69 6c 65 28 20 31 20 29 7b 0a 20 20 20 20 73 71  ile( 1 ){.    sq
9e20: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
9e30: 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49  lowCopy(pOut, pI
9e40: 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a  n1, MEM_Ephem);.
9e50: 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69      Deephemerali
9e60: 7a 65 28 70 4f 75 74 29 3b 0a 23 69 66 64 65 66  ze(pOut);.#ifdef
9e70: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
9e80: 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72    pOut->pScopyFr
9e90: 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20  om = 0;.#endif. 
9ea0: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
9eb0: 45 28 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70  E(pOp->p2+pOp->p
9ec0: 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  3-n, pOut);.    
9ed0: 69 66 28 20 28 6e 2d 2d 29 3d 3d 30 20 29 20 62  if( (n--)==0 ) b
9ee0: 72 65 61 6b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b  reak;.    pOut++
9ef0: 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
9f00: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
9f10: 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79 20 50   Opcode: SCopy P
9f20: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
9f30: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b  nopsis: r[P2]=r[
9f40: 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61  P1].**.** Make a
9f50: 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66   shallow copy of
9f60: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74   register P1 int
9f70: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
9f80: 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
9f90: 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68  ction makes a sh
9fa0: 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74 68  allow copy of th
9fb0: 65 20 76 61 6c 75 65 2e 20 20 49 66 20 74 68 65  e value.  If the
9fc0: 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73   value.** is a s
9fd0: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74  tring or blob, t
9fe0: 68 65 6e 20 74 68 65 20 63 6f 70 79 20 69 73 20  hen the copy is 
9ff0: 6f 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74  only a pointer t
a000: 6f 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61  o the.** origina
a010: 6c 20 61 6e 64 20 68 65 6e 63 65 20 69 66 20 74  l and hence if t
a020: 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e  he original chan
a030: 67 65 73 20 73 6f 20 77 69 6c 6c 20 74 68 65 20  ges so will the 
a040: 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20  copy..** Worse, 
a050: 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  if the original 
a060: 69 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20  is deallocated, 
a070: 74 68 65 20 63 6f 70 79 20 62 65 63 6f 6d 65 73  the copy becomes
a080: 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75   invalid..** Thu
a090: 73 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6d 75  s the program mu
a0a0: 73 74 20 67 75 61 72 61 6e 74 65 65 20 74 68 61  st guarantee tha
a0b0: 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77  t the original w
a0c0: 69 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a  ill not change.*
a0d0: 2a 20 64 75 72 69 6e 67 20 74 68 65 20 6c 69 66  * during the lif
a0e0: 65 74 69 6d 65 20 6f 66 20 74 68 65 20 63 6f 70  etime of the cop
a0f0: 79 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70 79 20  y.  Use OP_Copy 
a100: 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65  to make a comple
a110: 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63  te.** copy..*/.c
a120: 61 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20  ase OP_SCopy: { 
a130: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
a140: 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  t2 */.  pIn1 = &
a150: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
a160: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
a170: 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
a180: 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a  ( pOut!=pIn1 );.
a190: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
a1a0: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
a1b0: 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65  , pIn1, MEM_Ephe
a1c0: 6d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  m);.#ifdef SQLIT
a1d0: 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f  E_DEBUG.  if( pO
a1e0: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d  ut->pScopyFrom==
a1f0: 30 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79  0 ) pOut->pScopy
a200: 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e  From = pIn1;.#en
a210: 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  dif.  break;.}..
a220: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 43 6f  /* Opcode: IntCo
a230: 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  py P1 P2 * * *.*
a240: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
a250: 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 72  ]=r[P1].**.** Tr
a260: 61 6e 73 66 65 72 20 74 68 65 20 69 6e 74 65 67  ansfer the integ
a270: 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e  er value held in
a280: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74   register P1 int
a290: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
a2a0: 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 6e 20  *.** This is an 
a2b0: 6f 70 74 69 6d 69 7a 65 64 20 76 65 72 73 69 6f  optimized versio
a2c0: 6e 20 6f 66 20 53 43 6f 70 79 20 74 68 61 74 20  n of SCopy that 
a2d0: 77 6f 72 6b 73 20 6f 6e 6c 79 20 66 6f 72 20 69  works only for i
a2e0: 6e 74 65 67 65 72 0a 2a 2a 20 76 61 6c 75 65 73  nteger.** values
a2f0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
a300: 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20  Copy: {         
a310: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
a320: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
a330: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
a340: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
a350: 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
a360: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
a370: 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p2];.  sqlite
a380: 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
a390: 28 70 4f 75 74 2c 20 70 49 6e 31 2d 3e 75 2e 69  (pOut, pIn1->u.i
a3a0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
a3b0: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c 74  * Opcode: Result
a3c0: 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Row P1 P2 * * *.
a3d0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 6f 75  ** Synopsis:  ou
a3e0: 74 70 75 74 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a  tput=r[P1@P2].**
a3f0: 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
a400: 73 20 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b  s P1 through P1+
a410: 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73  P2-1 contain a s
a420: 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20  ingle row of.** 
a430: 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70  results. This op
a440: 63 6f 64 65 20 63 61 75 73 65 73 20 74 68 65 20  code causes the 
a450: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63  sqlite3_step() c
a460: 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65  all to terminate
a470: 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49  .** with an SQLI
a480: 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f  TE_ROW return co
a490: 64 65 20 61 6e 64 20 69 74 20 73 65 74 73 20 75  de and it sets u
a4a0: 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74  p the sqlite3_st
a4b0: 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  mt.** structure 
a4c0: 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65 73  to provide acces
a4d0: 73 20 74 6f 20 74 68 65 20 72 28 50 31 29 2e 2e  s to the r(P1)..
a4e0: 72 28 50 31 2b 50 32 2d 31 29 20 76 61 6c 75 65  r(P1+P2-1) value
a4f0: 73 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75  s as.** the resu
a500: 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20  lt row..*/.case 
a510: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a  OP_ResultRow: {.
a520: 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69    Mem *pMem;.  i
a530: 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74 28 20  nt i;.  assert( 
a540: 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70  p->nResColumn==p
a550: 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73 65  Op->p2 );.  asse
a560: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b  rt( pOp->p1>0 );
a570: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
a580: 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  p1+pOp->p2<=(p->
a590: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
a5a0: 73 6f 72 29 2b 31 20 29 3b 0a 0a 23 69 66 6e 64  sor)+1 );..#ifnd
a5b0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
a5c0: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
a5d0: 0a 20 20 2f 2a 20 52 75 6e 20 74 68 65 20 70 72  .  /* Run the pr
a5e0: 6f 67 72 65 73 73 20 63 6f 75 6e 74 65 72 20 6a  ogress counter j
a5f0: 75 73 74 20 62 65 66 6f 72 65 20 72 65 74 75 72  ust before retur
a600: 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  ning..  */.  if(
a610: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d   db->xProgress!=
a620: 30 0a 20 20 20 26 26 20 6e 56 6d 53 74 65 70 3e  0.   && nVmStep>
a630: 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 0a  =nProgressLimit.
a640: 20 20 20 26 26 20 64 62 2d 3e 78 50 72 6f 67 72     && db->xProgr
a650: 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73  ess(db->pProgres
a660: 73 41 72 67 29 21 3d 30 0a 20 20 29 7b 0a 20 20  sArg)!=0.  ){.  
a670: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e    rc = SQLITE_IN
a680: 54 45 52 52 55 50 54 3b 0a 20 20 20 20 67 6f 74  TERRUPT;.    got
a690: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
a6a0: 72 72 6f 72 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  rror;.  }.#endif
a6b0: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 73  ..  /* If this s
a6c0: 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69 6f  tatement has vio
a6d0: 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65 20  lated immediate 
a6e0: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
a6f0: 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a  traints, do.  **
a700: 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65 20   not return the 
a710: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 6d  number of rows m
a720: 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f 20  odified. And do 
a730: 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65 20  not RELEASE the 
a740: 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74  statement.  ** t
a750: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e  ransaction. It n
a760: 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65  eeds to be rolle
a770: 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66  d back.  */.  if
a780: 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63  ( SQLITE_OK!=(rc
a790: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
a7a0: 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a  eckFk(p, 0)) ){.
a7b0: 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
a7c0: 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75  flags&SQLITE_Cou
a7d0: 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61 73  ntRows );.    as
a7e0: 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74 6d  sert( p->usesStm
a7f0: 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20  tJournal );.    
a800: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
a810: 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20  o_error;.  }..  
a820: 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  /* If the SQLITE
a830: 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20  _CountRows flag 
a840: 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65  is set in sqlite
a850: 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  3.flags mask, th
a860: 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61  en .  ** DML sta
a870: 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74  tements invoke t
a880: 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65  his opcode to re
a890: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
a8a0: 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f  of rows .  ** mo
a8b0: 64 69 66 69 65 64 20 74 6f 20 74 68 65 20 75 73  dified to the us
a8c0: 65 72 2e 20 54 68 69 73 20 69 73 20 74 68 65 20  er. This is the 
a8d0: 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61 20  only way that a 
a8e0: 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65  VM that.  ** ope
a8f0: 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  ns a statement t
a900: 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69  ransaction may i
a910: 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64  nvoke this opcod
a920: 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20  e..  **.  ** In 
a930: 63 61 73 65 20 74 68 69 73 20 69 73 20 73 75 63  case this is suc
a940: 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63  h a statement, c
a950: 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65  lose any stateme
a960: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20  nt transaction. 
a970: 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68   ** opened by th
a980: 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74  is VM before ret
a990: 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74  urning control t
a9a0: 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73  o the user. This
a9b0: 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75   is to.  ** ensu
a9c0: 72 65 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e  re that statemen
a9d0: 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61  t-transactions a
a9e0: 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64  re always nested
a9f0: 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e  , not overlappin
aa00: 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f  g..  ** If the o
aa10: 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72  pen statement-tr
aa20: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74  ansaction is not
aa30: 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68   closed here, th
aa40: 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a  en the user.  **
aa50: 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65   may step anothe
aa60: 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20  r VM that opens 
aa70: 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e  its own statemen
aa80: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54  t transaction. T
aa90: 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61  his.  ** may lea
aaa0: 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67  d to overlapping
aab0: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
aac0: 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20  actions..  **.  
aad0: 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74  ** The statement
aae0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
aaf0: 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65  never a top-leve
ab00: 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  l transaction.  
ab10: 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52  Hence.  ** the R
ab20: 45 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f  ELEASE call belo
ab30: 77 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c  w can never fail
ab40: 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
ab50: 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d   p->iStatement==
ab60: 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53  0 || db->flags&S
ab70: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
ab80: 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
ab90: 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d  3VdbeCloseStatem
aba0: 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54  ent(p, SAVEPOINT
abb0: 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20 61 73 73  _RELEASE);.  ass
abc0: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
abd0: 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 61  OK );..  /* Inva
abe0: 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65 6d  lidate all ephem
abf0: 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77 20  eral cursor row 
ac00: 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63  caches */.  p->c
ac10: 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63 61  acheCtr = (p->ca
ac20: 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a  cheCtr + 2)|1;..
ac30: 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
ac40: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
ac50: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 72  e current row ar
ac60: 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74 65  e \000 terminate
ac70: 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65 20  d.  ** and have 
ac80: 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70 65  an assigned type
ac90: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20 61  .  The results a
aca0: 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c 69  re de-ephemerali
acb0: 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 20 73 69  zed as.  ** a si
acc0: 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a  de effect..  */.
acd0: 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73    pMem = p->pRes
ace0: 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70  ultSet = &aMem[p
acf0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69  Op->p1];.  for(i
ad00: 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69  =0; i<pOp->p2; i
ad10: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
ad20: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70 4d 65   memIsValid(&pMe
ad30: 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44 65 65  m[i]) );.    Dee
ad40: 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65  phemeralize(&pMe
ad50: 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73 65 72  m[i]);.    asser
ad60: 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67  t( (pMem[i].flag
ad70: 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d  s & MEM_Ephem)==
ad80: 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  0.            ||
ad90: 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20   (pMem[i].flags 
ada0: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
adb0: 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  lob))==0 );.    
adc0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
add0: 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d  lTerminate(&pMem
ade0: 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54  [i]);.    REGIST
adf0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
ae00: 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20  +i, &pMem[i]);. 
ae10: 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c   }.  if( db->mal
ae20: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
ae30: 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52   no_mem;..  /* R
ae40: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57  eturn SQLITE_ROW
ae50: 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20  .  */.  p->pc = 
ae60: 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
ae70: 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c   + 1;.  rc = SQL
ae80: 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20  ITE_ROW;.  goto 
ae90: 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a  vdbe_return;.}..
aea0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61  /* Opcode: Conca
aeb0: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
aec0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
aed0: 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]+r[P1].**
aee0: 0a 2a 2a 20 41 64 64 20 74 68 65 20 74 65 78 74  .** Add the text
aef0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
af00: 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20  onto the end of 
af10: 74 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72  the text in.** r
af20: 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73  egister P2 and s
af30: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
af40: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
af50: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 74 68 65  ** If either the
af60: 20 50 31 20 6f 72 20 50 32 20 74 65 78 74 20 61   P1 or P2 text a
af70: 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f  re NULL then sto
af80: 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a  re NULL in P3..*
af90: 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c  *.**   P3 = P2 |
afa0: 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73  | P1.**.** It is
afb0: 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20   illegal for P1 
afc0: 61 6e 64 20 50 33 20 74 6f 20 62 65 20 74 68 65  and P3 to be the
afd0: 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20   same register. 
afe0: 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66  Sometimes,.** if
aff0: 20 50 33 20 69 73 20 74 68 65 20 73 61 6d 65 20   P3 is the same 
b000: 72 65 67 69 73 74 65 72 20 61 73 20 50 32 2c 20  register as P2, 
b010: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
b020: 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f  on is able.** to
b030: 20 61 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28   avoid a memcpy(
b040: 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  )..*/.case OP_Co
b050: 6e 63 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ncat: {         
b060: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
b070: 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32  CONCAT, in1, in2
b080: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
b090: 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d  nByte;..  pIn1 =
b0a0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
b0b0: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
b0c0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74  pOp->p2];.  pOut
b0d0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
b0e0: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
b0f0: 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28  1!=pOut );.  if(
b100: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20   (pIn1->flags | 
b110: 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d  pIn2->flags) & M
b120: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
b130: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
b140: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  Null(pOut);.    
b150: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28  break;.  }.  if(
b160: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
b170: 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28  ) || ExpandBlob(
b180: 70 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  pIn2) ) goto no_
b190: 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79  mem;.  Stringify
b1a0: 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
b1b0: 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49  ;.  Stringify(pI
b1c0: 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n2, encoding);. 
b1d0: 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e   nByte = pIn1->n
b1e0: 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66   + pIn2->n;.  if
b1f0: 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d  ( nByte>db->aLim
b200: 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
b210: 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
b220: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
b230: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
b240: 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20  beMemGrow(pOut, 
b250: 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f  (int)nByte+2, pO
b260: 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20  ut==pIn2) ){.   
b270: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
b280: 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  }.  MemSetTypeFl
b290: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72  ag(pOut, MEM_Str
b2a0: 29 3b 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70  );.  if( pOut!=p
b2b0: 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70  In2 ){.    memcp
b2c0: 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d  y(pOut->z, pIn2-
b2d0: 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20  >z, pIn2->n);.  
b2e0: 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74  }.  memcpy(&pOut
b2f0: 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49  ->z[pIn2->n], pI
b300: 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b  n1->z, pIn1->n);
b310: 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65  .  pOut->z[nByte
b320: 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e  ]=0;.  pOut->z[n
b330: 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70  Byte+1] = 0;.  p
b340: 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
b350: 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
b360: 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a  n = (int)nByte;.
b370: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
b380: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
b390: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
b3a0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
b3b0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20  ./* Opcode: Add 
b3c0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
b3d0: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
b3e0: 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a  =r[P1]+r[P2].**.
b3f0: 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75 65  ** Add the value
b400: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
b410: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  to the value in 
b420: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
b430: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
b440: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b450: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
b460: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
b470: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b480: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
b490: 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32  : Multiply P1 P2
b4a0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
b4b0: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31  sis:  r[P3]=r[P1
b4c0: 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a  ]*r[P2].**.**.**
b4d0: 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61   Multiply the va
b4e0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b4f0: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
b500: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
b510: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
b520: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
b530: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
b540: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
b550: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
b560: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
b570: 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20 50 31  ode: Subtract P1
b580: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
b590: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
b5a0: 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]-r[P1].**.**
b5b0: 20 53 75 62 74 72 61 63 74 20 74 68 65 20 76 61   Subtract the va
b5c0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b5d0: 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75  P1 from the valu
b5e0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
b5f0: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
b600: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
b610: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
b620: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
b630: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b640: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
b650: 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31  pcode: Divide P1
b660: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
b670: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
b680: 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]/r[P1].**.**
b690: 20 44 69 76 69 64 65 20 74 68 65 20 76 61 6c 75   Divide the valu
b6a0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
b6b0: 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e   by the value in
b6c0: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
b6d0: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
b6e0: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
b6f0: 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29 2e 20   P3 (P3=P2/P1). 
b700: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
b710: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20  .** register P1 
b720: 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  is zero, then th
b730: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b740: 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  . If either inpu
b750: 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74  t is .** NULL, t
b760: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
b770: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
b780: 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32   Remainder P1 P2
b790: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
b7a0: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32  sis:  r[P3]=r[P2
b7b0: 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f  ]%r[P1].**.** Co
b7c0: 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e  mpute the remain
b7d0: 64 65 72 20 61 66 74 65 72 20 69 6e 74 65 67 65  der after intege
b7e0: 72 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73  r register P2 is
b7f0: 20 64 69 76 69 64 65 64 20 62 79 20 0a 2a 2a 20   divided by .** 
b800: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
b810: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
b820: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
b830: 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75   .** If the valu
b840: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
b850: 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72 65 73   is zero the res
b860: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20  ult is NULL..** 
b870: 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  If either operan
b880: 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  d is NULL, the r
b890: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
b8a0: 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20  /.case OP_Add:  
b8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8c0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 50   /* same as TK_P
b8d0: 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  LUS, in1, in2, o
b8e0: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
b8f0: 75 62 74 72 61 63 74 3a 20 20 20 20 20 20 20 20  ubtract:        
b900: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
b910: 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20   TK_MINUS, in1, 
b920: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
b930: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
b940: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b950: 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52 2c 20  ame as TK_STAR, 
b960: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
b970: 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65  /.case OP_Divide
b980: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
b990: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
b9a0: 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  LASH, in1, in2, 
b9b0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
b9c0: 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20 20  Remainder: {    
b9d0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
b9e0: 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69  s TK_REM, in1, i
b9f0: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 63 68  n2, out3 */.  ch
ba00: 61 72 20 62 49 6e 74 69 6e 74 3b 20 20 20 2f 2a  ar bIntint;   /*
ba10: 20 53 74 61 72 74 65 64 20 6f 75 74 20 61 73 20   Started out as 
ba20: 74 77 6f 20 69 6e 74 65 67 65 72 20 6f 70 65 72  two integer oper
ba30: 61 6e 64 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c  ands */.  u16 fl
ba40: 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d  ags;      /* Com
ba50: 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67  bined MEM_* flag
ba60: 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75  s from both inpu
ba70: 74 73 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65  ts */.  u16 type
ba80: 31 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72  1;      /* Numer
ba90: 69 63 20 74 79 70 65 20 6f 66 20 6c 65 66 74 20  ic type of left 
baa0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 75 31 36  operand */.  u16
bab0: 20 74 79 70 65 32 3b 20 20 20 20 20 20 2f 2a 20   type2;      /* 
bac0: 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20  Numeric type of 
bad0: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
bae0: 0a 20 20 69 36 34 20 69 41 3b 20 20 20 20 20 20  .  i64 iA;      
baf0: 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61     /* Integer va
bb00: 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72  lue of left oper
bb10: 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 42 3b  and */.  i64 iB;
bb20: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65           /* Inte
bb30: 67 65 72 20 76 61 6c 75 65 20 6f 66 20 72 69 67  ger value of rig
bb40: 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ht operand */.  
bb50: 64 6f 75 62 6c 65 20 72 41 3b 20 20 20 20 20 20  double rA;      
bb60: 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66  /* Real value of
bb70: 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f   left operand */
bb80: 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b 20 20 20  .  double rB;   
bb90: 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65     /* Real value
bba0: 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e   of right operan
bbb0: 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26  d */..  pIn1 = &
bbc0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
bbd0: 20 74 79 70 65 31 20 3d 20 6e 75 6d 65 72 69 63   type1 = numeric
bbe0: 54 79 70 65 28 70 49 6e 31 29 3b 0a 20 20 70 49  Type(pIn1);.  pI
bbf0: 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
bc00: 70 32 5d 3b 0a 20 20 74 79 70 65 32 20 3d 20 6e  p2];.  type2 = n
bc10: 75 6d 65 72 69 63 54 79 70 65 28 70 49 6e 32 29  umericType(pIn2)
bc20: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
bc30: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61  [pOp->p3];.  fla
bc40: 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73  gs = pIn1->flags
bc50: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a   | pIn2->flags;.
bc60: 20 20 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d    if( (flags & M
bc70: 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 20 67 6f  EM_Null)!=0 ) go
bc80: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
bc90: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
bca0: 69 66 28 20 28 74 79 70 65 31 20 26 20 74 79 70  if( (type1 & typ
bcb0: 65 32 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  e2 & MEM_Int)!=0
bcc0: 20 29 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e   ){.    iA = pIn
bcd0: 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d  1->u.i;.    iB =
bce0: 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20   pIn2->u.i;.    
bcf0: 62 49 6e 74 69 6e 74 20 3d 20 31 3b 0a 20 20 20  bIntint = 1;.   
bd00: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
bd10: 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61  code ){.      ca
bd20: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
bd30: 20 69 66 28 20 73 71 6c 69 74 65 33 41 64 64 49   if( sqlite3AddI
bd40: 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67  nt64(&iB,iA) ) g
bd50: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72  oto fp_math;  br
bd60: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
bd70: 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 69 66  OP_Subtract:  if
bd80: 28 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36  ( sqlite3SubInt6
bd90: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
bda0: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
bdb0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
bdc0: 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66 28 20 73  Multiply:  if( s
bdd0: 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 26  qlite3MulInt64(&
bde0: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
bdf0: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
be00: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76       case OP_Div
be10: 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ide: {.        i
be20: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
be30: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
be40: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
be50: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 26 26     if( iA==-1 &&
be60: 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e   iB==SMALLEST_IN
be70: 54 36 34 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  T64 ) goto fp_ma
be80: 74 68 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f  th;.        iB /
be90: 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = iA;.        br
bea0: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
beb0: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
bec0: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20        if( iA==0 
bed0: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
bee0: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
bef0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  ;.        if( iA
bf00: 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20  ==-1 ) iA = 1;. 
bf10: 20 20 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b         iB %= iA;
bf20: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
bf30: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
bf40: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42    pOut->u.i = iB
bf50: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
bf60: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
bf70: 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  nt);.  }else{.  
bf80: 20 20 62 49 6e 74 69 6e 74 20 3d 20 30 3b 0a 66    bIntint = 0;.f
bf90: 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72 41 20 3d  p_math:.    rA =
bfa0: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
bfb0: 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20  Value(pIn1);.   
bfc0: 20 72 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rB = sqlite3Vdb
bfd0: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 32 29  eRealValue(pIn2)
bfe0: 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f  ;.    switch( pO
bff0: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
c000: 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20     case OP_Add: 
c010: 20 20 20 20 20 20 20 20 72 42 20 2b 3d 20 72 41          rB += rA
c020: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
c030: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62       case OP_Sub
c040: 74 72 61 63 74 3a 20 20 20 20 72 42 20 2d 3d 20  tract:    rB -= 
c050: 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  rA;       break;
c060: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d  .      case OP_M
c070: 75 6c 74 69 70 6c 79 3a 20 20 20 20 72 42 20 2a  ultiply:    rB *
c080: 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61  = rA;       brea
c090: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
c0a0: 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20  _Divide: {.     
c0b0: 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20     /* (double)0 
c0c0: 49 6e 20 63 61 73 65 20 6f 66 20 53 51 4c 49 54  In case of SQLIT
c0d0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
c0e0: 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20  POINT... */.    
c0f0: 20 20 20 20 69 66 28 20 72 41 3d 3d 28 64 6f 75      if( rA==(dou
c100: 62 6c 65 29 30 20 29 20 67 6f 74 6f 20 61 72 69  ble)0 ) goto ari
c110: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
c120: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
c130: 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20  rB /= rA;.      
c140: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
c150: 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20  .      default: 
c160: 7b 0a 20 20 20 20 20 20 20 20 69 41 20 3d 20 28  {.        iA = (
c170: 69 36 34 29 72 41 3b 0a 20 20 20 20 20 20 20 20  i64)rA;.        
c180: 69 42 20 3d 20 28 69 36 34 29 72 42 3b 0a 20 20  iB = (i64)rB;.  
c190: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20        if( iA==0 
c1a0: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
c1b0: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
c1c0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  ;.        if( iA
c1d0: 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20  ==-1 ) iA = 1;. 
c1e0: 20 20 20 20 20 20 20 72 42 20 3d 20 28 64 6f 75         rB = (dou
c1f0: 62 6c 65 29 28 69 42 20 25 20 69 41 29 3b 0a 20  ble)(iB % iA);. 
c200: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
c210: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 69 66 64      }.    }.#ifd
c220: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
c230: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
c240: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 42    pOut->u.i = rB
c250: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
c260: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
c270: 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 69  nt);.#else.    i
c280: 66 28 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  f( sqlite3IsNaN(
c290: 72 42 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  rB) ){.      got
c2a0: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
c2b0: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
c2c0: 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 72   }.    pOut->u.r
c2d0: 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = rB;.    MemSe
c2e0: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
c2f0: 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69  MEM_Real);.    i
c300: 66 28 20 28 28 74 79 70 65 31 7c 74 79 70 65 32  f( ((type1|type2
c310: 29 26 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 26  )&MEM_Real)==0 &
c320: 26 20 21 62 49 6e 74 69 6e 74 20 29 7b 0a 20 20  & !bIntint ){.  
c330: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 49      sqlite3VdbeI
c340: 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70  ntegerAffinity(p
c350: 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  Out);.    }.#end
c360: 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  if.  }.  break;.
c370: 0a 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75  .arithmetic_resu
c380: 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71  lt_is_null:.  sq
c390: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
c3a0: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  ull(pOut);.  bre
c3b0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
c3c0: 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20 2a  : CollSeq P1 * *
c3d0: 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20   P4.**.** P4 is 
c3e0: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43  a pointer to a C
c3f0: 6f 6c 6c 53 65 71 20 73 74 72 75 63 74 2e 20 49  ollSeq struct. I
c400: 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20  f the next call 
c410: 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  to a user functi
c420: 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61  on.** or aggrega
c430: 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33  te calls sqlite3
c440: 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29  GetFuncCollSeq()
c450: 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e  , this collation
c460: 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a   sequence will.*
c470: 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54  * be returned. T
c480: 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
c490: 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28  he built-in min(
c4a0: 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c  ), max() and nul
c4b0: 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f  lif().** functio
c4c0: 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20  ns..**.** If P1 
c4d0: 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
c4e0: 6e 20 69 74 20 69 73 20 61 20 72 65 67 69 73 74  n it is a regist
c4f0: 65 72 20 74 68 61 74 20 61 20 73 75 62 73 65 71  er that a subseq
c500: 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a  uent min() or.**
c510: 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65   max() aggregate
c520: 20 77 69 6c 6c 20 73 65 74 20 74 6f 20 31 20 69   will set to 1 i
c530: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  f the current ro
c540: 77 20 69 73 20 6e 6f 74 20 74 68 65 20 6d 69 6e  w is not the min
c550: 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d  imum or.** maxim
c560: 75 6d 2e 20 20 54 68 65 20 50 31 20 72 65 67 69  um.  The P1 regi
c570: 73 74 65 72 20 69 73 20 69 6e 69 74 69 61 6c 69  ster is initiali
c580: 7a 65 64 20 74 6f 20 30 20 62 79 20 74 68 69 73  zed to 0 by this
c590: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
c5a0: 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
c5b0: 65 20 75 73 65 64 20 62 79 20 74 68 65 20 69 6d  e used by the im
c5c0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
c5d0: 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e  the aforemention
c5e0: 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20  ed functions.** 
c5f0: 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 65 20  to retrieve the 
c600: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
c610: 63 65 20 73 65 74 20 62 79 20 74 68 69 73 20 6f  ce set by this o
c620: 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61  pcode is not ava
c630: 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63  ilable.** public
c640: 6c 79 2e 20 20 4f 6e 6c 79 20 62 75 69 6c 74 2d  ly.  Only built-
c650: 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76  in functions hav
c660: 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 69 73  e access to this
c670: 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73   feature..*/.cas
c680: 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a  e OP_CollSeq: {.
c690: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
c6a0: 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45  4type==P4_COLLSE
c6b0: 51 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  Q );.  if( pOp->
c6c0: 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  p1 ){.    sqlite
c6d0: 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
c6e0: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c  (&aMem[pOp->p1],
c6f0: 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b   0);.  }.  break
c700: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
c710: 46 75 6e 63 74 69 6f 6e 30 20 50 31 20 50 32 20  Function0 P1 P2 
c720: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
c730: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66 75 6e 63  psis: r[P3]=func
c740: 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a  (r[P2@P5]).**.**
c750: 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72 20 66   Invoke a user f
c760: 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73 20 61  unction (P4 is a
c770: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 46 75   pointer to a Fu
c780: 6e 63 44 65 66 20 6f 62 6a 65 63 74 20 74 68 61  ncDef object tha
c790: 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20 74 68 65  t.** defines the
c7a0: 20 66 75 6e 63 74 69 6f 6e 29 20 77 69 74 68 20   function) with 
c7b0: 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74 61 6b  P5 arguments tak
c7c0: 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  en from register
c7d0: 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75 63 63 65   P2 and.** succe
c7e0: 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65 73 75  ssors.  The resu
c7f0: 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  lt of the functi
c800: 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  on is stored in 
c810: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
c820: 52 65 67 69 73 74 65 72 20 50 33 20 6d 75 73 74  Register P3 must
c830: 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20 74   not be one of t
c840: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75  he function inpu
c850: 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ts..**.** P1 is 
c860: 61 20 33 32 2d 62 69 74 20 62 69 74 6d 61 73 6b  a 32-bit bitmask
c870: 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74   indicating whet
c880: 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20  her or not each 
c890: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
c8a0: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61 73  .** function was
c8b0: 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62   determined to b
c8c0: 65 20 63 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f  e constant at co
c8d0: 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49 66 20 74  mpile time. If t
c8e0: 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75  he first.** argu
c8f0: 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73 74 61 6e  ment was constan
c900: 74 20 74 68 65 6e 20 62 69 74 20 30 20 6f 66 20  t then bit 0 of 
c910: 50 31 20 69 73 20 73 65 74 2e 20 54 68 69 73 20  P1 is set. This 
c920: 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  is used to deter
c930: 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20  mine.** whether 
c940: 6d 65 74 61 20 64 61 74 61 20 61 73 73 6f 63 69  meta data associ
c950: 61 74 65 64 20 77 69 74 68 20 61 20 75 73 65 72  ated with a user
c960: 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65   function argume
c970: 6e 74 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  nt using the.** 
c980: 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64  sqlite3_set_auxd
c990: 61 74 61 28 29 20 41 50 49 20 6d 61 79 20 62 65  ata() API may be
c9a0: 20 73 61 66 65 6c 79 20 72 65 74 61 69 6e 65 64   safely retained
c9b0: 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a   until the next.
c9c0: 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ** invocation of
c9d0: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a   this opcode..**
c9e0: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 75  .** See also: Fu
c9f0: 6e 63 74 69 6f 6e 2c 20 41 67 67 53 74 65 70 2c  nction, AggStep,
ca00: 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 2f 2a 20   AggFinal.*/./* 
ca10: 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e  Opcode: Function
ca20: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
ca30: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
ca40: 33 5d 3d 66 75 6e 63 28 72 5b 50 32 40 50 35 5d  3]=func(r[P2@P5]
ca50: 29 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61  ).**.** Invoke a
ca60: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28   user function (
ca70: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
ca80: 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f  to an sqlite3_co
ca90: 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 74 68 61  ntext object tha
caa0: 74 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20  t.** contains a 
cab0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66  pointer to the f
cac0: 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 72 75  unction to be ru
cad0: 6e 29 20 77 69 74 68 20 50 35 20 61 72 67 75 6d  n) with P5 argum
cae0: 65 6e 74 73 20 74 61 6b 65 6e 0a 2a 2a 20 66 72  ents taken.** fr
caf0: 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61  om register P2 a
cb00: 6e 64 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20  nd successors.  
cb10: 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  The result of th
cb20: 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74  e function is st
cb30: 6f 72 65 64 0a 2a 2a 20 69 6e 20 72 65 67 69 73  ored.** in regis
cb40: 74 65 72 20 50 33 2e 20 20 52 65 67 69 73 74 65  ter P3.  Registe
cb50: 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65  r P3 must not be
cb60: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63   one of the func
cb70: 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a  tion inputs..**.
cb80: 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62 69  ** P1 is a 32-bi
cb90: 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61  t bitmask indica
cba0: 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
cbb0: 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e  not each argumen
cbc0: 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e  t to the .** fun
cbd0: 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d  ction was determ
cbe0: 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74  ined to be const
cbf0: 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74  ant at compile t
cc00: 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72 73  ime. If the firs
cc10: 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61  t.** argument wa
cc20: 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20  s constant then 
cc30: 62 69 74 20 30 20 6f 66 20 50 31 20 69 73 20 73  bit 0 of P1 is s
cc40: 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  et. This is used
cc50: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a   to determine.**
cc60: 20 77 68 65 74 68 65 72 20 6d 65 74 61 20 64 61   whether meta da
cc70: 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ta associated wi
cc80: 74 68 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  th a user functi
cc90: 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e  on argument usin
cca0: 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  g the.** sqlite3
ccb0: 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29 20 41  _set_auxdata() A
ccc0: 50 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79  PI may be safely
ccd0: 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20   retained until 
cce0: 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f  the next.** invo
ccf0: 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f  cation of this o
cd00: 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c  pcode..**.** SQL
cd10: 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 69   functions are i
cd20: 6e 69 74 69 61 6c 6c 79 20 63 6f 64 65 64 20 61  nitially coded a
cd30: 73 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 30 20 77  s OP_Function0 w
cd40: 69 74 68 20 50 34 20 70 6f 69 6e 74 69 6e 67 0a  ith P4 pointing.
cd50: 2a 2a 20 74 6f 20 61 20 46 75 6e 63 44 65 66 20  ** to a FuncDef 
cd60: 6f 62 6a 65 63 74 2e 20 20 42 75 74 20 6f 6e 20  object.  But on 
cd70: 66 69 72 73 74 20 65 76 61 6c 75 61 74 69 6f 6e  first evaluation
cd80: 2c 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64  , the P4 operand
cd90: 20 69 73 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63   is.** automatic
cda0: 61 6c 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 69  ally converted i
cdb0: 6e 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63  nto an sqlite3_c
cdc0: 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 61 6e  ontext object an
cdd0: 64 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 0a  d the operation.
cde0: 2a 2a 20 63 68 61 6e 67 65 64 20 74 6f 20 74 68  ** changed to th
cdf0: 69 73 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 20 6f  is OP_Function o
ce00: 70 63 6f 64 65 2e 20 20 49 6e 20 74 68 69 73 20  pcode.  In this 
ce10: 77 61 79 2c 20 74 68 65 20 69 6e 69 74 69 61 6c  way, the initial
ce20: 69 7a 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ization of.** th
ce30: 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  e sqlite3_contex
ce40: 74 20 6f 62 6a 65 63 74 20 6f 63 63 75 72 73 20  t object occurs 
ce50: 6f 6e 6c 79 20 6f 6e 63 65 2c 20 72 61 74 68 65  only once, rathe
ce60: 72 20 74 68 61 6e 20 6f 6e 63 65 20 66 6f 72 20  r than once for 
ce70: 65 61 63 68 0a 2a 2a 20 65 76 61 6c 75 61 74 69  each.** evaluati
ce80: 6f 6e 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  on of the functi
ce90: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  on..**.** See al
cea0: 73 6f 3a 20 46 75 6e 63 74 69 6f 6e 30 2c 20 41  so: Function0, A
ceb0: 67 67 53 74 65 70 2c 20 41 67 67 46 69 6e 61 6c  ggStep, AggFinal
cec0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63  .*/.case OP_Func
ced0: 74 69 6f 6e 30 3a 20 7b 0a 20 20 69 6e 74 20 6e  tion0: {.  int n
cee0: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
cef0: 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73  ext *pCtx;..  as
cf00: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
cf10: 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b  e==P4_FUNCDEF );
cf20: 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  .  n = pOp->p5;.
cf30: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
cf40: 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
cf50: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
cf60: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73  nCursor) );.  as
cf70: 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70  sert( n==0 || (p
cf80: 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
cf90: 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  >p2+n<=(p->nMem+
cfa0: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  1 - p->nCursor)+
cfb0: 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
cfc0: 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20  pOp->p3<pOp->p2 
cfd0: 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d  || pOp->p3>=pOp-
cfe0: 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20  >p2+n );.  pCtx 
cff0: 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
d000: 63 52 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f  cRawNN(db, sizeo
d010: 66 28 2a 70 43 74 78 29 20 2b 20 28 6e 2d 31 29  f(*pCtx) + (n-1)
d020: 2a 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f  *sizeof(sqlite3_
d030: 76 61 6c 75 65 2a 29 29 3b 0a 20 20 69 66 28 20  value*));.  if( 
d040: 70 43 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  pCtx==0 ) goto n
d050: 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70  o_mem;.  pCtx->p
d060: 4f 75 74 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d  Out = 0;.  pCtx-
d070: 3e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34  >pFunc = pOp->p4
d080: 2e 70 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d 3e  .pFunc;.  pCtx->
d090: 69 4f 70 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  iOp = (int)(pOp 
d0a0: 2d 20 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d 3e  - aOp);.  pCtx->
d0b0: 70 56 64 62 65 20 3d 20 70 3b 0a 20 20 70 43 74  pVdbe = p;.  pCt
d0c0: 78 2d 3e 61 72 67 63 20 3d 20 6e 3b 0a 20 20 70  x->argc = n;.  p
d0d0: 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f  Op->p4type = P4_
d0e0: 46 55 4e 43 43 54 58 3b 0a 20 20 70 4f 70 2d 3e  FUNCCTX;.  pOp->
d0f0: 70 34 2e 70 43 74 78 20 3d 20 70 43 74 78 3b 0a  p4.pCtx = pCtx;.
d100: 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20    pOp->opcode = 
d110: 4f 50 5f 46 75 6e 63 74 69 6f 6e 3b 0a 20 20 2f  OP_Function;.  /
d120: 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  * Fall through i
d130: 6e 74 6f 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 20  nto OP_Function 
d140: 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 46 75 6e  */.}.case OP_Fun
d150: 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69  ction: {.  int i
d160: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
d170: 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73  ext *pCtx;..  as
d180: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
d190: 65 3d 3d 50 34 5f 46 55 4e 43 43 54 58 20 29 3b  e==P4_FUNCCTX );
d1a0: 0a 20 20 70 43 74 78 20 3d 20 70 4f 70 2d 3e 70  .  pCtx = pOp->p
d1b0: 34 2e 70 43 74 78 3b 0a 0a 20 20 2f 2a 20 49 66  4.pCtx;..  /* If
d1c0: 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69   this function i
d1d0: 73 20 69 6e 73 69 64 65 20 6f 66 20 61 20 74 72  s inside of a tr
d1e0: 69 67 67 65 72 2c 20 74 68 65 20 72 65 67 69 73  igger, the regis
d1f0: 74 65 72 20 61 72 72 61 79 20 69 6e 20 61 4d 65  ter array in aMe
d200: 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68 74 20 63  m[].  ** might c
d210: 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20 65  hange from one e
d220: 76 61 6c 75 61 74 69 6f 6e 20 74 6f 20 74 68 65  valuation to the
d230: 20 6e 65 78 74 2e 20 20 54 68 65 20 6e 65 78 74   next.  The next
d240: 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 0a 20   block of code. 
d250: 20 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65   ** checks to se
d260: 65 20 69 66 20 74 68 65 20 72 65 67 69 73 74 65  e if the registe
d270: 72 20 61 72 72 61 79 20 68 61 73 20 63 68 61 6e  r array has chan
d280: 67 65 64 2c 20 61 6e 64 20 69 66 20 73 6f 20 69  ged, and if so i
d290: 74 0a 20 20 2a 2a 20 72 65 69 6e 69 74 69 61 6c  t.  ** reinitial
d2a0: 69 7a 65 73 20 74 68 65 20 72 65 6c 61 76 61 6e  izes the relavan
d2b0: 74 20 70 61 72 74 73 20 6f 66 20 74 68 65 20 73  t parts of the s
d2c0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f  qlite3_context o
d2d0: 62 6a 65 63 74 20 2a 2f 0a 20 20 70 4f 75 74 20  bject */.  pOut 
d2e0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
d2f0: 3b 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 70 4f  ;.  if( pCtx->pO
d300: 75 74 20 21 3d 20 70 4f 75 74 20 29 7b 0a 20 20  ut != pOut ){.  
d310: 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20 70    pCtx->pOut = p
d320: 4f 75 74 3b 0a 20 20 20 20 66 6f 72 28 69 3d 70  Out;.    for(i=p
d330: 43 74 78 2d 3e 61 72 67 63 2d 31 3b 20 69 3e 3d  Ctx->argc-1; i>=
d340: 30 3b 20 69 2d 2d 29 20 70 43 74 78 2d 3e 61 72  0; i--) pCtx->ar
d350: 67 76 5b 69 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f  gv[i] = &aMem[pO
d360: 70 2d 3e 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 20  p->p2+i];.  }.. 
d370: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
d380: 65 28 70 2c 20 70 43 74 78 2d 3e 70 4f 75 74 29  e(p, pCtx->pOut)
d390: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
d3a0: 44 45 42 55 47 0a 20 20 66 6f 72 28 69 3d 30 3b  DEBUG.  for(i=0;
d3b0: 20 69 3c 70 43 74 78 2d 3e 61 72 67 63 3b 20 69   i<pCtx->argc; i
d3c0: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
d3d0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 43 74 78   memIsValid(pCtx
d3e0: 2d 3e 61 72 67 76 5b 69 5d 29 20 29 3b 0a 20 20  ->argv[i]) );.  
d3f0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
d400: 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 43 74 78  (pOp->p2+i, pCtx
d410: 2d 3e 61 72 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a  ->argv[i]);.  }.
d420: 23 65 6e 64 69 66 0a 20 20 4d 65 6d 53 65 74 54  #endif.  MemSetT
d430: 79 70 65 46 6c 61 67 28 70 43 74 78 2d 3e 70 4f  ypeFlag(pCtx->pO
d440: 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
d450: 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41   pCtx->fErrorOrA
d460: 75 78 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 6c 61  ux = 0;.  db->la
d470: 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
d480: 77 69 64 3b 0a 20 20 28 2a 70 43 74 78 2d 3e 70  wid;.  (*pCtx->p
d490: 46 75 6e 63 2d 3e 78 53 46 75 6e 63 29 28 70 43  Func->xSFunc)(pC
d4a0: 74 78 2c 20 70 43 74 78 2d 3e 61 72 67 63 2c 20  tx, pCtx->argc, 
d4b0: 70 43 74 78 2d 3e 61 72 67 76 29 3b 2f 2a 20 49  pCtx->argv);/* I
d4c0: 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33  MP: R-24505-2323
d4d0: 30 20 2a 2f 0a 20 20 6c 61 73 74 52 6f 77 69 64  0 */.  lastRowid
d4e0: 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64   = db->lastRowid
d4f0: 3b 20 20 2f 2a 20 52 65 6d 65 6d 62 65 72 20 72  ;  /* Remember r
d500: 6f 77 69 64 20 63 68 61 6e 67 65 73 20 6d 61 64  owid changes mad
d510: 65 20 62 79 20 78 53 46 75 6e 63 20 2a 2f 0a 0a  e by xSFunc */..
d520: 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75 6e 63    /* If the func
d530: 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20 61 6e  tion returned an
d540: 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20 61 6e   error, throw an
d550: 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20   exception */.  
d560: 69 66 28 20 70 43 74 78 2d 3e 66 45 72 72 6f 72  if( pCtx->fError
d570: 4f 72 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28  OrAux ){.    if(
d580: 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 29   pCtx->isError )
d590: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
d5a0: 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22  dbeError(p, "%s"
d5b0: 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
d5c0: 74 65 78 74 28 70 43 74 78 2d 3e 70 4f 75 74 29  text(pCtx->pOut)
d5d0: 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 70 43  );.      rc = pC
d5e0: 74 78 2d 3e 69 73 45 72 72 6f 72 3b 0a 20 20 20  tx->isError;.   
d5f0: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
d600: 62 65 44 65 6c 65 74 65 41 75 78 44 61 74 61 28  beDeleteAuxData(
d610: 64 62 2c 20 26 70 2d 3e 70 41 75 78 44 61 74 61  db, &p->pAuxData
d620: 2c 20 70 43 74 78 2d 3e 69 4f 70 2c 20 70 4f 70  , pCtx->iOp, pOp
d630: 2d 3e 70 31 29 3b 0a 20 20 20 20 69 66 28 20 72  ->p1);.    if( r
d640: 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
d650: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
d660: 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20  ..  /* Copy the 
d670: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75  result of the fu
d680: 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69  nction into regi
d690: 73 74 65 72 20 50 33 20 2a 2f 0a 20 20 69 66 28  ster P3 */.  if(
d6a0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 28   pOut->flags & (
d6b0: 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62  MEM_Str|MEM_Blob
d6c0: 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ) ){.    sqlite3
d6d0: 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
d6e0: 6e 67 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 65  ng(pCtx->pOut, e
d6f0: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 69 66  ncoding);.    if
d700: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
d710: 54 6f 6f 42 69 67 28 70 43 74 78 2d 3e 70 4f 75  TooBig(pCtx->pOu
d720: 74 29 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  t) ) goto too_bi
d730: 67 3b 0a 20 20 7d 0a 0a 20 20 52 45 47 49 53 54  g;.  }..  REGIST
d740: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
d750: 2c 20 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20  , pCtx->pOut);. 
d760: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
d770: 53 49 5a 45 28 70 43 74 78 2d 3e 70 4f 75 74 29  SIZE(pCtx->pOut)
d780: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
d790: 20 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20   Opcode: BitAnd 
d7a0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
d7b0: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
d7c0: 3d 72 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a  =r[P1]&r[P2].**.
d7d0: 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d  ** Take the bit-
d7e0: 77 69 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20  wise AND of the 
d7f0: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
d800: 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  er P1 and P2 and
d810: 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65  .** store the re
d820: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
d830: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
d840: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
d850: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
d860: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
d870: 65 3a 20 42 69 74 4f 72 20 50 31 20 50 32 20 50  e: BitOr P1 P2 P
d880: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
d890: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c  s:  r[P3]=r[P1]|
d8a0: 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  r[P2].**.** Take
d8b0: 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52   the bit-wise OR
d8c0: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
d8d0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
d8e0: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
d8f0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
d900: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
d910: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
d920: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
d930: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
d940: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74  /* Opcode: Shift
d950: 4c 65 66 74 20 50 31 20 50 32 20 50 33 20 2a 20  Left P1 P2 P3 * 
d960: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
d970: 72 5b 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50  r[P3]=r[P2]<<r[P
d980: 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74  1].**.** Shift t
d990: 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
d9a0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
d9b0: 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79 20 74  to the left by t
d9c0: 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  he.** number of 
d9d0: 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62  bits specified b
d9e0: 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e  y the integer in
d9f0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
da00: 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   Store the resul
da10: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
da20: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
da30: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
da40: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
da50: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
da60: 53 68 69 66 74 52 69 67 68 74 20 50 31 20 50 32  ShiftRight P1 P2
da70: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
da80: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32  sis:  r[P3]=r[P2
da90: 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53  ]>>r[P1].**.** S
daa0: 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72  hift the integer
dab0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
dac0: 65 72 20 50 32 20 74 6f 20 74 68 65 20 72 69 67  er P2 to the rig
dad0: 68 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d  ht by the.** num
dae0: 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63  ber of bits spec
daf0: 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74  ified by the int
db00: 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  eger in register
db10: 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68   P1..** Store th
db20: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
db30: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
db40: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
db50: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
db60: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
db70: 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20   OP_BitAnd:     
db80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
db90: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44  ame as TK_BITAND
dba0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
dbb0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f   */.case OP_BitO
dbc0: 72 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r:              
dbd0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
dbe0: 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e  K_BITOR, in1, in
dbf0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
dc00: 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20  OP_ShiftLeft:   
dc10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
dc20: 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c  me as TK_LSHIFT,
dc30: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
dc40: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74  */.case OP_Shift
dc50: 52 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20  Right: {        
dc60: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
dc70: 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e  _RSHIFT, in1, in
dc80: 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34  2, out3 */.  i64
dc90: 20 69 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20   iA;.  u64 uA;. 
dca0: 20 69 36 34 20 69 42 3b 0a 20 20 75 38 20 6f 70   i64 iB;.  u8 op
dcb0: 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
dcc0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
dcd0: 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
dce0: 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p2];.  pOut = &a
dcf0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
dd00: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
dd10: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20   | pIn2->flags) 
dd20: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
dd30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
dd40: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
dd50: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
dd60: 69 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  iA = sqlite3Vdbe
dd70: 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  IntValue(pIn2);.
dd80: 20 20 69 42 20 3d 20 73 71 6c 69 74 65 33 56 64    iB = sqlite3Vd
dd90: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
dda0: 3b 0a 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70  ;.  op = pOp->op
ddb0: 63 6f 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d  code;.  if( op==
ddc0: 4f 50 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20 20  OP_BitAnd ){.   
ddd0: 20 69 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c   iA &= iB;.  }el
dde0: 73 65 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69  se if( op==OP_Bi
ddf0: 74 4f 72 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d  tOr ){.    iA |=
de00: 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28   iB;.  }else if(
de10: 20 69 42 21 3d 30 20 29 7b 0a 20 20 20 20 61 73   iB!=0 ){.    as
de20: 73 65 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69  sert( op==OP_Shi
de30: 66 74 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f  ftRight || op==O
de40: 50 5f 53 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a  P_ShiftLeft );..
de50: 20 20 20 20 2f 2a 20 49 66 20 73 68 69 66 74 69      /* If shifti
de60: 6e 67 20 62 79 20 61 20 6e 65 67 61 74 69 76 65  ng by a negative
de70: 20 61 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20 69   amount, shift i
de80: 6e 20 74 68 65 20 6f 74 68 65 72 20 64 69 72 65  n the other dire
de90: 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28  ction */.    if(
dea0: 20 69 42 3c 30 20 29 7b 0a 20 20 20 20 20 20 61   iB<0 ){.      a
deb0: 73 73 65 72 74 28 20 4f 50 5f 53 68 69 66 74 52  ssert( OP_ShiftR
dec0: 69 67 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  ight==OP_ShiftLe
ded0: 66 74 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f 70  ft+1 );.      op
dee0: 20 3d 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66   = 2*OP_ShiftLef
def0: 74 20 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20  t + 1 - op;.    
df00: 20 20 69 42 20 3d 20 69 42 3e 28 2d 36 34 29 20    iB = iB>(-64) 
df10: 3f 20 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20 20  ? -iB : 64;.    
df20: 7d 0a 0a 20 20 20 20 69 66 28 20 69 42 3e 3d 36  }..    if( iB>=6
df30: 34 20 29 7b 0a 20 20 20 20 20 20 69 41 20 3d 20  4 ){.      iA = 
df40: 28 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50  (iA>=0 || op==OP
df50: 5f 53 68 69 66 74 4c 65 66 74 29 20 3f 20 30 20  _ShiftLeft) ? 0 
df60: 3a 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  : -1;.    }else{
df70: 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 75  .      memcpy(&u
df80: 41 2c 20 26 69 41 2c 20 73 69 7a 65 6f 66 28 75  A, &iA, sizeof(u
df90: 41 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f  A));.      if( o
dfa0: 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20  p==OP_ShiftLeft 
dfb0: 29 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3c 3c  ){.        uA <<
dfc0: 3d 20 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73  = iB;.      }els
dfd0: 65 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3e 3e  e{.        uA >>
dfe0: 3d 20 69 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a  = iB;.        /*
dff0: 20 53 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20   Sign-extend on 
e000: 61 20 72 69 67 68 74 20 73 68 69 66 74 20 6f 66  a right shift of
e010: 20 61 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62   a negative numb
e020: 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  er */.        if
e030: 28 20 69 41 3c 30 20 29 20 75 41 20 7c 3d 20 28  ( iA<0 ) uA |= (
e040: 28 28 28 75 36 34 29 30 78 66 66 66 66 66 66 66  (((u64)0xfffffff
e050: 66 29 3c 3c 33 32 29 7c 30 78 66 66 66 66 66 66  f)<<32)|0xffffff
e060: 66 66 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a  ff) << (64-iB);.
e070: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65        }.      me
e080: 6d 63 70 79 28 26 69 41 2c 20 26 75 41 2c 20 73  mcpy(&iA, &uA, s
e090: 69 7a 65 6f 66 28 69 41 29 29 3b 0a 20 20 20 20  izeof(iA));.    
e0a0: 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  }.  }.  pOut->u.
e0b0: 69 20 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74  i = iA;.  MemSet
e0c0: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
e0d0: 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b  EM_Int);.  break
e0e0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
e0f0: 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20  AddImm  P1 P2 * 
e100: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
e110: 20 20 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32    r[P1]=r[P1]+P2
e120: 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20  .** .** Add the 
e130: 63 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74  constant P2 to t
e140: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
e150: 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20  ster P1..** The 
e160: 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73  result is always
e170: 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a   an integer..**.
e180: 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20  ** To force any 
e190: 72 65 67 69 73 74 65 72 20 74 6f 20 62 65 20 61  register to be a
e1a0: 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20  n integer, just 
e1b0: 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f  add 0..*/.case O
e1c0: 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20  P_AddImm: {     
e1d0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
e1e0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
e1f0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41  pOp->p1];.  memA
e200: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
e210: 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
e220: 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
e230: 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d  y(pIn1);.  pIn1-
e240: 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  >u.i += pOp->p2;
e250: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
e260: 4f 70 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e  Opcode: MustBeIn
e270: 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
e280: 20 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76   .** Force the v
e290: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
e2a0: 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74   P1 to be an int
e2b0: 65 67 65 72 2e 20 20 49 66 20 74 68 65 20 76 61  eger.  If the va
e2c0: 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
e2d0: 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61  not an integer a
e2e0: 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e  nd cannot be con
e2f0: 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69  verted into an i
e300: 6e 74 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75  nteger.** withou
e310: 74 20 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65  t data loss, the
e320: 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
e330: 6c 79 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20  ly to P2, or if 
e340: 50 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61  P2==0.** raise a
e350: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43  n SQLITE_MISMATC
e360: 48 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a  H exception..*/.
e370: 63 61 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e  case OP_MustBeIn
e380: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
e390: 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
e3a0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
e3b0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28  Op->p1];.  if( (
e3c0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
e3d0: 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
e3e0: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
e3f0: 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  In1, SQLITE_AFF_
e400: 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e  NUMERIC, encodin
e410: 67 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  g);.    VdbeBran
e420: 63 68 54 61 6b 65 6e 28 28 70 49 6e 31 2d 3e 66  chTaken((pIn1->f
e430: 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30  lags&MEM_Int)==0
e440: 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 28 70  , 2);.    if( (p
e450: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
e460: 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
e470: 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30    if( pOp->p2==0
e480: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
e490: 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48   SQLITE_MISMATCH
e4a0: 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  ;.        goto a
e4b0: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
e4c0: 72 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  r;.      }else{.
e4d0: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d          goto jum
e4e0: 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 7d  p_to_p2;.      }
e4f0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d  .    }.  }.  Mem
e500: 53 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31  SetTypeFlag(pIn1
e510: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72  , MEM_Int);.  br
e520: 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
e530: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
e540: 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70  TING_POINT./* Op
e550: 63 6f 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69  code: RealAffini
e560: 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ty P1 * * * *.**
e570: 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72 20  .** If register 
e580: 50 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65  P1 holds an inte
e590: 67 65 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74  ger convert it t
e5a0: 6f 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a  o a real value..
e5b0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
e5c0: 65 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 65  e is used when e
e5d0: 78 74 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d  xtracting inform
e5e0: 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c  ation from a col
e5f0: 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20  umn that.** has 
e600: 52 45 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20  REAL affinity.  
e610: 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75  Such column valu
e620: 65 73 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20  es may still be 
e630: 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74  stored as.** int
e640: 65 67 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65  egers, for space
e650: 20 65 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74   efficiency, but
e660: 20 61 66 74 65 72 20 65 78 74 72 61 63 74 69 6f   after extractio
e670: 6e 20 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a  n we want them.*
e680: 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61  * to have only a
e690: 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a   real value..*/.
e6a0: 63 61 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69  case OP_RealAffi
e6b0: 6e 69 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20  nity: {         
e6c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
e6d0: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
e6e0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
e6f0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
e700: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73  MEM_Int ){.    s
e710: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61  qlite3VdbeMemRea
e720: 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a  lify(pIn1);.  }.
e730: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
e740: 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
e750: 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f  E_OMIT_CAST./* O
e760: 70 63 6f 64 65 3a 20 43 61 73 74 20 50 31 20 50  pcode: Cast P1 P
e770: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
e780: 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b  sis: affinity(r[
e790: 50 31 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65  P1]).**.** Force
e7a0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
e7b0: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
e7c0: 74 68 65 20 74 79 70 65 20 64 65 66 69 6e 65 64  the type defined
e7d0: 20 62 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c   by P2..** .** <
e7e0: 75 6c 3e 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65  ul>.** <li value
e7f0: 3d 22 39 37 22 3e 20 54 45 58 54 0a 2a 2a 20 3c  ="97"> TEXT.** <
e800: 6c 69 20 76 61 6c 75 65 3d 22 39 38 22 3e 20 42  li value="98"> B
e810: 4c 4f 42 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65  LOB.** <li value
e820: 3d 22 39 39 22 3e 20 4e 55 4d 45 52 49 43 0a 2a  ="99"> NUMERIC.*
e830: 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 31 30 30  * <li value="100
e840: 22 3e 20 49 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c  "> INTEGER.** <l
e850: 69 20 76 61 6c 75 65 3d 22 31 30 31 22 3e 20 52  i value="101"> R
e860: 45 41 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a  EAL.** </ul>.**.
e870: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
e880: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
e890: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
e8a0: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
e8b0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 61 73  ..*/.case OP_Cas
e8c0: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
e8d0: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
e8e0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
e8f0: 32 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c  2>=SQLITE_AFF_BL
e900: 4f 42 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d 53  OB && pOp->p2<=S
e910: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29  QLITE_AFF_REAL )
e920: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
e930: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
e940: 46 5f 54 45 58 54 20 29 3b 0a 20 20 74 65 73 74  F_TEXT );.  test
e950: 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  case( pOp->p2==S
e960: 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 29  QLITE_AFF_BLOB )
e970: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
e980: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
e990: 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 74  F_NUMERIC );.  t
e9a0: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
e9b0: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  ==SQLITE_AFF_INT
e9c0: 45 47 45 52 20 29 3b 0a 20 20 74 65 73 74 63 61  EGER );.  testca
e9d0: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
e9e0: 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a  ITE_AFF_REAL );.
e9f0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
ea00: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p1];.  memAb
ea10: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
ea20: 49 6e 31 29 3b 0a 20 20 72 63 20 3d 20 45 78 70  In1);.  rc = Exp
ea30: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20  andBlob(pIn1);. 
ea40: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
ea50: 61 73 74 28 70 49 6e 31 2c 20 70 4f 70 2d 3e 70  ast(pIn1, pOp->p
ea60: 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  2, encoding);.  
ea70: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
ea80: 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 69 66 28  IZE(pIn1);.  if(
ea90: 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
eaa0: 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
eab0: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
eac0: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
ead0: 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  CAST */../* Opco
eae0: 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50 33 20  de: Lt P1 P2 P3 
eaf0: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
eb00: 73 3a 20 69 66 20 72 5b 50 31 5d 3c 72 5b 50 33  s: if r[P1]<r[P3
eb10: 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ] goto P2.**.** 
eb20: 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75  Compare the valu
eb30: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
eb40: 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65  1 and P3.  If re
eb50: 67 28 50 33 29 3c 72 65 67 28 50 31 29 20 74 68  g(P3)<reg(P1) th
eb60: 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64  en.** jump to ad
eb70: 64 72 65 73 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a  dress P2.  .**.*
eb80: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
eb90: 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f  JUMPIFNULL bit o
eba0: 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20  f P5 is set and 
ebb0: 65 69 74 68 65 72 20 72 65 67 28 50 31 29 20 6f  either reg(P1) o
ebc0: 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20  r.** reg(P3) is 
ebd0: 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
ebe0: 68 65 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65  he jump.  If the
ebf0: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
ec00: 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c  LL .** bit is cl
ec10: 65 61 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  ear then fall th
ec20: 72 6f 75 67 68 20 69 66 20 65 69 74 68 65 72 20  rough if either 
ec30: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e  operand is NULL.
ec40: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  .**.** The SQLIT
ec50: 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69  E_AFF_MASK porti
ec60: 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65  on of P5 must be
ec70: 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61   an affinity cha
ec80: 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49  racter -.** SQLI
ec90: 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c  TE_AFF_TEXT, SQL
eca0: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c  ITE_AFF_INTEGER,
ecb0: 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41   and so forth. A
ecc0: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
ecd0: 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20  e .** to coerce 
ece0: 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f  both inputs acco
ecf0: 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66  rding to this af
ed00: 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68  finity before th
ed10: 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20  e.** comparison 
ed20: 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20  is made. If the 
ed30: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
ed40: 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75  is 0x00, then nu
ed50: 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74  meric.** affinit
ed60: 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20  y is used. Note 
ed70: 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69 74  that the affinit
ed80: 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72  y conversions ar
ed90: 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b  e stored.** back
eda0: 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20   into the input 
edb0: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
edc0: 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70   P3.  So this op
edd0: 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a  code can cause.*
ede0: 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68 61  * persistent cha
edf0: 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65 72  nges to register
ee00: 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a  s P1 and P3..**.
ee10: 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76  ** Once any conv
ee20: 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b  ersions have tak
ee30: 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65  en place, and ne
ee40: 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e  ither value is N
ee50: 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c  ULL, .** the val
ee60: 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64  ues are compared
ee70: 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73  . If both values
ee80: 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20   are blobs then 
ee90: 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75  memcmp() is.** u
eea0: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
eeb0: 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
eec0: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
eed0: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a   If both values.
eee0: 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68 65  ** are text, the
eef0: 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74  n the appropriat
ef00: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  e collating func
ef10: 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69  tion specified i
ef20: 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65 64  n.** P4 is  used
ef30: 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61   to do the compa
ef40: 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73  rison.  If P4 is
ef50: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 74   not specified t
ef60: 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20  hen.** memcmp() 
ef70: 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61  is used to compa
ef80: 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20  re text string. 
ef90: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20   If both values 
efa0: 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20  are.** numeric, 
efb0: 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63  then a numeric c
efc0: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65  omparison is use
efd0: 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76 61  d. If the two va
efe0: 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64  lues.** are of d
eff0: 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20  ifferent types, 
f000: 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65  then numbers are
f010: 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73   considered less
f020: 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73   than.** strings
f030: 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65   and strings are
f040: 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73   considered less
f050: 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a   than blobs..**.
f060: 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  ** If the SQLITE
f070: 5f 53 54 4f 52 45 50 32 20 62 69 74 20 6f 66 20  _STOREP2 bit of 
f080: 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  P5 is set, then 
f090: 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49 6e  do not jump.  In
f0a0: 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65 20  stead,.** store 
f0b0: 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c 74  a boolean result
f0c0: 20 28 65 69 74 68 65 72 20 30 2c 20 6f 72 20 31   (either 0, or 1
f0d0: 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72 65  , or NULL) in re
f0e0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
f0f0: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4e   If the SQLITE_N
f100: 55 4c 4c 45 51 20 62 69 74 20 69 73 20 73 65 74  ULLEQ bit is set
f110: 20 69 6e 20 50 35 2c 20 74 68 65 6e 20 4e 55 4c   in P5, then NUL
f120: 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e  L values are con
f130: 73 69 64 65 72 65 64 0a 2a 2a 20 65 71 75 61 6c  sidered.** equal
f140: 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2c   to one another,
f150: 20 70 72 6f 76 69 64 65 64 20 74 68 61 74 20 74   provided that t
f160: 68 65 79 20 64 6f 20 6e 6f 74 20 68 61 76 65 20  hey do not have 
f170: 74 68 65 69 72 20 4d 45 4d 5f 43 6c 65 61 72 65  their MEM_Cleare
f180: 64 0a 2a 2a 20 62 69 74 20 73 65 74 2e 0a 2a 2f  d.** bit set..*/
f190: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50  ./* Opcode: Ne P
f1a0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
f1b0: 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
f1c0: 50 31 5d 21 3d 72 5b 50 33 5d 20 67 6f 74 6f 20  P1]!=r[P3] goto 
f1d0: 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P2.**.** This wo
f1e0: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
f1f0: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
f200: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
f210: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
f220: 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20  the operands in 
f230: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
f240: 20 50 33 20 61 72 65 20 6e 6f 74 20 65 71 75 61   P3 are not equa
f250: 6c 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  l.  See the Lt o
f260: 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64  pcode for.** add
f270: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
f280: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51  ion..**.** If SQ
f290: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
f2a0: 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68  et in P5 then th
f2b0: 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70  e result of comp
f2c0: 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73  arison is always
f2d0: 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20   either.** true 
f2e0: 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20  or false and is 
f2f0: 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20  never NULL.  If 
f300: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
f310: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  e NULL then the 
f320: 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d  result.** of com
f330: 70 61 72 69 73 6f 6e 20 69 73 20 66 61 6c 73 65  parison is false
f340: 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  .  If either ope
f350: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65  rand is NULL the
f360: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
f370: 74 72 75 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74  true..** If neit
f380: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
f390: 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69  ULL the result i
f3a0: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74  s the same as it
f3b0: 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20   would be if.** 
f3c0: 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  the SQLITE_NULLE
f3d0: 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74  Q flag were omit
f3e0: 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a  ted from P5..*/.
f3f0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31  /* Opcode: Eq P1
f400: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
f410: 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
f420: 31 5d 3d 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50  1]==r[P3] goto P
f430: 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  2.**.** This wor
f440: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
f450: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
f460: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
f470: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
f480: 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72  he operands in r
f490: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
f4a0: 50 33 20 61 72 65 20 65 71 75 61 6c 2e 0a 2a 2a  P3 are equal..**
f4b0: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
f4c0: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
f4d0: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
f4e0: 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e  *.** If SQLITE_N
f4f0: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20  ULLEQ is set in 
f500: 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  P5 then the resu
f510: 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  lt of comparison
f520: 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68 65   is always eithe
f530: 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c  r.** true or fal
f540: 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20  se and is never 
f550: 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f  NULL.  If both o
f560: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
f570: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
f580: 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  .** of compariso
f590: 6e 20 69 73 20 74 72 75 65 2e 20 20 49 66 20 65  n is true.  If e
f5a0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
f5b0: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72   NULL then the r
f5c0: 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65 2e 0a  esult is false..
f5d0: 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70  ** If neither op
f5e0: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
f5f0: 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20  e result is the 
f600: 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64  same as it would
f610: 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51   be if.** the SQ
f620: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67  LITE_NULLEQ flag
f630: 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72   were omitted fr
f640: 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  om P5..*/./* Opc
f650: 6f 64 65 3a 20 4c 65 20 50 31 20 50 32 20 50 33  ode: Le P1 P2 P3
f660: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
f670: 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c 3d 72 5b  is: if r[P1]<=r[
f680: 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3] goto P2.**.*
f690: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
f6a0: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
f6b0: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
f6c0: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
f6d0: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  en if.** the con
f6e0: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
f6f0: 20 50 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e   P3 is less than
f700: 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
f710: 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72   content of.** r
f720: 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65  egister P1.  See
f730: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
f740: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
f750: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
f760: 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50   Opcode: Gt P1 P
f770: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
f780: 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
f790: 3e 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a  >r[P3] goto P2.*
f7a0: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
f7b0: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
f7c0: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
f7d0: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
f7e0: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
f7f0: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
f800: 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65  ter P3 is greate
f810: 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65  r than the conte
f820: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
f830: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
f840: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
f850: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
f860: 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
f870: 65 3a 20 47 65 20 50 31 20 50 32 20 50 33 20 50  e: Ge P1 P2 P3 P
f880: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
f890: 3a 20 69 66 20 72 5b 50 31 5d 3e 3d 72 5b 50 33  : if r[P1]>=r[P3
f8a0: 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ] goto P2.**.** 
f8b0: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
f8c0: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
f8d0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
f8e0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
f8f0: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
f900: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
f910: 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
f920: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
f930: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
f940: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
f950: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
f960: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
f970: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63  nformation..*/.c
f980: 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 20 20  ase OP_Eq:      
f990: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
f9a0: 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c   as TK_EQ, jump,
f9b0: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
f9c0: 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20 20  e OP_Ne:        
f9d0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
f9e0: 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69  s TK_NE, jump, i
f9f0: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
fa00: 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20 20 20  OP_Lt:          
fa10: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
fa20: 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_LT, jump, in1
fa30: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
fa40: 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Le:            
fa50: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
fa60: 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _LE, jump, in1, 
fa70: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  in3 */.case OP_G
fa80: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
fa90: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47   /* same as TK_G
faa0: 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  T, jump, in1, in
fab0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a  3 */.case OP_Ge:
fac0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
fad0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c  * same as TK_GE,
fae0: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
faf0: 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20  */.  int res;   
fb00: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
fb10: 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72  lt of the compar
fb20: 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67 61  ison of pIn1 aga
fb30: 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63  inst pIn3 */.  c
fb40: 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
fb50: 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74     /* Affinity t
fb60: 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d 70 61 72  o use for compar
fb70: 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c  ison */.  u16 fl
fb80: 61 67 73 31 3b 20 20 20 20 20 20 20 20 20 2f 2a  ags1;         /*
fb90: 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c   Copy of initial
fba0: 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e   value of pIn1->
fbb0: 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31 36 20 66  flags */.  u16 f
fbc0: 6c 61 67 73 33 3b 20 20 20 20 20 20 20 20 20 2f  lags3;         /
fbd0: 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61  * Copy of initia
fbe0: 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d  l value of pIn3-
fbf0: 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e  >flags */..  pIn
fc00: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
fc10: 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  1];.  pIn3 = &aM
fc20: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66  em[pOp->p3];.  f
fc30: 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c  lags1 = pIn1->fl
fc40: 61 67 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20  ags;.  flags3 = 
fc50: 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69  pIn3->flags;.  i
fc60: 66 28 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61  f( (flags1 | fla
fc70: 67 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs3)&MEM_Null ){
fc80: 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62  .    /* One or b
fc90: 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65  oth operands are
fca0: 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28   NULL */.    if(
fcb0: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
fcc0: 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20  E_NULLEQ ){.    
fcd0: 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e    /* If SQLITE_N
fce0: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 28 77 68  ULLEQ is set (wh
fcf0: 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61  ich will only ha
fd00: 70 70 65 6e 20 69 66 20 74 68 65 20 6f 70 65 72  ppen if the oper
fd10: 61 74 6f 72 20 69 73 0a 20 20 20 20 20 20 2a 2a  ator is.      **
fd20: 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29   OP_Eq or OP_Ne)
fd30: 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
fd40: 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e  ump or not depen
fd50: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
fd60: 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20        ** or not 
fd70: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
fd80: 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f  e null..      */
fd90: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
fda0: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  Op->opcode==OP_E
fdb0: 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  q || pOp->opcode
fdc0: 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20  ==OP_Ne );.     
fdd0: 20 61 73 73 65 72 74 28 20 28 66 6c 61 67 73 31   assert( (flags1
fde0: 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d   & MEM_Cleared)=
fdf0: 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  =0 );.      asse
fe00: 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 53  rt( (pOp->p5 & S
fe10: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
fe20: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66  )==0 );.      if
fe30: 28 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 4e 75  ( (flags1&MEM_Nu
fe40: 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26  ll)!=0.       &&
fe50: 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75 6c   (flags3&MEM_Nul
fe60: 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20  l)!=0.       && 
fe70: 28 66 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65 61  (flags3&MEM_Clea
fe80: 72 65 64 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b  red)==0.      ){
fe90: 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30  .        res = 0
fea0: 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 61 72  ;  /* Results ar
feb0: 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20  e equal */.     
fec0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
fed0: 72 65 73 20 3d 20 31 3b 20 20 2f 2a 20 52 65 73  res = 1;  /* Res
fee0: 75 6c 74 73 20 61 72 65 20 6e 6f 74 20 65 71 75  ults are not equ
fef0: 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20  al */.      }.  
ff00: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
ff10: 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  * SQLITE_NULLEQ 
ff20: 69 73 20 63 6c 65 61 72 20 61 6e 64 20 61 74 20  is clear and at 
ff30: 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e  least one operan
ff40: 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20  d is NULL,.     
ff50: 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 72 65 73   ** then the res
ff60: 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55  ult is always NU
ff70: 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65  LL..      ** The
ff80: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
ff90: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d  f the SQLITE_JUM
ffa0: 50 49 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73  PIFNULL bit is s
ffb0: 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  et..      */.   
ffc0: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26     if( pOp->p5 &
ffd0: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
ffe0: 29 7b 0a 20 20 20 20 20 20 20 20 70 4f 75 74 20  ){.        pOut 
fff0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
10000 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f  ;.        memAbo
10010 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
10020 75 74 29 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d  ut);.        Mem
10030 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
10040 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20  , MEM_Null);.   
10050 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
10060 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
10070 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  t);.      }else{
10080 0a 20 20 20 20 20 20 20 20 56 64 62 65 42 72 61  .        VdbeBra
10090 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 0a 20  nchTaken(2,3);. 
100a0 20 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e         if( pOp->
100b0 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50  p5 & SQLITE_JUMP
100c0 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20  IFNULL ){.      
100d0 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
100e0 5f 70 32 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  _p2;.        }. 
100f0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65       }.      bre
10100 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  ak;.    }.  }els
10110 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68 65  e{.    /* Neithe
10120 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
10130 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61 72 69  L.  Do a compari
10140 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69  son. */.    affi
10150 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26  nity = pOp->p5 &
10160 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
10170 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69 6e 69  ;.    if( affini
10180 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e  ty>=SQLITE_AFF_N
10190 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20 20 20  UMERIC ){.      
101a0 69 66 28 20 28 66 6c 61 67 73 31 20 26 20 28 4d  if( (flags1 & (M
101b0 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c  EM_Int|MEM_Real|
101c0 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53  MEM_Str))==MEM_S
101d0 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70  tr ){.        ap
101e0 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
101f0 74 79 28 70 49 6e 31 2c 30 29 3b 0a 20 20 20 20  ty(pIn1,0);.    
10200 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 66    }.      if( (f
10210 6c 61 67 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74  lags3 & (MEM_Int
10220 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74  |MEM_Real|MEM_St
10230 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a  r))==MEM_Str ){.
10240 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d          applyNum
10250 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e  ericAffinity(pIn
10260 33 2c 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  3,0);.      }.  
10270 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69    }else if( affi
10280 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46  nity==SQLITE_AFF
10290 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20 69  _TEXT ){.      i
102a0 66 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d  f( (flags1 & MEM
102b0 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61  _Str)==0 && (fla
102c0 67 73 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  gs1 & (MEM_Int|M
102d0 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a  EM_Real))!=0 ){.
102e0 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
102f0 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
10300 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20  MEM_Int );.     
10310 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e     testcase( pIn
10320 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
10330 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73  eal );.        s
10340 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
10350 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63  ingify(pIn1, enc
10360 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20  oding, 1);.     
10370 20 20 20 74 65 73 74 63 61 73 65 28 20 28 66 6c     testcase( (fl
10380 61 67 73 31 26 4d 45 4d 5f 44 79 6e 29 20 21 3d  ags1&MEM_Dyn) !=
10390 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45   (pIn1->flags&ME
103a0 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20  M_Dyn) );.      
103b0 20 20 66 6c 61 67 73 31 20 3d 20 28 70 49 6e 31    flags1 = (pIn1
103c0 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54  ->flags & ~MEM_T
103d0 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67  ypeMask) | (flag
103e0 73 31 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73  s1 & MEM_TypeMas
103f0 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  k);.      }.    
10400 20 20 69 66 28 20 28 66 6c 61 67 73 33 20 26 20    if( (flags3 & 
10410 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20 28  MEM_Str)==0 && (
10420 66 6c 61 67 73 33 20 26 20 28 4d 45 4d 5f 49 6e  flags3 & (MEM_In
10430 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20  t|MEM_Real))!=0 
10440 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  ){.        testc
10450 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ase( pIn3->flags
10460 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
10470 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10480 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
10490 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20  M_Real );.      
104a0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
104b0 53 74 72 69 6e 67 69 66 79 28 70 49 6e 33 2c 20  Stringify(pIn3, 
104c0 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20  encoding, 1);.  
104d0 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
104e0 28 66 6c 61 67 73 33 26 4d 45 4d 5f 44 79 6e 29  (flags3&MEM_Dyn)
104f0 20 21 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73   != (pIn3->flags
10500 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20  &MEM_Dyn) );.   
10510 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20 28 70       flags3 = (p
10520 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45  In3->flags & ~ME
10530 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66  M_TypeMask) | (f
10540 6c 61 67 73 33 20 26 20 4d 45 4d 5f 54 79 70 65  lags3 & MEM_Type
10550 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20  Mask);.      }. 
10560 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28     }.    assert(
10570 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
10580 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d  _COLLSEQ || pOp-
10590 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a  >p4.pColl==0 );.
105a0 20 20 20 20 69 66 28 20 66 6c 61 67 73 31 20 26      if( flags1 &
105b0 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
105c0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
105d0 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31  mExpandBlob(pIn1
105e0 29 3b 0a 20 20 20 20 20 20 66 6c 61 67 73 31 20  );.      flags1 
105f0 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20  &= ~MEM_Zero;.  
10600 20 20 7d 0a 20 20 20 20 69 66 28 20 66 6c 61 67    }.    if( flag
10610 73 33 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b  s3 & MEM_Zero ){
10620 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
10630 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
10640 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 66 6c 61  pIn3);.      fla
10650 67 73 33 20 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f  gs3 &= ~MEM_Zero
10660 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 73 20  ;.    }.    res 
10670 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70  = sqlite3MemComp
10680 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20  are(pIn3, pIn1, 
10690 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a  pOp->p4.pColl);.
106a0 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20 70 4f    }.  switch( pO
106b0 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
106c0 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20   case OP_Eq:    
106d0 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20  res = res==0;   
106e0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
106f0 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73 20  e OP_Ne:    res 
10700 3d 20 72 65 73 21 3d 30 3b 20 20 20 20 20 62 72  = res!=0;     br
10710 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
10720 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Lt:    res = re
10730 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b  s<0;      break;
10740 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a  .    case OP_Le:
10750 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 3d 30      res = res<=0
10760 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
10770 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20   case OP_Gt:    
10780 72 65 73 20 3d 20 72 65 73 3e 30 3b 20 20 20 20  res = res>0;    
10790 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66    break;.    def
107a0 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73 20  ault:       res 
107b0 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62 72  = res>=0;     br
107c0 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55  eak;.  }..  /* U
107d0 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73 20  ndo any changes 
107e0 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41 66 66  made by applyAff
107f0 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20 69  inity() to the i
10800 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 2e 20  nput registers. 
10810 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  */.  assert( (pI
10820 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
10830 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 31 20  Dyn) == (flags1 
10840 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  & MEM_Dyn) );.  
10850 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66 6c  pIn1->flags = fl
10860 61 67 73 31 3b 0a 20 20 61 73 73 65 72 74 28 20  ags1;.  assert( 
10870 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
10880 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67  EM_Dyn) == (flag
10890 73 33 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b  s3 & MEM_Dyn) );
108a0 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d  .  pIn3->flags =
108b0 20 66 6c 61 67 73 33 3b 0a 0a 20 20 69 66 28 20   flags3;..  if( 
108c0 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
108d0 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20  _STOREP2 ){.    
108e0 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
108f0 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d 65 6d 41 62  ->p2];.    memAb
10900 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
10910 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74  Out);.    MemSet
10920 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
10930 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75  EM_Int);.    pOu
10940 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20  t->u.i = res;.  
10950 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
10960 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
10970 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64  .  }else{.    Vd
10980 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
10990 73 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20 26  s!=0, (pOp->p5 &
109a0 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29 3f   SQLITE_NULLEQ)?
109b0 32 3a 33 29 3b 0a 20 20 20 20 69 66 28 20 72 65  2:3);.    if( re
109c0 73 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  s ){.      goto 
109d0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20  jump_to_p2;.    
109e0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
109f0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72  ../* Opcode: Per
10a00 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50  mutation * * * P
10a10 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68  4 *.**.** Set th
10a20 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73  e permutation us
10a30 65 64 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d  ed by the OP_Com
10a40 70 61 72 65 20 6f 70 65 72 61 74 6f 72 20 74 6f  pare operator to
10a50 20 62 65 20 74 68 65 20 61 72 72 61 79 0a 2a 2a   be the array.**
10a60 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20   of integers in 
10a70 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65  P4..**.** The pe
10a80 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c  rmutation is onl
10a90 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68  y valid until th
10aa0 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72  e next OP_Compar
10ab0 65 20 74 68 61 74 20 68 61 73 0a 2a 2a 20 74 68  e that has.** th
10ac0 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
10ad0 20 62 69 74 20 73 65 74 20 69 6e 20 50 35 2e 20   bit set in P5. 
10ae0 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50  Typically the OP
10af0 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f  _Permutation sho
10b00 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d  uld .** occur im
10b10 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20  mediately prior 
10b20 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72  to the OP_Compar
10b30 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72  e..**.** The fir
10b40 73 74 20 69 6e 74 65 67 65 72 20 69 6e 20 74 68  st integer in th
10b50 65 20 50 34 20 69 6e 74 65 67 65 72 20 61 72 72  e P4 integer arr
10b60 61 79 20 69 73 20 74 68 65 20 6c 65 6e 67 74 68  ay is the length
10b70 20 6f 66 20 74 68 65 20 61 72 72 61 79 0a 2a 2a   of the array.**
10b80 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 62 65   and does not be
10b90 63 6f 6d 65 20 70 61 72 74 20 6f 66 20 74 68 65  come part of the
10ba0 20 70 65 72 6d 75 74 61 74 69 6f 6e 2e 0a 2a 2f   permutation..*/
10bb0 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61  .case OP_Permuta
10bc0 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74  tion: {.  assert
10bd0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
10be0 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20  4_INTARRAY );.  
10bf0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
10c00 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75 74 65  ai );.  aPermute
10c10 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 20 2b 20   = pOp->p4.ai + 
10c20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  1;.  break;.}../
10c30 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72  * Opcode: Compar
10c40 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
10c50 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
10c60 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b 50 32 40  P1@P3] <-> r[P2@
10c70 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72  P3].**.** Compar
10c80 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f 66  e two vectors of
10c90 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 72 65   registers in re
10ca0 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33  g(P1)..reg(P1+P3
10cb0 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a  -1) (call this.*
10cc0 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20 61 6e  * vector "A") an
10cd0 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65  d in reg(P2)..re
10ce0 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29  g(P2+P3-1) ("B")
10cf0 2e 20 20 53 61 76 65 20 74 68 65 20 72 65 73 75  .  Save the resu
10d00 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d  lt of.** the com
10d10 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20  parison for use 
10d20 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a  by the next OP_J
10d30 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a  ump instruct..**
10d40 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68  .** If P5 has th
10d50 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
10d60 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74   bit set, then t
10d70 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70  he order of comp
10d80 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74  arison is.** det
10d90 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6d  ermined by the m
10da0 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 50 65  ost recent OP_Pe
10db0 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72 61 74  rmutation operat
10dc0 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f  or.  If the.** O
10dd0 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69  PFLAG_PERMUTE bi
10de0 74 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e  t is clear, then
10df0 20 72 65 67 69 73 74 65 72 20 61 72 65 20 63 6f   register are co
10e00 6d 70 61 72 65 64 20 69 6e 20 73 65 71 75 65 6e  mpared in sequen
10e10 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a  tial.** order..*
10e20 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79  *.** P4 is a Key
10e30 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74  Info structure t
10e40 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c  hat defines coll
10e50 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
10e60 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65  and sort.** orde
10e70 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61  rs for the compa
10e80 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d  rison.  The perm
10e90 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20  utation applies 
10ea0 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  to registers.** 
10eb0 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e  only.  The KeyIn
10ec0 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20  fo elements are 
10ed0 75 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c  used sequentiall
10ee0 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  y..**.** The com
10ef0 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72  parison is a sor
10f00 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f  t comparison, so
10f10 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65   NULLs compare e
10f20 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61  qual,.** NULLs a
10f30 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d  re less than num
10f40 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72  bers, numbers ar
10f50 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69  e less than stri
10f60 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69  ngs,.** and stri
10f70 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  ngs are less tha
10f80 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65  n blobs..*/.case
10f90 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20   OP_Compare: {. 
10fa0 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b   int n;.  int i;
10fb0 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74  .  int p1;.  int
10fc0 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79   p2;.  const Key
10fd0 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
10fe0 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c    int idx;.  Col
10ff0 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20  lSeq *pColl;    
11000 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
11010 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20  uence to use on 
11020 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69  this term */.  i
11030 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20 20 20  nt bRev;        
11040 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45    /* True for DE
11050 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72  SCENDING sort or
11060 64 65 72 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70  der */..  if( (p
11070 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
11080 50 45 52 4d 55 54 45 29 3d 3d 30 20 29 20 61 50  PERMUTE)==0 ) aP
11090 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 6e 20  ermute = 0;.  n 
110a0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65  = pOp->p3;.  pKe
110b0 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
110c0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65  pKeyInfo;.  asse
110d0 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73  rt( n>0 );.  ass
110e0 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30  ert( pKeyInfo!=0
110f0 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e   );.  p1 = pOp->
11100 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
11110 70 32 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 44  p2;.#if SQLITE_D
11120 45 42 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d  EBUG.  if( aPerm
11130 75 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b  ute ){.    int k
11140 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f  , mx = 0;.    fo
11150 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29  r(k=0; k<n; k++)
11160 20 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d   if( aPermute[k]
11170 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d  >mx ) mx = aPerm
11180 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65  ute[k];.    asse
11190 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d  rt( p1>0 && p1+m
111a0 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  x<=(p->nMem+1 - 
111b0 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
111c0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
111d0 30 20 26 26 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e  0 && p2+mx<=(p->
111e0 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
111f0 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73  sor)+1 );.  }els
11200 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
11210 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d  1>0 && p1+n<=(p-
11220 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
11230 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61  rsor)+1 );.    a
11240 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70  ssert( p2>0 && p
11250 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  2+n<=(p->nMem+1 
11260 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
11270 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  );.  }.#endif /*
11280 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
11290 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
112a0 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d   i++){.    idx =
112b0 20 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72   aPermute ? aPer
112c0 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20  mute[i] : i;.   
112d0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
112e0 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78  lid(&aMem[p1+idx
112f0 5d 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ]) );.    assert
11300 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
11310 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p2+idx]) );. 
11320 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
11330 45 28 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b  E(p1+idx, &aMem[
11340 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45  p1+idx]);.    RE
11350 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b  GISTER_TRACE(p2+
11360 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64  idx, &aMem[p2+id
11370 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  x]);.    assert(
11380 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69   i<pKeyInfo->nFi
11390 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c  eld );.    pColl
113a0 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f   = pKeyInfo->aCo
113b0 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20  ll[i];.    bRev 
113c0 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72  = pKeyInfo->aSor
113d0 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69  tOrder[i];.    i
113e0 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65  Compare = sqlite
113f0 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65  3MemCompare(&aMe
11400 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d  m[p1+idx], &aMem
11410 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29  [p2+idx], pColl)
11420 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61  ;.    if( iCompa
11430 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  re ){.      if( 
11440 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20  bRev ) iCompare 
11450 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20  = -iCompare;.   
11460 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
11470 20 20 7d 0a 20 20 61 50 65 72 6d 75 74 65 20 3d    }.  aPermute =
11480 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
11490 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20  /* Opcode: Jump 
114a0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
114b0 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69  ** Jump to the i
114c0 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64  nstruction at ad
114d0 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72  dress P1, P2, or
114e0 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   P3 depending on
114f0 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74   whether.** in t
11500 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f  he most recent O
11510 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75  P_Compare instru
11520 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63  ction the P1 vec
11530 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61  tor was less tha
11540 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f  n.** equal to, o
11550 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  r greater than t
11560 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65  he P2 vector, re
11570 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63  spectively..*/.c
11580 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20  ase OP_Jump: {  
11590 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
115a0 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d  mp */.  if( iCom
115b0 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 56 64  pare<0 ){.    Vd
115c0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c  beBranchTaken(0,
115d0 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  3); pOp = &aOp[p
115e0 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 7d  Op->p1 - 1];.  }
115f0 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72  else if( iCompar
11600 65 3d 3d 30 20 29 7b 0a 20 20 20 20 56 64 62 65  e==0 ){.    Vdbe
11610 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 33 29  BranchTaken(1,3)
11620 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70  ; pOp = &aOp[pOp
11630 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c  ->p2 - 1];.  }el
11640 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  se{.    VdbeBran
11650 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 20 70 4f  chTaken(2,3); pO
11660 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 33  p = &aOp[pOp->p3
11670 20 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20 62 72 65   - 1];.  }.  bre
11680 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
11690 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a  : And P1 P2 P3 *
116a0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
116b0 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26 26 20  r[P3]=(r[P1] && 
116c0 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b  r[P2]).**.** Tak
116d0 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e  e the logical AN
116e0 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  D of the values 
116f0 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20  in registers P1 
11700 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72  and P2 and.** wr
11710 69 74 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ite the result i
11720 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e  nto register P3.
11730 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
11740 20 50 31 20 6f 72 20 50 32 20 69 73 20 30 20 28   P1 or P2 is 0 (
11750 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20  false) then the 
11760 72 65 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e  result is 0 even
11770 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72   if.** the other
11780 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20   input is NULL. 
11790 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65   A NULL and true
117a0 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69   or two NULLs gi
117b0 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74  ve.** a NULL out
117c0 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  put..*/./* Opcod
117d0 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a  e: Or P1 P2 P3 *
117e0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
117f0 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20  r[P3]=(r[P1] || 
11800 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b  r[P2]).**.** Tak
11810 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52  e the logical OR
11820 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
11830 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
11840 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
11850 65 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20  e the answer in 
11860 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
11870 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20  ** If either P1 
11880 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f  or P2 is nonzero
11890 20 28 74 72 75 65 29 20 74 68 65 6e 20 74 68 65   (true) then the
118a0 20 72 65 73 75 6c 74 20 69 73 20 31 20 28 74 72   result is 1 (tr
118b0 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74  ue).** even if t
118c0 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69  he other input i
118d0 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20  s NULL.  A NULL 
118e0 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f  and false or two
118f0 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61   NULLs.** give a
11900 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
11910 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20  .case OP_And:   
11920 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
11930 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e  me as TK_AND, in
11940 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
11950 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20  case OP_Or: {   
11960 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
11970 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c  e as TK_OR, in1,
11980 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
11990 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65  int v1;    /* Le
119a0 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d  ft operand:  0==
119b0 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20  FALSE, 1==TRUE, 
119c0 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55  2==UNKNOWN or NU
119d0 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20  LL */.  int v2; 
119e0 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65 72     /* Right oper
119f0 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31  and: 0==FALSE, 1
11a00 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f  ==TRUE, 2==UNKNO
11a10 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20  WN or NULL */.. 
11a20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
11a30 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
11a40 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
11a50 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d  Null ){.    v1 =
11a60 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   2;.  }else{.   
11a70 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62   v1 = sqlite3Vdb
11a80 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21  eIntValue(pIn1)!
11a90 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32 20 3d  =0;.  }.  pIn2 =
11aa0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
11ab0 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61  .  if( pIn2->fla
11ac0 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
11ad0 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d  .    v2 = 2;.  }
11ae0 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d 20 73  else{.    v2 = s
11af0 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
11b00 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d  ue(pIn2)!=0;.  }
11b10 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
11b20 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20  de==OP_And ){.  
11b30 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75    static const u
11b40 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64  nsigned char and
11b50 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20  _logic[] = { 0, 
11b60 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30  0, 0, 0, 1, 2, 0
11b70 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31  , 2, 2 };.    v1
11b80 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a   = and_logic[v1*
11b90 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  3+v2];.  }else{.
11ba0 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
11bb0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f   unsigned char o
11bc0 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c  r_logic[] = { 0,
11bd0 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 2, 1, 1, 1, 
11be0 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76  2, 1, 2 };.    v
11bf0 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a  1 = or_logic[v1*
11c00 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75  3+v2];.  }.  pOu
11c10 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
11c20 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32 20  3];.  if( v1==2 
11c30 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  ){.    MemSetTyp
11c40 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
11c50 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  Null);.  }else{.
11c60 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
11c70 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  v1;.    MemSetTy
11c80 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
11c90 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65  _Int);.  }.  bre
11ca0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
11cb0 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20  : Not P1 P2 * * 
11cc0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
11cd0 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a 2a 0a  [P2]= !r[P1].**.
11ce0 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
11cf0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
11d00 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65  er P1 as a boole
11d10 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65  an value.  Store
11d20 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20   the.** boolean 
11d30 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65  complement in re
11d40 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 74  gister P2.  If t
11d50 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
11d60 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e  ster P1 is .** N
11d70 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c  ULL, then a NULL
11d80 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50 32   is stored in P2
11d90 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  ..*/.case OP_Not
11da0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
11db0 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
11dc0 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20  _NOT, in1, out2 
11dd0 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
11de0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
11df0 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
11e00 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
11e10 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
11e20 74 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  t);.  if( (pIn1-
11e30 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
11e40 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75  l)==0 ){.    pOu
11e50 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
11e60 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  nt;.    pOut->u.
11e70 69 20 3d 20 21 73 71 6c 69 74 65 33 56 64 62 65  i = !sqlite3Vdbe
11e80 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  IntValue(pIn1);.
11e90 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
11ea0 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f  /* Opcode: BitNo
11eb0 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
11ec0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d   Synopsis: r[P1]
11ed0 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49  = ~r[P1].**.** I
11ee0 6e 74 65 72 70 72 65 74 20 74 68 65 20 63 6f 6e  nterpret the con
11ef0 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
11f00 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67 65   P1 as an intege
11f10 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a  r.  Store the.**
11f20 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74   ones-complement
11f30 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c 75 65   of the P1 value
11f40 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
11f50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64 73 0a  2.  If P1 holds.
11f60 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73  ** a NULL then s
11f70 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50  tore a NULL in P
11f80 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69  2..*/.case OP_Bi
11f90 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20  tNot: {         
11fa0 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
11fb0 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f  K_BITNOT, in1, o
11fc0 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
11fd0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
11fe0 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
11ff0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
12000 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
12010 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70  (pOut);.  if( (p
12020 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
12030 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
12040 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
12050 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74  EM_Int;.    pOut
12060 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c 69 74 65 33  ->u.i = ~sqlite3
12070 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
12080 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
12090 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
120a0 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  nce P1 P2 * * *.
120b0 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20  **.** Check the 
120c0 22 6f 6e 63 65 22 20 66 6c 61 67 20 6e 75 6d 62  "once" flag numb
120d0 65 72 20 50 31 2e 20 49 66 20 69 74 20 69 73 20  er P1. If it is 
120e0 73 65 74 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73  set, jump to ins
120f0 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 0a 2a 2a  truction P2. .**
12100 20 4f 74 68 65 72 77 69 73 65 2c 20 73 65 74 20   Otherwise, set 
12110 74 68 65 20 66 6c 61 67 20 61 6e 64 20 66 61 6c  the flag and fal
12120 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
12130 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
12140 6e 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  n..** In other w
12150 6f 72 64 73 2c 20 74 68 69 73 20 6f 70 63 6f 64  ords, this opcod
12160 65 20 63 61 75 73 65 73 20 61 6c 6c 20 66 6f 6c  e causes all fol
12170 6c 6f 77 69 6e 67 20 6f 70 63 6f 64 65 73 20 75  lowing opcodes u
12180 70 20 74 68 72 6f 75 67 68 20 50 32 0a 2a 2a 20  p through P2.** 
12190 28 62 75 74 20 6e 6f 74 20 69 6e 63 6c 75 64 69  (but not includi
121a0 6e 67 20 50 32 29 20 74 6f 20 72 75 6e 20 6a 75  ng P2) to run ju
121b0 73 74 20 6f 6e 63 65 20 61 6e 64 20 74 6f 20 62  st once and to b
121c0 65 20 73 6b 69 70 70 65 64 20 6f 6e 20 73 75 62  e skipped on sub
121d0 73 65 71 75 65 6e 74 0a 2a 2a 20 74 69 6d 65 73  sequent.** times
121e0 20 74 68 72 6f 75 67 68 20 74 68 65 20 6c 6f 6f   through the loo
121f0 70 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 22 6f 6e  p..**.** All "on
12200 63 65 22 20 66 6c 61 67 73 20 61 72 65 20 69 6e  ce" flags are in
12210 69 74 69 61 6c 6c 79 20 63 6c 65 61 72 65 64 20  itially cleared 
12220 77 68 65 6e 65 76 65 72 20 61 20 70 72 65 70 61  whenever a prepa
12230 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  red statement.**
12240 20 66 69 72 73 74 20 62 65 67 69 6e 73 20 74 6f   first begins to
12250 20 72 75 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   run..*/.case OP
12260 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20  _Once: {        
12270 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
12280 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
12290 31 3c 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 29  1<p->nOnceFlag )
122a0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
122b0 6b 65 6e 28 70 2d 3e 61 4f 6e 63 65 46 6c 61 67  ken(p->aOnceFlag
122c0 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 2c 20 32 29  [pOp->p1]!=0, 2)
122d0 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4f 6e 63 65  ;.  if( p->aOnce
122e0 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 29 7b  Flag[pOp->p1] ){
122f0 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
12300 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  o_p2;.  }else{. 
12310 20 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b     p->aOnceFlag[
12320 70 4f 70 2d 3e 70 31 5d 20 3d 20 31 3b 0a 20 20  pOp->p1] = 1;.  
12330 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
12340 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31 20 50   Opcode: If P1 P
12350 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
12360 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
12370 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
12380 65 72 20 50 31 20 69 73 20 74 72 75 65 2e 20 20  er P1 is true.  
12390 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20  The value.** is 
123a0 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65 20  considered true 
123b0 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63  if it is numeric
123c0 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20   and non-zero.  
123d0 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
123e0 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68  in P1 is NULL th
123f0 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
12400 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20   if and only if 
12410 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a  P3 is non-zero..
12420 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  */./* Opcode: If
12430 4e 6f 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  Not P1 P2 P3 * *
12440 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
12450 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
12460 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
12470 20 46 61 6c 73 65 2e 20 20 54 68 65 20 76 61 6c   False.  The val
12480 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65  ue.** is conside
12490 72 65 64 20 66 61 6c 73 65 20 69 66 20 69 74 20  red false if it 
124a0 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20 76 61  has a numeric va
124b0 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66  lue of zero.  If
124c0 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   the value.** in
124d0 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e   P1 is NULL then
124e0 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69   take the jump i
124f0 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33  f and only if P3
12500 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f   is non-zero..*/
12510 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20 20 20  .case OP_If:    
12520 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12530 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73  jump, in1 */.cas
12540 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20  e OP_IfNot: {   
12550 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
12560 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63  , in1 */.  int c
12570 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
12580 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
12590 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
125a0 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63  EM_Null ){.    c
125b0 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65   = pOp->p3;.  }e
125c0 6c 73 65 7b 0a 23 69 66 64 65 66 20 53 51 4c 49  lse{.#ifdef SQLI
125d0 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
125e0 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d 20 73  _POINT.    c = s
125f0 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
12600 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c  ue(pIn1)!=0;.#el
12610 73 65 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74  se.    c = sqlit
12620 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
12630 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64  pIn1)!=0.0;.#end
12640 69 66 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  if.    if( pOp->
12650 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74  opcode==OP_IfNot
12660 20 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20   ) c = !c;.  }. 
12670 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
12680 28 63 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  (c!=0, 2);.  if(
12690 20 63 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a   c ){.    goto j
126a0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
126b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
126c0 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20  code: IsNull P1 
126d0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
126e0 70 73 69 73 3a 20 20 69 66 20 72 5b 50 31 5d 3d  psis:  if r[P1]=
126f0 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a  =NULL goto P2.**
12700 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
12710 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
12720 65 67 69 73 74 65 72 20 50 31 20 69 73 20 4e 55  egister P1 is NU
12730 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  LL..*/.case OP_I
12740 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20  sNull: {        
12750 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
12760 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20  K_ISNULL, jump, 
12770 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
12780 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
12790 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
127a0 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  n( (pIn1->flags 
127b0 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 2c 20  & MEM_Null)!=0, 
127c0 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  2);.  if( (pIn1-
127d0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
127e0 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74  l)!=0 ){.    got
127f0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
12800 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
12810 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c   Opcode: NotNull
12820 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
12830 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
12840 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32  1]!=NULL goto P2
12850 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
12860 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
12870 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
12880 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a   not NULL.  .*/.
12890 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a  case OP_NotNull:
128a0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
128b0 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e   same as TK_NOTN
128c0 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a  ULL, jump, in1 *
128d0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
128e0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62  [pOp->p1];.  Vdb
128f0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70  eBranchTaken( (p
12900 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
12910 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32 29 3b 0a 20  _Null)==0, 2);. 
12920 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
12930 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
12940 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d   ){.    goto jum
12950 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
12960 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
12970 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32  de: Column P1 P2
12980 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
12990 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 50 58  opsis:  r[P3]=PX
129a0 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
129b0 20 74 68 65 20 64 61 74 61 20 74 68 61 74 20 63   the data that c
129c0 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20  ursor P1 points 
129d0 74 6f 20 61 73 20 61 20 73 74 72 75 63 74 75 72  to as a structur
129e0 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a  e built using.**
129f0 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20   the MakeRecord 
12a00 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28 53  instruction.  (S
12a10 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72  ee the MakeRecor
12a20 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  d opcode for add
12a30 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72  itional.** infor
12a40 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
12a50 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 64   format of the d
12a60 61 74 61 2e 29 20 20 45 78 74 72 61 63 74 20 74  ata.)  Extract t
12a70 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a  he P2-th column.
12a80 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65 63  ** from this rec
12a90 6f 72 64 2e 20 20 49 66 20 74 68 65 72 65 20 61  ord.  If there a
12aa0 72 65 20 6c 65 73 73 20 74 68 61 74 20 28 50 32  re less that (P2
12ab0 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69  +1) .** values i
12ac0 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65 78  n the record, ex
12ad0 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a  tract a NULL..**
12ae0 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65 78  .** The value ex
12af0 74 72 61 63 74 65 64 20 69 73 20 73 74 6f 72 65  tracted is store
12b00 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
12b10 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63  ..**.** If the c
12b20 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66  olumn contains f
12b30 65 77 65 72 20 74 68 61 6e 20 50 32 20 66 69 65  ewer than P2 fie
12b40 6c 64 73 2c 20 74 68 65 6e 20 65 78 74 72 61 63  lds, then extrac
12b50 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a  t a NULL.  Or,.*
12b60 2a 20 69 66 20 74 68 65 20 50 34 20 61 72 67 75  * if the P4 argu
12b70 6d 65 6e 74 20 69 73 20 61 20 50 34 5f 4d 45 4d  ment is a P4_MEM
12b80 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f   use the value o
12b90 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e  f the P4 argumen
12ba0 74 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75  t as.** the resu
12bb0 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  lt..**.** If the
12bc0 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43   OPFLAG_CLEARCAC
12bd0 48 45 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e  HE bit is set on
12be0 20 50 35 20 61 6e 64 20 50 31 20 69 73 20 61 20   P5 and P1 is a 
12bf0 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72  pseudo-table cur
12c00 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65  sor,.** then the
12c10 20 63 61 63 68 65 20 6f 66 20 74 68 65 20 63 75   cache of the cu
12c20 72 73 6f 72 20 69 73 20 72 65 73 65 74 20 70 72  rsor is reset pr
12c30 69 6f 72 20 74 6f 20 65 78 74 72 61 63 74 69 6e  ior to extractin
12c40 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a  g the column..**
12c50 20 54 68 65 20 66 69 72 73 74 20 4f 50 5f 43 6f   The first OP_Co
12c60 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20 61 20 70  lumn against a p
12c70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61 66 74 65  seudo-table afte
12c80 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  r the value of t
12c90 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65  he content.** re
12ca0 67 69 73 74 65 72 20 68 61 73 20 63 68 61 6e 67  gister has chang
12cb0 65 64 20 73 68 6f 75 6c 64 20 68 61 76 65 20 74  ed should have t
12cc0 68 69 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a  his bit set..**.
12cd0 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
12ce0 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f  _LENGTHARG and O
12cf0 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20  PFLAG_TYPEOFARG 
12d00 62 69 74 73 20 61 72 65 20 73 65 74 20 6f 6e 20  bits are set on 
12d10 50 35 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 72  P5 when.** the r
12d20 65 73 75 6c 74 20 69 73 20 67 75 61 72 61 6e 74  esult is guarant
12d30 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75  eed to only be u
12d40 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d  sed as the argum
12d50 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67 74 68 28  ent of a length(
12d60 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28 29  ).** or typeof()
12d70 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65   function, respe
12d80 63 74 69 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f  ctively.  The lo
12d90 61 64 69 6e 67 20 6f 66 20 6c 61 72 67 65 20 62  ading of large b
12da0 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73  lobs can be.** s
12db0 6b 69 70 70 65 64 20 66 6f 72 20 6c 65 6e 67 74  kipped for lengt
12dc0 68 28 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74  h() and all cont
12dd0 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20  ent loading can 
12de0 62 65 20 73 6b 69 70 70 65 64 20 66 6f 72 20 74  be skipped for t
12df0 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65  ypeof()..*/.case
12e00 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20   OP_Column: {.  
12e10 69 36 34 20 70 61 79 6c 6f 61 64 53 69 7a 65 36  i64 payloadSize6
12e20 34 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20  4; /* Number of 
12e30 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63  bytes in the rec
12e40 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b  ord */.  int p2;
12e50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63              /* c
12e60 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20  olumn number to 
12e70 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64  retrieve */.  Vd
12e80 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
12e90 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
12ea0 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f  sor */.  BtCurso
12eb0 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20 54  r *pCrsr;   /* T
12ec0 68 65 20 42 54 72 65 65 20 63 75 72 73 6f 72 20  he BTree cursor 
12ed0 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66 73 65  */.  u32 *aOffse
12ee0 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66 66 73  t;      /* aOffs
12ef0 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65 74 20  et[i] is offset 
12f00 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61 74 61  to start of data
12f10 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e   for i-th column
12f20 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20   */.  int len;  
12f30 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
12f40 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 65  length of the se
12f50 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20 66 6f  rialized data fo
12f60 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  r the column */.
12f70 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
12f80 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
12f90 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  nter */.  Mem *p
12fa0 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  Dest;        /* 
12fb0 57 68 65 72 65 20 74 6f 20 77 72 69 74 65 20 74  Where to write t
12fc0 68 65 20 65 78 74 72 61 63 74 65 64 20 76 61 6c  he extracted val
12fd0 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d  ue */.  Mem sMem
12fe0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f  ;          /* Fo
12ff0 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65  r storing the re
13000 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
13010 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38  ed */.  const u8
13020 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a 20 50 61   *zData;   /* Pa
13030 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  rt of the record
13040 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a   being decoded *
13050 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 48  /.  const u8 *zH
13060 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 75  dr;    /* Next u
13070 6e 70 61 72 73 65 64 20 62 79 74 65 20 6f 66 20  nparsed byte of 
13080 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  the header */.  
13090 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e 64 48 64  const u8 *zEndHd
130a0 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f  r; /* Pointer to
130b0 20 66 69 72 73 74 20 62 79 74 65 20 61 66 74 65   first byte afte
130c0 72 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a  r the header */.
130d0 20 20 75 33 32 20 6f 66 66 73 65 74 3b 20 20 20    u32 offset;   
130e0 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69       /* Offset i
130f0 6e 74 6f 20 74 68 65 20 64 61 74 61 20 2a 2f 0a  nto the data */.
13100 20 20 75 36 34 20 6f 66 66 73 65 74 36 34 3b 20    u64 offset64; 
13110 20 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f       /* 64-bit o
13120 66 66 73 65 74 20 2a 2f 0a 20 20 75 33 32 20 61  ffset */.  u32 a
13130 76 61 69 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  vail;         /*
13140 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
13150 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 64 61   of available da
13160 74 61 20 2a 2f 0a 20 20 75 33 32 20 74 3b 20 20  ta */.  u32 t;  
13170 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
13180 74 79 70 65 20 63 6f 64 65 20 66 72 6f 6d 20 74  type code from t
13190 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72  he record header
131a0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b   */.  Mem *pReg;
131b0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 73 65 75           /* Pseu
131c0 64 6f 54 61 62 6c 65 20 69 6e 70 75 74 20 72 65  doTable input re
131d0 67 69 73 74 65 72 20 2a 2f 0a 0a 20 20 70 43 20  gister */..  pC 
131e0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
131f0 70 31 5d 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  p1];.  p2 = pOp-
13200 3e 70 32 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  >p2;..  /* If th
13210 65 20 63 75 72 73 6f 72 20 63 61 63 68 65 20 69  e cursor cache i
13220 73 20 73 74 61 6c 65 2c 20 62 72 69 6e 67 20 69  s stale, bring i
13230 74 20 75 70 2d 74 6f 2d 64 61 74 65 20 2a 2f 0a  t up-to-date */.
13240 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
13250 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 26  beCursorMoveto(&
13260 70 43 2c 20 26 70 32 29 3b 0a 0a 20 20 61 73 73  pC, &p2);..  ass
13270 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
13280 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
13290 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
132a0 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d  or) );.  pDest =
132b0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
132c0 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
132d0 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20  nge(p, pDest);. 
132e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
132f0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
13300 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
13310 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
13320 20 20 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d    assert( p2<pC-
13330 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20 61 4f 66  >nField );.  aOf
13340 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73  fset = pC->aOffs
13350 65 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  et;.  assert( pC
13360 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54  ->eCurType!=CURT
13370 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 61 73  YPE_VTAB );.  as
13380 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
13390 70 65 21 3d 43 55 52 54 59 50 45 5f 50 53 45 55  pe!=CURTYPE_PSEU
133a0 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f  DO || pC->nullRo
133b0 77 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  w );.  assert( p
133c0 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52  C->eCurType!=CUR
133d0 54 59 50 45 5f 53 4f 52 54 45 52 20 29 3b 0a 20  TYPE_SORTER );. 
133e0 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e   pCrsr = pC->uc.
133f0 70 43 75 72 73 6f 72 3b 0a 0a 20 20 69 66 28 20  pCursor;..  if( 
13400 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
13410 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
13420 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61  if( pC->cacheSta
13430 74 75 73 21 3d 70 2d 3e 63 61 63 68 65 43 74 72  tus!=p->cacheCtr
13440 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e   ){.    if( pC->
13450 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20  nullRow ){.     
13460 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70   if( pC->eCurTyp
13470 65 3d 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44  e==CURTYPE_PSEUD
13480 4f 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  O ){.        ass
13490 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 73 65 75  ert( pC->uc.pseu
134a0 64 6f 54 61 62 6c 65 52 65 67 3e 30 20 29 3b 0a  doTableReg>0 );.
134b0 20 20 20 20 20 20 20 20 70 52 65 67 20 3d 20 26          pReg = &
134c0 61 4d 65 6d 5b 70 43 2d 3e 75 63 2e 70 73 65 75  aMem[pC->uc.pseu
134d0 64 6f 54 61 62 6c 65 52 65 67 5d 3b 0a 20 20 20  doTableReg];.   
134e0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 52 65       assert( pRe
134f0 67 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  g->flags & MEM_B
13500 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61  lob );.        a
13510 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
13520 64 28 70 52 65 67 29 20 29 3b 0a 20 20 20 20 20  d(pReg) );.     
13530 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69     pC->payloadSi
13540 7a 65 20 3d 20 70 43 2d 3e 73 7a 52 6f 77 20 3d  ze = pC->szRow =
13550 20 61 76 61 69 6c 20 3d 20 70 52 65 67 2d 3e 6e   avail = pReg->n
13560 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52  ;.        pC->aR
13570 6f 77 20 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e  ow = (u8*)pReg->
13580 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  z;.      }else{.
13590 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
135a0 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44  dbeMemSetNull(pD
135b0 65 73 74 29 3b 0a 20 20 20 20 20 20 20 20 67 6f  est);.        go
135c0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
135d0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
135e0 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72  lse{.      asser
135f0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
13600 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
13610 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
13620 70 43 72 73 72 20 29 3b 0a 20 20 20 20 20 20 69  pCrsr );.      i
13630 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  f( pC->isTable==
13640 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
13650 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
13660 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
13670 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 20  Crsr) );.       
13680 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20   VVA_ONLY(rc =) 
13690 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
136a0 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c  ize(pCrsr, &payl
136b0 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20 20 20 20  oadSize64);.    
136c0 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
136d0 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 2f 2a 20  SQLITE_OK ); /* 
136e0 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66 20  True because of 
136f0 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63  CursorMoveto() c
13700 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20  all above */.   
13710 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 42       /* sqlite3B
13720 74 72 65 65 50 61 72 73 65 43 65 6c 6c 50 74 72  treeParseCellPtr
13730 28 29 20 75 73 65 73 20 67 65 74 56 61 72 69 6e  () uses getVarin
13740 74 33 32 28 29 20 74 6f 20 65 78 74 72 61 63 74  t32() to extract
13750 20 74 68 65 0a 20 20 20 20 20 20 20 20 2a 2a 20   the.        ** 
13760 70 61 79 6c 6f 61 64 20 73 69 7a 65 2c 20 73 6f  payload size, so
13770 20 69 74 20 69 73 20 69 6d 70 6f 73 73 69 62 6c   it is impossibl
13780 65 20 66 6f 72 20 70 61 79 6c 6f 61 64 53 69 7a  e for payloadSiz
13790 65 36 34 20 74 6f 20 62 65 0a 20 20 20 20 20 20  e64 to be.      
137a0 20 20 2a 2a 20 6c 61 72 67 65 72 20 74 68 61 6e    ** larger than
137b0 20 33 32 20 62 69 74 73 2e 20 2a 2f 0a 20 20 20   32 bits. */.   
137c0 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70 61       assert( (pa
137d0 79 6c 6f 61 64 53 69 7a 65 36 34 20 26 20 53 51  yloadSize64 & SQ
137e0 4c 49 54 45 5f 4d 41 58 5f 55 33 32 29 3d 3d 28  LITE_MAX_U32)==(
137f0 75 36 34 29 70 61 79 6c 6f 61 64 53 69 7a 65 36  u64)payloadSize6
13800 34 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  4 );.        pC-
13810 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42  >aRow = sqlite3B
13820 74 72 65 65 4b 65 79 46 65 74 63 68 28 70 43 72  treeKeyFetch(pCr
13830 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20  sr, &avail);.   
13840 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64       pC->payload
13850 53 69 7a 65 20 3d 20 28 75 33 32 29 70 61 79 6c  Size = (u32)payl
13860 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20 20 20 20  oadSize64;.     
13870 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
13880 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
13890 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
138a0 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20  d(pCrsr) );.    
138b0 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20      VVA_ONLY(rc 
138c0 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65 44  =) sqlite3BtreeD
138d0 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26  ataSize(pCrsr, &
138e0 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29  pC->payloadSize)
138f0 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
13900 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
13910 29 3b 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65  );   /* DataSize
13920 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a  () cannot fail *
13930 2f 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52  /.        pC->aR
13940 6f 77 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  ow = sqlite3Btre
13950 65 44 61 74 61 46 65 74 63 68 28 70 43 72 73 72  eDataFetch(pCrsr
13960 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20  , &avail);.     
13970 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28   }.      assert(
13980 20 61 76 61 69 6c 3c 3d 36 35 35 33 36 20 29 3b   avail<=65536 );
13990 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 70 61 67    /* Maximum pag
139a0 65 20 73 69 7a 65 20 69 73 20 36 34 4b 69 42 20  e size is 64KiB 
139b0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d  */.      if( pC-
139c0 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3c 3d 20  >payloadSize <= 
139d0 28 75 33 32 29 61 76 61 69 6c 20 29 7b 0a 20 20  (u32)avail ){.  
139e0 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20        pC->szRow 
139f0 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  = pC->payloadSiz
13a00 65 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  e;.      }else i
13a10 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69  f( pC->payloadSi
13a20 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c  ze > (u32)db->aL
13a30 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
13a40 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
13a50 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
13a60 67 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  g;.      }else{.
13a70 20 20 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f          pC->szRo
13a80 77 20 3d 20 61 76 61 69 6c 3b 0a 20 20 20 20 20  w = avail;.     
13a90 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d   }.    }.    pC-
13aa0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 70  >cacheStatus = p
13ab0 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20  ->cacheCtr;.    
13ac0 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d  pC->iHdrOffset =
13ad0 20 67 65 74 56 61 72 69 6e 74 33 32 28 70 43 2d   getVarint32(pC-
13ae0 3e 61 52 6f 77 2c 20 6f 66 66 73 65 74 29 3b 0a  >aRow, offset);.
13af0 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73      pC->nHdrPars
13b00 65 64 20 3d 20 30 3b 0a 20 20 20 20 61 4f 66 66  ed = 0;.    aOff
13b10 73 65 74 5b 30 5d 20 3d 20 6f 66 66 73 65 74 3b  set[0] = offset;
13b20 0a 0a 0a 20 20 20 20 69 66 28 20 61 76 61 69 6c  ...    if( avail
13b30 3c 6f 66 66 73 65 74 20 29 7b 0a 20 20 20 20 20  <offset ){.     
13b40 20 2f 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65   /* pC->aRow doe
13b50 73 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 68 6f  s not have to ho
13b60 6c 64 20 74 68 65 20 65 6e 74 69 72 65 20 72 6f  ld the entire ro
13b70 77 2c 20 62 75 74 20 69 74 20 64 6f 65 73 20 61  w, but it does a
13b80 74 20 6c 65 61 73 74 0a 20 20 20 20 20 20 2a 2a  t least.      **
13b90 20 6e 65 65 64 20 74 6f 20 63 6f 76 65 72 20 74   need to cover t
13ba0 68 65 20 68 65 61 64 65 72 20 6f 66 20 74 68 65  he header of the
13bb0 20 72 65 63 6f 72 64 2e 20 20 49 66 20 70 43 2d   record.  If pC-
13bc0 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63  >aRow does not c
13bd0 6f 6e 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20  ontain.      ** 
13be0 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61  the complete hea
13bf0 64 65 72 2c 20 74 68 65 6e 20 73 65 74 20 69 74  der, then set it
13c00 20 74 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e   to zero, forcin
13c10 67 20 74 68 65 20 68 65 61 64 65 72 20 74 6f 20  g the header to 
13c20 62 65 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e 61  be.      ** dyna
13c30 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  mically allocate
13c40 64 2e 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e  d. */.      pC->
13c50 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20  aRow = 0;.      
13c60 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 0a  pC->szRow = 0;..
13c70 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75        /* Make su
13c80 72 65 20 61 20 63 6f 72 72 75 70 74 20 64 61 74  re a corrupt dat
13c90 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69  abase has not gi
13ca0 76 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69  ven us an oversi
13cb0 7a 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20 20  ze header..     
13cc0 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20   ** Do this now 
13cd0 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72  to avoid an over
13ce0 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  size memory allo
13cf0 63 61 74 69 6f 6e 2e 0a 20 20 20 20 20 20 2a 2a  cation..      **
13d00 0a 20 20 20 20 20 20 2a 2a 20 54 79 70 65 20 65  .      ** Type e
13d10 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20 62 65  ntries can be be
13d20 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62 79  tween 1 and 5 by
13d30 74 65 73 20 65 61 63 68 2e 20 20 42 75 74 20 34  tes each.  But 4
13d40 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20 20   and 5 byte.    
13d50 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73    ** types use s
13d60 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63  o much data spac
13d70 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e  e that there can
13d80 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e   only be 4096 an
13d90 64 20 33 32 20 6f 66 0a 20 20 20 20 20 20 2a 2a  d 32 of.      **
13da0 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76   them, respectiv
13db0 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78  ely.  So the max
13dc0 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67  imum header leng
13dd0 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20  th results from 
13de0 61 0a 20 20 20 20 20 20 2a 2a 20 33 2d 62 79 74  a.      ** 3-byt
13df0 65 20 74 79 70 65 20 66 6f 72 20 65 61 63 68 20  e type for each 
13e00 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  of the maximum o
13e10 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20  f 32768 columns 
13e20 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20 20  plus three.     
13e30 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73 20   ** extra bytes 
13e40 66 6f 72 20 74 68 65 20 68 65 61 64 65 72 20 6c  for the header l
13e50 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33  ength itself.  3
13e60 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33  2768*3 + 3 = 983
13e70 30 37 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  07..      */.   
13e80 20 20 20 69 66 28 20 6f 66 66 73 65 74 20 3e 20     if( offset > 
13e90 39 38 33 30 37 20 7c 7c 20 6f 66 66 73 65 74 20  98307 || offset 
13ea0 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  > pC->payloadSiz
13eb0 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  e ){.        rc 
13ec0 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
13ed0 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20 20 67  _BKPT;.        g
13ee0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
13ef0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
13f00 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 54 68      }..    /* Th
13f10 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 67 6f 74 6f  e following goto
13f20 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74   is an optimizat
13f30 69 6f 6e 2e 20 20 49 74 20 63 61 6e 20 62 65 20  ion.  It can be 
13f40 6f 6d 69 74 74 65 64 20 61 6e 64 0a 20 20 20 20  omitted and.    
13f50 2a 2a 20 65 76 65 72 79 74 68 69 6e 67 20 77 69  ** everything wi
13f60 6c 6c 20 73 74 69 6c 6c 20 77 6f 72 6b 2e 20 20  ll still work.  
13f70 42 75 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 69 73  But OP_Column is
13f80 20 6d 65 61 73 75 72 61 62 6c 79 20 66 61 73 74   measurably fast
13f90 65 72 0a 20 20 20 20 2a 2a 20 62 79 20 73 6b 69  er.    ** by ski
13fa0 70 70 69 6e 67 20 74 68 65 20 73 75 62 73 65 71  pping the subseq
13fb0 75 65 6e 74 20 63 6f 6e 64 69 74 69 6f 6e 61 6c  uent conditional
13fc0 2c 20 77 68 69 63 68 20 69 73 20 61 6c 77 61 79  , which is alway
13fd0 73 20 74 72 75 65 2e 0a 20 20 20 20 2a 2f 0a 20  s true..    */. 
13fe0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e     assert( pC->n
13ff0 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 3b  HdrParsed<=p2 );
14000 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 64           /* Cond
14010 69 74 69 6f 6e 61 6c 20 73 6b 69 70 70 65 64 20  itional skipped 
14020 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63  */.    goto op_c
14030 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65  olumn_read_heade
14040 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b  r;.  }..  /* Mak
14050 65 20 73 75 72 65 20 61 74 20 6c 65 61 73 74 20  e sure at least 
14060 74 68 65 20 66 69 72 73 74 20 70 32 2b 31 20 65  the first p2+1 e
14070 6e 74 72 69 65 73 20 6f 66 20 74 68 65 20 68 65  ntries of the he
14080 61 64 65 72 20 68 61 76 65 20 62 65 65 6e 0a 20  ader have been. 
14090 20 2a 2a 20 70 61 72 73 65 64 20 61 6e 64 20 76   ** parsed and v
140a0 61 6c 69 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  alid information
140b0 20 69 73 20 69 6e 20 61 4f 66 66 73 65 74 5b 5d   is in aOffset[]
140c0 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 5d   and pC->aType[]
140d0 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 43 2d  ..  */.  if( pC-
140e0 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20  >nHdrParsed<=p2 
140f0 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ){.    /* If the
14100 72 65 20 69 73 20 6d 6f 72 65 20 68 65 61 64 65  re is more heade
14110 72 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20  r available for 
14120 70 61 72 73 69 6e 67 20 69 6e 20 74 68 65 20 72  parsing in the r
14130 65 63 6f 72 64 2c 20 74 72 79 0a 20 20 20 20 2a  ecord, try.    *
14140 2a 20 74 6f 20 65 78 74 72 61 63 74 20 61 64 64  * to extract add
14150 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75  itional fields u
14160 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 70 32  p through the p2
14170 2b 31 2d 74 68 20 66 69 65 6c 64 20 0a 20 20 20  +1-th field .   
14180 20 2a 2f 0a 20 20 20 20 6f 70 5f 63 6f 6c 75 6d   */.    op_colum
14190 6e 5f 72 65 61 64 5f 68 65 61 64 65 72 3a 0a 20  n_read_header:. 
141a0 20 20 20 69 66 28 20 70 43 2d 3e 69 48 64 72 4f     if( pC->iHdrO
141b0 66 66 73 65 74 3c 61 4f 66 66 73 65 74 5b 30 5d  ffset<aOffset[0]
141c0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b   ){.      /* Mak
141d0 65 20 73 75 72 65 20 7a 44 61 74 61 20 70 6f 69  e sure zData poi
141e0 6e 74 73 20 74 6f 20 65 6e 6f 75 67 68 20 6f 66  nts to enough of
141f0 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 63   the record to c
14200 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72 2e  over the header.
14210 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43   */.      if( pC
14220 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20  ->aRow==0 ){.   
14230 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73 4d 65       memset(&sMe
14240 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65  m, 0, sizeof(sMe
14250 6d 29 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  m));.        rc 
14260 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
14270 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c  FromBtree(pCrsr,
14280 20 30 2c 20 61 4f 66 66 73 65 74 5b 30 5d 2c 20   0, aOffset[0], 
14290 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 20 26 73  !pC->isTable, &s
142a0 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 69 66  Mem);.        if
142b0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
142c0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
142d0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
142e0 20 20 20 7a 44 61 74 61 20 3d 20 28 75 38 2a 29     zData = (u8*)
142f0 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d 65  sMem.z;.      }e
14300 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 44 61  lse{.        zDa
14310 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20  ta = pC->aRow;. 
14320 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20       }.  .      
14330 2f 2a 20 46 69 6c 6c 20 69 6e 20 70 43 2d 3e 61  /* Fill in pC->a
14340 54 79 70 65 5b 69 5d 20 61 6e 64 20 61 4f 66 66  Type[i] and aOff
14350 73 65 74 5b 69 5d 20 76 61 6c 75 65 73 20 74 68  set[i] values th
14360 72 6f 75 67 68 20 74 68 65 20 70 32 2d 74 68 20  rough the p2-th 
14370 66 69 65 6c 64 2e 20 2a 2f 0a 20 20 20 20 20 20  field. */.      
14380 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  i = pC->nHdrPars
14390 65 64 3b 0a 20 20 20 20 20 20 6f 66 66 73 65 74  ed;.      offset
143a0 36 34 20 3d 20 61 4f 66 66 73 65 74 5b 69 5d 3b  64 = aOffset[i];
143b0 0a 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 44  .      zHdr = zD
143c0 61 74 61 20 2b 20 70 43 2d 3e 69 48 64 72 4f 66  ata + pC->iHdrOf
143d0 66 73 65 74 3b 0a 20 20 20 20 20 20 7a 45 6e 64  fset;.      zEnd
143e0 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 61 4f  Hdr = zData + aO
143f0 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20 20 20  ffset[0];.      
14400 61 73 73 65 72 74 28 20 69 3c 3d 70 32 20 26 26  assert( i<=p2 &&
14410 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b   zHdr<zEndHdr );
14420 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20  .      do{.     
14430 20 20 20 69 66 28 20 28 74 20 3d 20 7a 48 64 72     if( (t = zHdr
14440 5b 30 5d 29 3c 30 78 38 30 20 29 7b 0a 20 20 20  [0])<0x80 ){.   
14450 20 20 20 20 20 20 20 7a 48 64 72 2b 2b 3b 0a 20         zHdr++;. 
14460 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 36           offset6
14470 34 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65  4 += sqlite3Vdbe
14480 4f 6e 65 42 79 74 65 53 65 72 69 61 6c 54 79 70  OneByteSerialTyp
14490 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20  eLen(t);.       
144a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
144b0 20 20 7a 48 64 72 20 2b 3d 20 73 71 6c 69 74 65    zHdr += sqlite
144c0 33 47 65 74 56 61 72 69 6e 74 33 32 28 7a 48 64  3GetVarint32(zHd
144d0 72 2c 20 26 74 29 3b 0a 20 20 20 20 20 20 20 20  r, &t);.        
144e0 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20 73 71    offset64 += sq
144f0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
14500 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20  ypeLen(t);.     
14510 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 43 2d     }.        pC-
14520 3e 61 54 79 70 65 5b 69 2b 2b 5d 20 3d 20 74 3b  >aType[i++] = t;
14530 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73 65 74  .        aOffset
14540 5b 69 5d 20 3d 20 28 75 33 32 29 28 6f 66 66 73  [i] = (u32)(offs
14550 65 74 36 34 20 26 20 30 78 66 66 66 66 66 66 66  et64 & 0xfffffff
14560 66 29 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c 65  f);.      }while
14570 28 20 69 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c  ( i<=p2 && zHdr<
14580 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20 20 20 20  zEndHdr );.     
14590 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20   pC->nHdrParsed 
145a0 3d 20 69 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69  = i;.      pC->i
145b0 48 64 72 4f 66 66 73 65 74 20 3d 20 28 75 33 32  HdrOffset = (u32
145c0 29 28 7a 48 64 72 20 2d 20 7a 44 61 74 61 29 3b  )(zHdr - zData);
145d0 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61  .      if( pC->a
145e0 52 6f 77 3d 3d 30 20 29 20 73 71 6c 69 74 65 33  Row==0 ) sqlite3
145f0 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
14600 73 4d 65 6d 29 3b 0a 20 20 0a 20 20 20 20 20 20  sMem);.  .      
14610 2f 2a 20 54 68 65 20 72 65 63 6f 72 64 20 69 73  /* The record is
14620 20 63 6f 72 72 75 70 74 20 69 66 20 61 6e 79 20   corrupt if any 
14630 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
14640 20 61 72 65 20 74 72 75 65 3a 0a 20 20 20 20 20   are true:.     
14650 20 2a 2a 20 28 31 29 20 74 68 65 20 62 79 74 65   ** (1) the byte
14660 73 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20  s of the header 
14670 65 78 74 65 6e 64 20 70 61 73 74 20 74 68 65 20  extend past the 
14680 64 65 63 6c 61 72 65 64 20 68 65 61 64 65 72 20  declared header 
14690 73 69 7a 65 0a 20 20 20 20 20 20 2a 2a 20 28 32  size.      ** (2
146a0 29 20 74 68 65 20 65 6e 74 69 72 65 20 68 65 61  ) the entire hea
146b0 64 65 72 20 77 61 73 20 75 73 65 64 20 62 75 74  der was used but
146c0 20 6e 6f 74 20 61 6c 6c 20 64 61 74 61 20 77 61   not all data wa
146d0 73 20 75 73 65 64 0a 20 20 20 20 20 20 2a 2a 20  s used.      ** 
146e0 28 33 29 20 74 68 65 20 65 6e 64 20 6f 66 20 74  (3) the end of t
146f0 68 65 20 64 61 74 61 20 65 78 74 65 6e 64 73 20  he data extends 
14700 62 65 79 6f 6e 64 20 74 68 65 20 65 6e 64 20 6f  beyond the end o
14710 66 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20  f the record..  
14720 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
14730 20 28 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20   (zHdr>=zEndHdr 
14740 26 26 20 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72  && (zHdr>zEndHdr
14750 20 7c 7c 20 6f 66 66 73 65 74 36 34 21 3d 70 43   || offset64!=pC
14760 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a  ->payloadSize)).
14770 20 20 20 20 20 20 20 7c 7c 20 28 6f 66 66 73 65         || (offse
14780 74 36 34 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61  t64 > pC->payloa
14790 64 53 69 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a  dSize).      ){.
147a0 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
147b0 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
147c0 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  ;.        goto a
147d0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
147e0 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  r;.      }.    }
147f0 65 6c 73 65 7b 0a 20 20 20 20 20 20 74 20 3d 20  else{.      t = 
14800 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  0;.    }..    /*
14810 20 49 66 20 61 66 74 65 72 20 74 72 79 69 6e 67   If after trying
14820 20 74 6f 20 65 78 74 72 61 63 74 20 6e 65 77 20   to extract new 
14830 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65  entries from the
14840 20 68 65 61 64 65 72 2c 20 6e 48 64 72 50 61 72   header, nHdrPar
14850 73 65 64 20 69 73 0a 20 20 20 20 2a 2a 20 73 74  sed is.    ** st
14860 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f 20 70 32  ill not up to p2
14870 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
14880 74 20 74 68 65 20 72 65 63 6f 72 64 20 68 61 73  t the record has
14890 20 66 65 77 65 72 20 74 68 61 6e 20 70 32 0a 20   fewer than p2. 
148a0 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e 20 20     ** columns.  
148b0 53 6f 20 74 68 65 20 72 65 73 75 6c 74 20 77 69  So the result wi
148c0 6c 6c 20 62 65 20 65 69 74 68 65 72 20 74 68 65  ll be either the
148d0 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
148e0 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f  r a NULL..    */
148f0 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 48 64  .    if( pC->nHd
14900 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20  rParsed<=p2 ){. 
14910 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34       if( pOp->p4
14920 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a  type==P4_MEM ){.
14930 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
14940 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
14950 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34  y(pDest, pOp->p4
14960 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69  .pMem, MEM_Stati
14970 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  c);.      }else{
14980 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
14990 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
149a0 44 65 73 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20  Dest);.      }. 
149b0 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
149c0 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20  umn_out;.    }. 
149d0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 74 20 3d 20   }else{.    t = 
149e0 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 3b 0a 20  pC->aType[p2];. 
149f0 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61 63 74   }..  /* Extract
14a00 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 66 6f 72   the content for
14a10 20 74 68 65 20 70 32 2b 31 2d 74 68 20 63 6f 6c   the p2+1-th col
14a20 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20 63 61  umn.  Control ca
14a30 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65 61 63  n only.  ** reac
14a40 68 20 74 68 69 73 20 70 6f 69 6e 74 20 69 66 20  h this point if 
14a50 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61 4f 66  aOffset[p2], aOf
14a60 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61 6e 64 20  fset[p2+1], and 
14a70 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 61 72  pC->aType[p2] ar
14a80 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c 69 64  e.  ** all valid
14a90 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
14aa0 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61 72 73   p2<pC->nHdrPars
14ab0 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ed );.  assert( 
14ac0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
14ad0 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
14ae0 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e  e3VdbeCheckMemIn
14af0 76 61 72 69 61 6e 74 73 28 70 44 65 73 74 29 20  variants(pDest) 
14b00 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d  );.  if( VdbeMem
14b10 44 79 6e 61 6d 69 63 28 70 44 65 73 74 29 20 29  Dynamic(pDest) )
14b20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
14b30 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20  etNull(pDest);. 
14b40 20 61 73 73 65 72 74 28 20 74 3d 3d 70 43 2d 3e   assert( t==pC->
14b50 61 54 79 70 65 5b 70 32 5d 20 29 3b 0a 20 20 70  aType[p2] );.  p
14b60 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  Dest->enc = enco
14b70 64 69 6e 67 3b 0a 20 20 69 66 28 20 70 43 2d 3e  ding;.  if( pC->
14b80 73 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74 5b 70  szRow>=aOffset[p
14b90 32 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a 20 54  2+1] ){.    /* T
14ba0 68 69 73 20 69 73 20 74 68 65 20 63 6f 6d 6d 6f  his is the commo
14bb0 6e 20 63 61 73 65 20 77 68 65 72 65 20 74 68 65  n case where the
14bc0 20 64 65 73 69 72 65 64 20 63 6f 6e 74 65 6e 74   desired content
14bd0 20 66 69 74 73 20 6f 6e 20 74 68 65 20 6f 72 69   fits on the ori
14be0 67 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70 61 67  ginal.    ** pag
14bf0 65 20 2d 20 77 68 65 72 65 20 74 68 65 20 63 6f  e - where the co
14c00 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f 6e 20  ntent is not on 
14c10 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  an overflow page
14c20 20 2a 2f 0a 20 20 20 20 7a 44 61 74 61 20 3d 20   */.    zData = 
14c30 70 43 2d 3e 61 52 6f 77 20 2b 20 61 4f 66 66 73  pC->aRow + aOffs
14c40 65 74 5b 70 32 5d 3b 0a 20 20 20 20 69 66 28 20  et[p2];.    if( 
14c50 74 3c 31 32 20 29 7b 0a 20 20 20 20 20 20 73 71  t<12 ){.      sq
14c60 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47  lite3VdbeSerialG
14c70 65 74 28 7a 44 61 74 61 2c 20 74 2c 20 70 44 65  et(zData, t, pDe
14c80 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  st);.    }else{.
14c90 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
14ca0 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 69 73 20  column value is 
14cb0 61 20 73 74 72 69 6e 67 2c 20 77 65 20 6e 65 65  a string, we nee
14cc0 64 20 61 20 70 65 72 73 69 73 74 65 6e 74 20 76  d a persistent v
14cd0 61 6c 75 65 2c 20 6e 6f 74 0a 20 20 20 20 20 20  alue, not.      
14ce0 2a 2a 20 61 20 4d 45 4d 5f 45 70 68 65 6d 20 76  ** a MEM_Ephem v
14cf0 61 6c 75 65 2e 20 20 54 68 69 73 20 62 72 61 6e  alue.  This bran
14d00 63 68 20 69 73 20 61 20 66 61 73 74 20 73 68 6f  ch is a fast sho
14d10 72 74 2d 63 75 74 20 74 68 61 74 20 69 73 20 65  rt-cut that is e
14d20 71 75 69 76 61 6c 65 6e 74 0a 20 20 20 20 20 20  quivalent.      
14d30 2a 2a 20 74 6f 20 63 61 6c 6c 69 6e 67 20 73 71  ** to calling sq
14d40 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47  lite3VdbeSerialG
14d50 65 74 28 29 20 61 6e 64 20 73 71 6c 69 74 65 33  et() and sqlite3
14d60 56 64 62 65 44 65 65 70 68 65 6d 65 72 61 6c 69  VdbeDeephemerali
14d70 7a 65 28 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  ze()..      */. 
14d80 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
14d90 74 20 75 31 36 20 61 46 6c 61 67 5b 5d 20 3d 20  t u16 aFlag[] = 
14da0 7b 20 4d 45 4d 5f 42 6c 6f 62 2c 20 4d 45 4d 5f  { MEM_Blob, MEM_
14db0 53 74 72 7c 4d 45 4d 5f 54 65 72 6d 20 7d 3b 0a  Str|MEM_Term };.
14dc0 20 20 20 20 20 20 70 44 65 73 74 2d 3e 6e 20 3d        pDest->n =
14dd0 20 6c 65 6e 20 3d 20 28 74 2d 31 32 29 2f 32 3b   len = (t-12)/2;
14de0 0a 20 20 20 20 20 20 69 66 28 20 70 44 65 73 74  .      if( pDest
14df0 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3c 20 6c 65 6e  ->szMalloc < len
14e00 2b 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70 44  +2 ){.        pD
14e10 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  est->flags = MEM
14e20 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _Null;.        i
14e30 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
14e40 6d 47 72 6f 77 28 70 44 65 73 74 2c 20 6c 65 6e  mGrow(pDest, len
14e50 2b 32 2c 20 30 29 20 29 20 67 6f 74 6f 20 6e 6f  +2, 0) ) goto no
14e60 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73  _mem;.      }els
14e70 65 7b 0a 20 20 20 20 20 20 20 20 70 44 65 73 74  e{.        pDest
14e80 2d 3e 7a 20 3d 20 70 44 65 73 74 2d 3e 7a 4d 61  ->z = pDest->zMa
14e90 6c 6c 6f 63 3b 0a 20 20 20 20 20 20 7d 0a 20 20  lloc;.      }.  
14ea0 20 20 20 20 6d 65 6d 63 70 79 28 70 44 65 73 74      memcpy(pDest
14eb0 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c 65 6e 29  ->z, zData, len)
14ec0 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 7a  ;.      pDest->z
14ed0 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20 20 20  [len] = 0;.     
14ee0 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31 5d   pDest->z[len+1]
14ef0 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 44 65 73   = 0;.      pDes
14f00 74 2d 3e 66 6c 61 67 73 20 3d 20 61 46 6c 61 67  t->flags = aFlag
14f10 5b 74 26 31 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d  [t&1];.    }.  }
14f20 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69  else{.    /* Thi
14f30 73 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e 73  s branch happens
14f40 20 6f 6e 6c 79 20 77 68 65 6e 20 63 6f 6e 74 65   only when conte
14f50 6e 74 20 69 73 20 6f 6e 20 6f 76 65 72 66 6c 6f  nt is on overflo
14f60 77 20 70 61 67 65 73 20 2a 2f 0a 20 20 20 20 69  w pages */.    i
14f70 66 28 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 28  f( ((pOp->p5 & (
14f80 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
14f90 7c 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52  |OPFLAG_TYPEOFAR
14fa0 47 29 29 21 3d 30 0a 20 20 20 20 20 20 20 20 20  G))!=0.         
14fb0 20 26 26 20 28 28 74 3e 3d 31 32 20 26 26 20 28   && ((t>=12 && (
14fc0 74 26 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70  t&1)==0) || (pOp
14fd0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 54 59  ->p5 & OPFLAG_TY
14fe0 50 45 4f 46 41 52 47 29 21 3d 30 29 29 0a 20 20  PEOFARG)!=0)).  
14ff0 20 20 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c     || (len = sql
15000 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
15010 70 65 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20  peLen(t))==0.   
15020 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e   ){.      /* Con
15030 74 65 6e 74 20 69 73 20 69 72 72 65 6c 65 76 61  tent is irreleva
15040 6e 74 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20  nt for.      ** 
15050 20 20 20 31 2e 20 74 68 65 20 74 79 70 65 6f 66     1. the typeof
15060 28 29 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 20  () function,.   
15070 20 20 20 2a 2a 20 20 20 20 32 2e 20 74 68 65 20     **    2. the 
15080 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69  length(X) functi
15090 6f 6e 20 69 66 20 58 20 69 73 20 61 20 62 6c 6f  on if X is a blo
150a0 62 2c 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20  b, and.      ** 
150b0 20 20 20 33 2e 20 69 66 20 74 68 65 20 63 6f 6e     3. if the con
150c0 74 65 6e 74 20 6c 65 6e 67 74 68 20 69 73 20 7a  tent length is z
150d0 65 72 6f 2e 0a 20 20 20 20 20 20 2a 2a 20 53 6f  ero..      ** So
150e0 20 77 65 20 6d 69 67 68 74 20 61 73 20 77 65 6c   we might as wel
150f0 6c 20 75 73 65 20 62 6f 67 75 73 20 63 6f 6e 74  l use bogus cont
15100 65 6e 74 20 72 61 74 68 65 72 20 74 68 61 6e 20  ent rather than 
15110 72 65 61 64 69 6e 67 0a 20 20 20 20 20 20 2a 2a  reading.      **
15120 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69   content from di
15130 73 6b 2e 20 2a 2f 0a 20 20 20 20 20 20 73 74 61  sk. */.      sta
15140 74 69 63 20 75 38 20 61 5a 65 72 6f 5b 38 5d 3b  tic u8 aZero[8];
15150 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65    /* This is the
15160 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20 2a   bogus content *
15170 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
15180 64 62 65 53 65 72 69 61 6c 47 65 74 28 61 5a 65  dbeSerialGet(aZe
15190 72 6f 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20  ro, t, pDest);. 
151a0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
151b0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
151c0 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72  MemFromBtree(pCr
151d0 73 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c  sr, aOffset[p2],
151e0 20 6c 65 6e 2c 20 21 70 43 2d 3e 69 73 54 61 62   len, !pC->isTab
151f0 6c 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  le,.            
15200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15210 20 20 20 20 20 20 20 70 44 65 73 74 29 3b 0a 20         pDest);. 
15220 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
15230 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
15240 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
15250 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
15260 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 63 6f  dbeSerialGet((co
15270 6e 73 74 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a  nst u8*)pDest->z
15280 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20  , t, pDest);.   
15290 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20     pDest->flags 
152a0 26 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20  &= ~MEM_Ephem;. 
152b0 20 20 20 7d 0a 20 20 7d 0a 0a 6f 70 5f 63 6f 6c     }.  }..op_col
152c0 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54  umn_out:.  UPDAT
152d0 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
152e0 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54 45  Dest);.  REGISTE
152f0 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
15300 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61 6b   pDest);.  break
15310 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
15320 41 66 66 69 6e 69 74 79 20 50 31 20 50 32 20 2a  Affinity P1 P2 *
15330 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
15340 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31  s: affinity(r[P1
15350 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c  @P2]).**.** Appl
15360 79 20 61 66 66 69 6e 69 74 69 65 73 20 74 6f 20  y affinities to 
15370 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20 72 65  a range of P2 re
15380 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67  gisters starting
15390 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20   with P1..**.** 
153a0 50 34 20 69 73 20 61 20 73 74 72 69 6e 67 20 74  P4 is a string t
153b0 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63  hat is P2 charac
153c0 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e  ters long. The n
153d0 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  th character of 
153e0 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e  the.** string in
153f0 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75  dicates the colu
15400 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74  mn affinity that
15410 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
15420 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d  for the nth.** m
15430 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68  emory cell in th
15440 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65  e range..*/.case
15450 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a   OP_Affinity: {.
15460 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
15470 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68  ffinity;   /* Th
15480 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
15490 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 63 68   applied */.  ch
154a0 61 72 20 63 41 66 66 3b 20 20 20 20 20 20 20 20  ar cAff;        
154b0 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69 6e 67         /* A sing
154c0 6c 65 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  le character of 
154d0 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a  affinity */..  z
154e0 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  Affinity = pOp->
154f0 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20  p4.z;.  assert( 
15500 7a 41 66 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a  zAffinity!=0 );.
15510 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e    assert( zAffin
15520 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20  ity[pOp->p2]==0 
15530 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
15540 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77 68  m[pOp->p1];.  wh
15550 69 6c 65 28 20 28 63 41 66 66 20 3d 20 2a 28 7a  ile( (cAff = *(z
15560 41 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d 30 20  Affinity++))!=0 
15570 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
15580 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b  In1 <= &p->aMem[
15590 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
155a0 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20  nCursor)] );.   
155b0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
155c0 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20  lid(pIn1) );.   
155d0 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
155e0 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e 63 6f 64  In1, cAff, encod
155f0 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  ing);.    pIn1++
15600 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
15610 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b  ../* Opcode: Mak
15620 65 52 65 63 6f 72 64 20 50 31 20 50 32 20 50 33  eRecord P1 P2 P3
15630 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
15640 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72  s: r[P3]=mkrec(r
15650 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43  [P1@P2]).**.** C
15660 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69 73 74  onvert P2 regist
15670 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ers beginning wi
15680 74 68 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b  th P1 into the [
15690 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a  record format].*
156a0 2a 20 75 73 65 20 61 73 20 61 20 64 61 74 61 20  * use as a data 
156b0 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61  record in a data
156c0 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73  base table or as
156d0 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20   a key.** in an 
156e0 69 6e 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43  index.  The OP_C
156f0 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e  olumn opcode can
15700 20 64 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f   decode the reco
15710 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20  rd later..**.** 
15720 50 34 20 6d 61 79 20 62 65 20 61 20 73 74 72 69  P4 may be a stri
15730 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68  ng that is P2 ch
15740 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20  aracters long.  
15750 54 68 65 20 6e 74 68 20 63 68 61 72 61 63 74 65  The nth characte
15760 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69  r of the.** stri
15770 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65  ng indicates the
15780 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   column affinity
15790 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20   that should be 
157a0 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68  used for the nth
157b0 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65  .** field of the
157c0 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a   index key..**.*
157d0 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72  * The mapping fr
157e0 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f 20  om character to 
157f0 61 66 66 69 6e 69 74 79 20 69 73 20 67 69 76 65  affinity is give
15800 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f  n by the SQLITE_
15810 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64  AFF_.** macros d
15820 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65  efined in sqlite
15830 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  Int.h..**.** If 
15840 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P4 is NULL then 
15850 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73  all index fields
15860 20 68 61 76 65 20 74 68 65 20 61 66 66 69 6e 69   have the affini
15870 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a 63 61 73 65  ty BLOB..*/.case
15880 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20   OP_MakeRecord: 
15890 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f  {.  u8 *zNewReco
158a0 72 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20  rd;        /* A 
158b0 62 75 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74  buffer to hold t
158c0 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  he data for the 
158d0 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  new record */.  
158e0 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20  Mem *pRec;      
158f0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
15900 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36  w record */.  u6
15910 34 20 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20  4 nData;        
15920 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
15930 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20  f bytes of data 
15940 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
15950 48 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Hdr;            
15960 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
15970 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73  ytes of header s
15980 70 61 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42  pace */.  i64 nB
15990 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  yte;            
159a0 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20 72   /* Data space r
159b0 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
159c0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34   record */.  i64
159d0 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20   nZero;         
159e0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
159f0 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74   zero bytes at t
15a00 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
15a10 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  cord */.  int nV
15a20 61 72 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  arint;          
15a30 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
15a40 74 65 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20  tes in a varint 
15a50 2a 2f 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f  */.  u32 serial_
15a60 74 79 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54  type;       /* T
15a70 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d  ype field */.  M
15a80 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20  em *pData0;     
15a90 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66        /* First f
15aa0 69 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69  ield to be combi
15ab0 6e 65 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63  ned into the rec
15ac0 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c  ord */.  Mem *pL
15ad0 61 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ast;            
15ae0 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66  /* Last field of
15af0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
15b00 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20   int nField;    
15b10 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15b20 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
15b30 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63  he record */.  c
15b40 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20  har *zAffinity; 
15b50 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
15b60 69 6e 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72  inity string for
15b70 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
15b80 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74   int file_format
15b90 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20  ;       /* File 
15ba0 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f  format to use fo
15bb0 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  r encoding */.  
15bc0 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
15bd0 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20         /* Space 
15be0 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f  used in zNewReco
15bf0 72 64 5b 5d 20 68 65 61 64 65 72 20 2a 2f 0a 20  rd[] header */. 
15c00 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20   int j;         
15c10 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
15c20 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63   used in zNewRec
15c30 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f  ord[] content */
15c40 0a 20 20 75 33 32 20 6c 65 6e 3b 20 20 20 20 20  .  u32 len;     
15c50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
15c60 67 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a  gth of a field *
15c70 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67  /..  /* Assuming
15c80 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74   the record cont
15c90 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20 74  ains N fields, t
15ca0 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  he record format
15cb0 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65   looks.  ** like
15cc0 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a   this:.  **.  **
15cd0 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ---------------
15ce0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15cf0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15d00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15d10 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c  ---------.  ** |
15d20 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79 70 65   hdr-size | type
15d30 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e   0 | type 1 | ..
15d40 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20 64  . | type N-1 | d
15d50 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74  ata0 | ... | dat
15d60 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d  a N-1 | .  ** --
15d70 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15d80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15d90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15da0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15db0 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a  ------.  **.  **
15dc0 20 44 61 74 61 28 30 29 20 69 73 20 74 61 6b 65   Data(0) is take
15dd0 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
15de0 50 31 2e 20 20 44 61 74 61 28 31 29 20 63 6f 6d  P1.  Data(1) com
15df0 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  es from register
15e00 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73   P1+1.  ** and s
15e10 6f 20 66 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20 20  o forth..  **.  
15e20 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66 69 65  ** Each type fie
15e30 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74 20 72  ld is a varint r
15e40 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
15e50 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20 74  serial type of t
15e60 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70  he .  ** corresp
15e70 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65 6d  onding data elem
15e80 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65 33  ent (see sqlite3
15e90 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 29  VdbeSerialType()
15ea0 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d  ). The.  ** hdr-
15eb0 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61 6c  size field is al
15ec0 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69 63  so a varint whic
15ed0 68 20 69 73 20 74 68 65 20 6f 66 66 73 65 74 20  h is the offset 
15ee0 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
15ef0 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 72  ng.  ** of the r
15f00 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e 0a  ecord to data0..
15f10 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30    */.  nData = 0
15f20 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
15f30 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
15f40 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20  data space */.  
15f50 6e 48 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20  nHdr = 0;       
15f60 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15f70 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20  bytes of header 
15f80 73 70 61 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f  space */.  nZero
15f90 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
15fa0 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20   Number of zero 
15fb0 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64  bytes at the end
15fc0 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
15fd0 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70  /.  nField = pOp
15fe0 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74  ->p1;.  zAffinit
15ff0 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  y = pOp->p4.z;. 
16000 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e   assert( nField>
16010 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26  0 && pOp->p2>0 &
16020 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64  & pOp->p2+nField
16030 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
16040 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
16050 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d    pData0 = &aMem
16060 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65  [nField];.  nFie
16070 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ld = pOp->p2;.  
16080 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b  pLast = &pData0[
16090 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c  nField-1];.  fil
160a0 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69  e_format = p->mi
160b0 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
160c0 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79  ;..  /* Identify
160d0 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
160e0 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74  ster */.  assert
160f0 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
16100 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  1 || pOp->p3>=pO
16110 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b  p->p1+pOp->p2 );
16120 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
16130 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
16140 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
16150 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70  pOut);..  /* App
16160 6c 79 20 74 68 65 20 72 65 71 75 65 73 74 65 64  ly the requested
16170 20 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c   affinity to all
16180 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61   inputs.  */.  a
16190 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70  ssert( pData0<=p
161a0 4c 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41  Last );.  if( zA
161b0 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70  ffinity ){.    p
161c0 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20  Rec = pData0;.  
161d0 20 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c    do{.      appl
161e0 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b 2b  yAffinity(pRec++
161f0 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29  , *(zAffinity++)
16200 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
16210 20 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69     assert( zAffi
16220 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52  nity[0]==0 || pR
16230 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20  ec<=pLast );.   
16240 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69   }while( zAffini
16250 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 20 20  ty[0] );.  }..  
16260 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20  /* Loop through 
16270 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61  the elements tha
16280 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74  t will make up t
16290 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67  he record to fig
162a0 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77  ure.  ** out how
162b0 20 6d 75 63 68 20 73 70 61 63 65 20 69 73 20 72   much space is r
162c0 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 65 20  equired for the 
162d0 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f  new record..  */
162e0 0a 20 20 70 52 65 63 20 3d 20 70 4c 61 73 74 3b  .  pRec = pLast;
162f0 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72  .  do{.    asser
16300 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52  t( memIsValid(pR
16310 65 63 29 20 29 3b 0a 20 20 20 20 70 52 65 63 2d  ec) );.    pRec-
16320 3e 75 54 65 6d 70 20 3d 20 73 65 72 69 61 6c 5f  >uTemp = serial_
16330 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64  type = sqlite3Vd
16340 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65  beSerialType(pRe
16350 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 2c 20  c, file_format, 
16360 26 6c 65 6e 29 3b 0a 20 20 20 20 69 66 28 20 70  &len);.    if( p
16370 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
16380 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 69  _Zero ){.      i
16390 66 28 20 6e 44 61 74 61 20 29 7b 0a 20 20 20 20  f( nData ){.    
163a0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
163b0 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62  dbeMemExpandBlob
163c0 28 70 52 65 63 29 20 29 20 67 6f 74 6f 20 6e 6f  (pRec) ) goto no
163d0 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73  _mem;.      }els
163e0 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65 72 6f  e{.        nZero
163f0 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72   += pRec->u.nZer
16400 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 20 2d  o;.        len -
16410 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b  = pRec->u.nZero;
16420 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
16430 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b     nData += len;
16440 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 73  .    testcase( s
16450 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 37 20  erial_type==127 
16460 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  );.    testcase(
16470 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32   serial_type==12
16480 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d  8 );.    nHdr +=
16490 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d 31 32   serial_type<=12
164a0 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65 33 56  7 ? 1 : sqlite3V
164b0 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f  arintLen(serial_
164c0 74 79 70 65 29 3b 0a 20 20 7d 77 68 69 6c 65 28  type);.  }while(
164d0 20 28 2d 2d 70 52 65 63 29 3e 3d 70 44 61 74 61   (--pRec)>=pData
164e0 30 20 29 3b 0a 0a 20 20 2f 2a 20 45 56 49 44 45  0 );..  /* EVIDE
164f0 4e 43 45 2d 4f 46 3a 20 52 2d 32 32 35 36 34 2d  NCE-OF: R-22564-
16500 31 31 36 34 37 20 54 68 65 20 68 65 61 64 65 72  11647 The header
16510 20 62 65 67 69 6e 73 20 77 69 74 68 20 61 20 73   begins with a s
16520 69 6e 67 6c 65 20 76 61 72 69 6e 74 0a 20 20 2a  ingle varint.  *
16530 2a 20 77 68 69 63 68 20 64 65 74 65 72 6d 69 6e  * which determin
16540 65 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  es the total num
16550 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
16560 74 68 65 20 68 65 61 64 65 72 2e 20 54 68 65 20  the header. The 
16570 76 61 72 69 6e 74 0a 20 20 2a 2a 20 76 61 6c 75  varint.  ** valu
16580 65 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66  e is the size of
16590 20 74 68 65 20 68 65 61 64 65 72 20 69 6e 20 62   the header in b
165a0 79 74 65 73 20 69 6e 63 6c 75 64 69 6e 67 20 74  ytes including t
165b0 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74 0a 20  he size varint. 
165c0 20 2a 2a 20 69 74 73 65 6c 66 2e 20 2a 2f 0a 20   ** itself. */. 
165d0 20 74 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d   testcase( nHdr=
165e0 3d 31 32 36 20 29 3b 0a 20 20 74 65 73 74 63 61  =126 );.  testca
165f0 73 65 28 20 6e 48 64 72 3d 3d 31 32 37 20 29 3b  se( nHdr==127 );
16600 0a 20 20 69 66 28 20 6e 48 64 72 3c 3d 31 32 36  .  if( nHdr<=126
16610 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 63   ){.    /* The c
16620 6f 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a 20 20  ommon case */.  
16630 20 20 6e 48 64 72 20 2b 3d 20 31 3b 0a 20 20 7d    nHdr += 1;.  }
16640 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 52 61 72  else{.    /* Rar
16650 65 20 63 61 73 65 20 6f 66 20 61 20 72 65 61 6c  e case of a real
16660 6c 79 20 6c 61 72 67 65 20 68 65 61 64 65 72 20  ly large header 
16670 2a 2f 0a 20 20 20 20 6e 56 61 72 69 6e 74 20 3d  */.    nVarint =
16680 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65   sqlite3VarintLe
16690 6e 28 6e 48 64 72 29 3b 0a 20 20 20 20 6e 48 64  n(nHdr);.    nHd
166a0 72 20 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a 20 20  r += nVarint;.  
166b0 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c 73 71    if( nVarint<sq
166c0 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e  lite3VarintLen(n
166d0 48 64 72 29 20 29 20 6e 48 64 72 2b 2b 3b 0a 20  Hdr) ) nHdr++;. 
166e0 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48 64   }.  nByte = nHd
166f0 72 2b 6e 44 61 74 61 3b 0a 20 20 69 66 28 20 6e  r+nData;.  if( n
16700 42 79 74 65 2b 6e 5a 65 72 6f 3e 64 62 2d 3e 61  Byte+nZero>db->a
16710 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
16720 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
16730 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
16740 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73    }..  /* Make s
16750 75 72 65 20 74 68 65 20 6f 75 74 70 75 74 20 72  ure the output r
16760 65 67 69 73 74 65 72 20 68 61 73 20 61 20 62 75  egister has a bu
16770 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f 75 67  ffer large enoug
16780 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a  h to store .  **
16790 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e   the new record.
167a0 20 54 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   The output regi
167b0 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29 20 69  ster (pOp->p3) i
167c0 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f  s not allowed to
167d0 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20  .  ** be one of 
167e0 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
167f0 65 72 73 20 28 62 65 63 61 75 73 65 20 74 68 65  ers (because the
16800 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20   following call 
16810 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  to.  ** sqlite3V
16820 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
16830 73 69 7a 65 28 29 20 63 6f 75 6c 64 20 63 6c 6f  size() could clo
16840 62 62 65 72 20 74 68 65 20 76 61 6c 75 65 20 62  bber the value b
16850 65 66 6f 72 65 20 69 74 20 69 73 20 75 73 65 64  efore it is used
16860 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71  )..  */.  if( sq
16870 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61  lite3VdbeMemClea
16880 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75 74 2c  rAndResize(pOut,
16890 20 28 69 6e 74 29 6e 42 79 74 65 29 20 29 7b 0a   (int)nByte) ){.
168a0 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
168b0 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72  .  }.  zNewRecor
168c0 64 20 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e  d = (u8 *)pOut->
168d0 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20 74  z;..  /* Write t
168e0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
168f0 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 7a   = putVarint32(z
16900 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48 64 72 29  NewRecord, nHdr)
16910 3b 0a 20 20 6a 20 3d 20 6e 48 64 72 3b 0a 20 20  ;.  j = nHdr;.  
16920 61 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d  assert( pData0<=
16930 70 4c 61 73 74 20 29 3b 0a 20 20 70 52 65 63 20  pLast );.  pRec 
16940 3d 20 70 44 61 74 61 30 3b 0a 20 20 64 6f 7b 0a  = pData0;.  do{.
16950 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20      serial_type 
16960 3d 20 70 52 65 63 2d 3e 75 54 65 6d 70 3b 0a 20  = pRec->uTemp;. 
16970 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f     /* EVIDENCE-O
16980 46 3a 20 52 2d 30 36 35 32 39 2d 34 37 33 36 32  F: R-06529-47362
16990 20 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 73   Following the s
169a0 69 7a 65 20 76 61 72 69 6e 74 20 61 72 65 20 6f  ize varint are o
169b0 6e 65 20 6f 72 20 6d 6f 72 65 0a 20 20 20 20 2a  ne or more.    *
169c0 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72  * additional var
169d0 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20 63 6f  ints, one per co
169e0 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 20 20 69 20 2b  lumn. */.    i +
169f0 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 26 7a  = putVarint32(&z
16a00 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20 73 65  NewRecord[i], se
16a10 72 69 61 6c 5f 74 79 70 65 29 3b 20 20 20 20 20  rial_type);     
16a20 20 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c         /* serial
16a30 20 74 79 70 65 20 2a 2f 0a 20 20 20 20 2f 2a 20   type */.    /* 
16a40 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36  EVIDENCE-OF: R-6
16a50 34 35 33 36 2d 35 31 37 32 38 20 54 68 65 20 76  4536-51728 The v
16a60 61 6c 75 65 73 20 66 6f 72 20 65 61 63 68 20 63  alues for each c
16a70 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72 65 63  olumn in the rec
16a80 6f 72 64 0a 20 20 20 20 2a 2a 20 69 6d 6d 65 64  ord.    ** immed
16a90 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 74 68  iately follow th
16aa0 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20  e header. */.   
16ab0 20 6a 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62   j += sqlite3Vdb
16ac0 65 53 65 72 69 61 6c 50 75 74 28 26 7a 4e 65 77  eSerialPut(&zNew
16ad0 52 65 63 6f 72 64 5b 6a 5d 2c 20 70 52 65 63 2c  Record[j], pRec,
16ae0 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 2f   serial_type); /
16af0 2a 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 7d  * content */.  }
16b00 77 68 69 6c 65 28 20 28 2b 2b 70 52 65 63 29 3c  while( (++pRec)<
16b10 3d 70 4c 61 73 74 20 29 3b 0a 20 20 61 73 73 65  =pLast );.  asse
16b20 72 74 28 20 69 3d 3d 6e 48 64 72 20 29 3b 0a 20  rt( i==nHdr );. 
16b30 20 61 73 73 65 72 74 28 20 6a 3d 3d 6e 42 79 74   assert( j==nByt
16b40 65 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  e );..  assert( 
16b50 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
16b60 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p3<=(p->nMem+1
16b70 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
16b80 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69  ;.  pOut->n = (i
16b90 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74  nt)nByte;.  pOut
16ba0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c  ->flags = MEM_Bl
16bb0 6f 62 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20  ob;.  if( nZero 
16bc0 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e  ){.    pOut->u.n
16bd0 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20  Zero = nZero;.  
16be0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
16bf0 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20   MEM_Zero;.  }. 
16c00 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
16c10 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e  ITE_UTF8;  /* In
16c20 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69   case the blob i
16c30 73 20 65 76 65 72 20 63 6f 6e 76 65 72 74 65 64  s ever converted
16c40 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52 45   to text */.  RE
16c50 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
16c60 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55  ->p3, pOut);.  U
16c70 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
16c80 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
16c90 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
16ca0 20 43 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a   Count P1 P2 * *
16cb0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
16cc0 72 5b 50 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a  r[P2]=count().**
16cd0 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75  .** Store the nu
16ce0 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
16cf0 28 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75  (an integer valu
16d00 65 29 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  e) in the table 
16d10 6f 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65  or index .** ope
16d20 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31  ned by cursor P1
16d30 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
16d40 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
16d50 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e  E_OMIT_BTREECOUN
16d60 54 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a  T.case OP_Count:
16d70 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75   {         /* ou
16d80 74 32 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74  t2 */.  i64 nEnt
16d90 72 79 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  ry;.  BtCursor *
16da0 70 43 72 73 72 3b 0a 0a 20 20 61 73 73 65 72 74  pCrsr;..  assert
16db0 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  ( p->apCsr[pOp->
16dc0 70 31 5d 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43  p1]->eCurType==C
16dd0 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
16de0 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43    pCrsr = p->apC
16df0 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 75 63 2e  sr[pOp->p1]->uc.
16e00 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
16e10 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 6e 45  t( pCrsr );.  nE
16e20 6e 74 72 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  ntry = 0;  /* No
16e30 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
16e40 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20  used to silence 
16e50 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
16e60 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
16e70 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20 26 6e  eCount(pCrsr, &n
16e80 45 6e 74 72 79 29 3b 0a 20 20 69 66 28 20 72 63  Entry);.  if( rc
16e90 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
16ea0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f  e_to_error;.  pO
16eb0 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
16ec0 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
16ed0 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72  Out->u.i = nEntr
16ee0 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  y;.  break;.}.#e
16ef0 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
16f00 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20   Savepoint P1 * 
16f10 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65  * P4 *.**.** Ope
16f20 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f  n, release or ro
16f30 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65 70  llback the savep
16f40 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61  oint named by pa
16f50 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65  rameter P4, depe
16f60 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20  nding.** on the 
16f70 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20  value of P1. To 
16f80 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70  open a new savep
16f90 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20  oint, P1==0. To 
16fa0 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29  release (commit)
16fb0 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20   an.** existing 
16fc0 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31  savepoint, P1==1
16fd0 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b  , or to rollback
16fe0 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76   an existing sav
16ff0 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f  epoint P1==2..*/
17000 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69  .case OP_Savepoi
17010 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20  nt: {.  int p1; 
17020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17030 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
17040 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a   of P1 operand *
17050 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  /.  char *zName;
17060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17070 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73      /* Name of s
17080 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e  avepoint */.  in
17090 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70  t nName;.  Savep
170a0 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61  oint *pNew;.  Sa
170b0 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f  vepoint *pSavepo
170c0 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  int;.  Savepoint
170d0 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53   *pTmp;.  int iS
170e0 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20  avepoint;.  int 
170f0 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d  ii;..  p1 = pOp-
17100 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70  >p1;.  zName = p
17110 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20  Op->p4.z;..  /* 
17120 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20  Assert that the 
17130 70 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  p1 parameter is 
17140 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74  valid. Also that
17150 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   if there is no 
17160 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61  open.  ** transa
17170 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72  ction, then ther
17180 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20  e cannot be any 
17190 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a  savepoints. .  *
171a0 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  /.  assert( db->
171b0 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c  pSavepoint==0 ||
171c0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
171d0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
171e0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45  p1==SAVEPOINT_BE
171f0 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49  GIN||p1==SAVEPOI
17200 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d  NT_RELEASE||p1==
17210 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
17220 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  CK );.  assert( 
17230 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c  db->pSavepoint |
17240 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  | db->isTransact
17250 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20  ionSavepoint==0 
17260 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68 65  );.  assert( che
17270 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
17280 28 64 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74  (db) );.  assert
17290 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
172a0 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56  ;..  if( p1==SAV
172b0 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a  EPOINT_BEGIN ){.
172c0 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62      if( db->nVdb
172d0 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20  eWrite>0 ){.    
172e0 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70    /* A new savep
172f0 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63  oint cannot be c
17300 72 65 61 74 65 64 20 69 66 20 74 68 65 72 65 20  reated if there 
17310 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74 65  are active write
17320 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65   .      ** state
17330 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e  ments (i.e. open
17340 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72   read/write incr
17350 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e  emental blob han
17360 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a  dles)..      */.
17370 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
17380 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f  eError(p, "canno
17390 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74  t open savepoint
173a0 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74   - SQL statement
173b0 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b  s in progress");
173c0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
173d0 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c  TE_BUSY;.    }el
173e0 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20  se{.      nName 
173f0 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
17400 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64  0(zName);..#ifnd
17410 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
17420 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 20 20  IRTUALTABLE.    
17430 20 20 2f 2a 20 54 68 69 73 20 63 61 6c 6c 20 69    /* This call i
17440 73 20 4f 6b 20 65 76 65 6e 20 69 66 20 74 68 69  s Ok even if thi
17450 73 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61  s savepoint is a
17460 63 74 75 61 6c 6c 79 20 61 20 74 72 61 6e 73 61  ctually a transa
17470 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73  ction.      ** s
17480 61 76 65 70 6f 69 6e 74 20 28 61 6e 64 20 74 68  avepoint (and th
17490 65 72 65 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e  erefore should n
174a0 6f 74 20 70 72 6f 6d 70 74 20 78 53 61 76 65 70  ot prompt xSavep
174b0 6f 69 6e 74 28 29 29 20 63 61 6c 6c 62 61 63 6b  oint()) callback
174c0 73 2e 0a 20 20 20 20 20 20 2a 2a 20 49 66 20 74  s..      ** If t
174d0 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63  his is a transac
174e0 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 20 62  tion savepoint b
174f0 65 69 6e 67 20 6f 70 65 6e 65 64 2c 20 69 74 20  eing opened, it 
17500 69 73 20 67 75 61 72 61 6e 74 65 65 64 0a 20 20  is guaranteed.  
17510 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20      ** that the 
17520 64 62 2d 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72  db->aVTrans[] ar
17530 72 61 79 20 69 73 20 65 6d 70 74 79 2e 20 20 2a  ray is empty.  *
17540 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
17550 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
17560 30 20 7c 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73  0 || db->nVTrans
17570 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 72 63 20  ==0 );.      rc 
17580 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  = sqlite3VtabSav
17590 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50  epoint(db, SAVEP
175a0 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20  OINT_BEGIN,.    
175b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175c0 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e              db->
175d0 6e 53 74 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e  nStatement+db->n
175e0 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
175f0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
17600 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
17610 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23  _due_to_error;.#
17620 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20  endif..      /* 
17630 43 72 65 61 74 65 20 61 20 6e 65 77 20 73 61 76  Create a new sav
17640 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65  epoint structure
17650 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20  . */.      pNew 
17660 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
17670 63 52 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f  cRawNN(db, sizeo
17680 66 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61  f(Savepoint)+nNa
17690 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28  me+1);.      if(
176a0 20 70 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20   pNew ){.       
176b0 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28   pNew->zName = (
176c0 63 68 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b  char *)&pNew[1];
176d0 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28  .        memcpy(
176e0 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61  pNew->zName, zNa
176f0 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20  me, nName+1);.  
17700 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66    .        /* If
17710 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65   there is no ope
17720 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  n transaction, t
17730 68 65 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73  hen mark this as
17740 20 61 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20   a special.     
17750 20 20 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69     ** "transacti
17760 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a  on savepoint". *
17770 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 64 62  /.        if( db
17780 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
17790 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75            db->au
177a0 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20  toCommit = 0;.  
177b0 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72          db->isTr
177c0 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
177d0 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  nt = 1;.        
177e0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
177f0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b   db->nSavepoint+
17800 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20  +;.        }..  
17810 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68        /* Link th
17820 65 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  e new savepoint 
17830 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  into the databas
17840 65 20 68 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e  e handle's list.
17850 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e 65 77   */.        pNew
17860 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53  ->pNext = db->pS
17870 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
17880 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
17890 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20 20 20   = pNew;.       
178a0 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64   pNew->nDeferred
178b0 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
178c0 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
178d0 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65    pNew->nDeferre
178e0 64 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  dImmCons = db->n
178f0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
17900 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
17910 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53 61 76   }else{.    iSav
17920 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20  epoint = 0;..   
17930 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d   /* Find the nam
17940 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66  ed savepoint. If
17950 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63   there is no suc
17960 68 20 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65  h savepoint, the
17970 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65  n an.    ** an e
17980 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
17990 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a   to the user.  *
179a0 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20  /.    for(.     
179b0 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62   pSavepoint = db
179c0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20  ->pSavepoint; . 
179d0 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20       pSavepoint 
179e0 26 26 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  && sqlite3StrICm
179f0 70 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e  p(pSavepoint->zN
17a00 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  ame, zName);.   
17a10 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20     pSavepoint = 
17a20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
17a30 74 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69  t.    ){.      i
17a40 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20  Savepoint++;.   
17a50 20 7d 0a 20 20 20 20 69 66 28 20 21 70 53 61 76   }.    if( !pSav
17a60 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  epoint ){.      
17a70 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
17a80 28 70 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76  (p, "no such sav
17a90 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61  epoint: %s", zNa
17aa0 6d 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  me);.      rc = 
17ab0 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
17ac0 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e    }else if( db->
17ad0 6e 56 64 62 65 57 72 69 74 65 3e 30 20 26 26 20  nVdbeWrite>0 && 
17ae0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
17af0 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 2f  LEASE ){.      /
17b00 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73  * It is not poss
17b10 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73 65 20  ible to release 
17b20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76 65 70  (commit) a savep
17b30 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20 61 72  oint if there ar
17b40 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63 74 69  e .      ** acti
17b50 76 65 20 77 72 69 74 65 20 73 74 61 74 65 6d 65  ve write stateme
17b60 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  nts..      */.  
17b70 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
17b80 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20  rror(p, "cannot 
17b90 72 65 6c 65 61 73 65 20 73 61 76 65 70 6f 69 6e  release savepoin
17ba0 74 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20  t - ".          
17bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bc0 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20  "SQL statements 
17bd0 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20  in progress");. 
17be0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
17bf0 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65  _BUSY;.    }else
17c00 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65 74 65  {..      /* Dete
17c10 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72  rmine whether or
17c20 20 6e 6f 74 20 74 68 69 73 20 69 73 20 61 20 74   not this is a t
17c30 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
17c40 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20  oint. If so,.   
17c50 20 20 20 2a 2a 20 61 6e 64 20 74 68 69 73 20 69     ** and this i
17c60 73 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  s a RELEASE comm
17c70 61 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75  and, then the cu
17c80 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  rrent transactio
17c90 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 63  n .      ** is c
17ca0 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20 20 20  ommitted. .     
17cb0 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 73   */.      int is
17cc0 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53  Transaction = pS
17cd0 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d  avepoint->pNext=
17ce0 3d 30 20 26 26 20 64 62 2d 3e 69 73 54 72 61 6e  =0 && db->isTran
17cf0 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
17d00 3b 0a 20 20 20 20 20 20 69 66 28 20 69 73 54 72  ;.      if( isTr
17d10 61 6e 73 61 63 74 69 6f 6e 20 26 26 20 70 31 3d  ansaction && p1=
17d20 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
17d30 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  SE ){.        if
17d40 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  ( (rc = sqlite3V
17d50 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29  dbeCheckFk(p, 1)
17d60 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  )!=SQLITE_OK ){.
17d70 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76            goto v
17d80 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
17d90 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62      }.        db
17da0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31  ->autoCommit = 1
17db0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71  ;.        if( sq
17dc0 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
17dd0 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
17de0 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 70 63  .          p->pc
17df0 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
17e00 4f 70 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64  Op);.          d
17e10 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
17e20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e  0;.          p->
17e30 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
17e40 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20  _BUSY;.         
17e50 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
17e60 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  n;.        }.   
17e70 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73       db->isTrans
17e80 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20  actionSavepoint 
17e90 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20  = 0;.        rc 
17ea0 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d  = p->rc;.      }
17eb0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e  else{.        in
17ec0 74 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65  t isSchemaChange
17ed0 3b 0a 20 20 20 20 20 20 20 20 69 53 61 76 65 70  ;.        iSavep
17ee0 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65  oint = db->nSave
17ef0 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69  point - iSavepoi
17f00 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  nt - 1;.        
17f10 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
17f20 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20  T_ROLLBACK ){.  
17f30 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61          isSchema
17f40 43 68 61 6e 67 65 20 3d 20 28 64 62 2d 3e 66 6c  Change = (db->fl
17f50 61 67 73 20 26 20 53 51 4c 49 54 45 5f 49 6e 74  ags & SQLITE_Int
17f60 65 72 6e 43 68 61 6e 67 65 73 29 21 3d 30 3b 0a  ernChanges)!=0;.
17f70 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 69            for(ii
17f80 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20  =0; ii<db->nDb; 
17f90 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  ii++){.         
17fa0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
17fb0 74 72 65 65 54 72 69 70 41 6c 6c 43 75 72 73 6f  treeTripAllCurso
17fc0 72 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  rs(db->aDb[ii].p
17fd0 42 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  Bt,.            
17fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ff0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
18000 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b  E_ABORT_ROLLBACK
18010 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
18020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18030 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d           isSchem
18040 61 43 68 61 6e 67 65 3d 3d 30 29 3b 0a 20 20 20  aChange==0);.   
18050 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21           if( rc!
18060 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
18070 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
18080 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20  rror;.          
18090 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  }.        }else{
180a0 0a 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68  .          isSch
180b0 65 6d 61 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20  emaChange = 0;. 
180c0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
180d0 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62   for(ii=0; ii<db
180e0 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
180f0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
18100 69 74 65 33 42 74 72 65 65 53 61 76 65 70 6f 69  ite3BtreeSavepoi
18110 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  nt(db->aDb[ii].p
18120 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69  Bt, p1, iSavepoi
18130 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  nt);.          i
18140 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
18150 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
18160 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
18170 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
18180 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
18190 20 20 20 20 20 20 20 69 66 28 20 69 73 53 63 68         if( isSch
181a0 65 6d 61 43 68 61 6e 67 65 20 29 7b 0a 20 20 20  emaChange ){.   
181b0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
181c0 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
181d0 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  ements(db);.    
181e0 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
181f0 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
18200 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20  nnection(db);.  
18210 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67          db->flag
18220 73 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 7c  s = (db->flags |
18230 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
18240 61 6e 67 65 73 29 3b 0a 20 20 20 20 20 20 20 20  anges);.        
18250 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  }.      }.  .   
18260 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73     /* Regardless
18270 20 6f 66 20 77 68 65 74 68 65 72 20 74 68 69 73   of whether this
18280 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72   is a RELEASE or
18290 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72   ROLLBACK, destr
182a0 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a  oy all .      **
182b0 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74   savepoints nest
182c0 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65  ed inside of the
182d0 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67   savepoint being
182e0 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f   operated on. */
182f0 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 64 62  .      while( db
18300 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53  ->pSavepoint!=pS
18310 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20  avepoint ){.    
18320 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70      pTmp = db->p
18330 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20  Savepoint;.     
18340 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e     db->pSavepoin
18350 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b  t = pTmp->pNext;
18360 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
18370 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29  DbFree(db, pTmp)
18380 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53  ;.        db->nS
18390 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20  avepoint--;.    
183a0 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66    }..      /* If
183b0 20 69 74 20 69 73 20 61 20 52 45 4c 45 41 53 45   it is a RELEASE
183c0 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74  , then destroy t
183d0 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  he savepoint bei
183e0 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a  ng operated on .
183f0 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66        ** too. If
18400 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41 43   it is a ROLLBAC
18410 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20 74  K TO, then set t
18420 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 66  he number of def
18430 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a 20  erred .      ** 
18440 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
18450 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69 6e  tions present in
18460 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f   the database to
18470 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
18480 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e 20  d.      ** when 
18490 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77 61  the savepoint wa
184a0 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20  s created.  */. 
184b0 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56       if( p1==SAV
184c0 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
184d0 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
184e0 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62  ( pSavepoint==db
184f0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a  ->pSavepoint );.
18500 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
18510 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f  epoint = pSavepo
18520 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20  int->pNext;.    
18530 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
18540 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74  e(db, pSavepoint
18550 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 21  );.        if( !
18560 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b  isTransaction ){
18570 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  .          db->n
18580 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20  Savepoint--;.   
18590 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c       }.      }el
185a0 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  se{.        db->
185b0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20  nDeferredCons = 
185c0 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66  pSavepoint->nDef
185d0 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20  erredCons;.     
185e0 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
185f0 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61 76 65 70  ImmCons = pSavep
18600 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 49  oint->nDeferredI
18610 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a  mmCons;.      }.
18620 0a 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72  .      if( !isTr
18630 61 6e 73 61 63 74 69 6f 6e 20 7c 7c 20 70 31 3d  ansaction || p1=
18640 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
18650 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ACK ){.        r
18660 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53  c = sqlite3VtabS
18670 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c  avepoint(db, p1,
18680 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20   iSavepoint);.  
18690 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
186a0 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
186b0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
186c0 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  r;.      }.    }
186d0 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
186e0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
186f0 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 62 72 65 61  o_error;..  brea
18700 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
18710 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50   AutoCommit P1 P
18720 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65  2 * * *.**.** Se
18730 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  t the database a
18740 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20  uto-commit flag 
18750 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20  to P1 (1 or 0). 
18760 49 66 20 50 32 20 69 73 20 74 72 75 65 2c 20 72  If P2 is true, r
18770 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20  oll.** back any 
18780 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65  currently active
18790 20 62 74 72 65 65 20 74 72 61 6e 73 61 63 74 69   btree transacti
187a0 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61 72  ons. If there ar
187b0 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20  e any active.** 
187c0 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20  VMs (apart from 
187d0 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20  this one), then 
187e0 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73  a ROLLBACK fails
187f0 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c  .  A COMMIT fail
18800 73 20 69 66 0a 2a 2a 20 74 68 65 72 65 20 61 72  s if.** there ar
18810 65 20 61 63 74 69 76 65 20 77 72 69 74 69 6e 67  e active writing
18820 20 56 4d 73 20 6f 72 20 61 63 74 69 76 65 20 56   VMs or active V
18830 4d 73 20 74 68 61 74 20 75 73 65 20 73 68 61 72  Ms that use shar
18840 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20  ed cache..**.** 
18850 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
18860 20 63 61 75 73 65 73 20 74 68 65 20 56 4d 20 74   causes the VM t
18870 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20  o halt..*/.case 
18880 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b  OP_AutoCommit: {
18890 0a 20 20 69 6e 74 20 64 65 73 69 72 65 64 41 75  .  int desiredAu
188a0 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20  toCommit;.  int 
188b0 69 52 6f 6c 6c 62 61 63 6b 3b 0a 0a 20 20 64 65  iRollback;..  de
188c0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20  siredAutoCommit 
188d0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f  = pOp->p1;.  iRo
188e0 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32  llback = pOp->p2
188f0 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69  ;.  assert( desi
18900 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
18910 20 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f 43   || desiredAutoC
18920 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73  ommit==0 );.  as
18930 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74  sert( desiredAut
18940 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52  oCommit==1 || iR
18950 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20  ollback==0 );.  
18960 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 56 64 62  assert( db->nVdb
18970 65 41 63 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a  eActive>0 );  /*
18980 20 41 74 20 6c 65 61 73 74 20 74 68 69 73 20 6f   At least this o
18990 6e 65 20 56 4d 20 69 73 20 61 63 74 69 76 65 20  ne VM is active 
189a0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  */.  assert( p->
189b0 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20  bIsReader );..  
189c0 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  if( desiredAutoC
189d0 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43  ommit!=db->autoC
189e0 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66 28  ommit ){.    if(
189f0 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20   iRollback ){.  
18a00 20 20 20 20 61 73 73 65 72 74 28 20 64 65 73 69      assert( desi
18a10 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
18a20 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   );.      sqlite
18a30 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 2c  3RollbackAll(db,
18a40 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f   SQLITE_ABORT_RO
18a50 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20 20 20 64  LLBACK);.      d
18a60 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
18a70 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  1;.    }else if(
18a80 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
18a90 69 74 20 26 26 20 64 62 2d 3e 6e 56 64 62 65 57  it && db->nVdbeW
18aa0 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20  rite>0 ){.      
18ab0 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72  /* If this instr
18ac0 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  uction implement
18ad0 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f  s a COMMIT and o
18ae0 74 68 65 72 20 56 4d 73 20 61 72 65 20 77 72 69  ther VMs are wri
18af0 74 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 72 65  ting.      ** re
18b00 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e  turn an error in
18b10 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 74 68  dicating that th
18b20 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74  e other VMs must
18b30 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e   complete first.
18b40 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20   .      */.     
18b50 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
18b60 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d  r(p, "cannot com
18b70 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  mit transaction 
18b80 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  - ".            
18b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
18ba0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
18bb0 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
18bc0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
18bd0 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  USY;.      goto 
18be0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
18bf0 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  or;.    }else if
18c00 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  ( (rc = sqlite3V
18c10 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29  dbeCheckFk(p, 1)
18c20 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  )!=SQLITE_OK ){.
18c30 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
18c40 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73  return;.    }els
18c50 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74  e{.      db->aut
18c60 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64 65  oCommit = (u8)de
18c70 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b  siredAutoCommit;
18c80 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73  .    }.    if( s
18c90 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
18ca0 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  )==SQLITE_BUSY )
18cb0 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20  {.      p->pc = 
18cc0 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
18cd0 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  ;.      db->auto
18ce0 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28 31 2d  Commit = (u8)(1-
18cf0 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
18d00 74 29 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20  t);.      p->rc 
18d10 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
18d20 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76  SY;.      goto v
18d30 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
18d40 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62  }.    assert( db
18d50 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20  ->nStatement==0 
18d60 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6c  );.    sqlite3Cl
18d70 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 64 62  oseSavepoints(db
18d80 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72 63  );.    if( p->rc
18d90 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
18da0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
18db0 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65  _DONE;.    }else
18dc0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
18dd0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
18de0 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72  .    goto vdbe_r
18df0 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a  eturn;.  }else{.
18e00 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
18e10 72 72 6f 72 28 70 2c 0a 20 20 20 20 20 20 20 20  rror(p,.        
18e20 28 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  (!desiredAutoCom
18e30 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61  mit)?"cannot sta
18e40 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  rt a transaction
18e50 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
18e60 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20  ction":(.       
18e70 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61   (iRollback)?"ca
18e80 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20  nnot rollback - 
18e90 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
18ea0 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20 20  s active":.     
18eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
18ec0 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e  annot commit - n
18ed0 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
18ee0 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20 20   active"));.    
18ef0 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20 53       .    rc = S
18f00 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
18f10 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
18f20 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  to_error;.  }.  
18f30 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
18f40 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e  ode: Transaction
18f50 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
18f60 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72  **.** Begin a tr
18f70 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 64 61 74  ansaction on dat
18f80 61 62 61 73 65 20 50 31 20 69 66 20 61 20 74 72  abase P1 if a tr
18f90 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74  ansaction is not
18fa0 20 61 6c 72 65 61 64 79 0a 2a 2a 20 61 63 74 69   already.** acti
18fb0 76 65 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  ve..** If P2 is 
18fc0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61  non-zero, then a
18fd0 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
18fe0 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2c 20 6f  on is started, o
18ff0 72 20 69 66 20 61 20 0a 2a 2a 20 72 65 61 64 2d  r if a .** read-
19000 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
19010 6c 72 65 61 64 79 20 61 63 74 69 76 65 2c 20 69  lready active, i
19020 74 20 69 73 20 75 70 67 72 61 64 65 64 20 74 6f  t is upgraded to
19030 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63   a write-transac
19040 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32 20 69  tion..** If P2 i
19050 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72  s zero, then a r
19060 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ead-transaction 
19070 69 73 20 73 74 61 72 74 65 64 2e 0a 2a 2a 0a 2a  is started..**.*
19080 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65  * P1 is the inde
19090 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
190a0 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20  e file on which 
190b0 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
190c0 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20  is.** started.  
190d0 49 6e 64 65 78 20 30 20 69 73 20 74 68 65 20 6d  Index 0 is the m
190e0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
190f0 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73  e and index 1 is
19100 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65   the.** file use
19110 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  d for temporary 
19120 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73  tables.  Indices
19130 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72   of 2 or more ar
19140 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74  e used for.** at
19150 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
19160 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69  ..**.** If a wri
19170 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  te-transaction i
19180 73 20 73 74 61 72 74 65 64 20 61 6e 64 20 74 68  s started and th
19190 65 20 56 64 62 65 2e 75 73 65 73 53 74 6d 74 4a  e Vdbe.usesStmtJ
191a0 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a  ournal flag is.*
191b0 2a 20 74 72 75 65 20 28 74 68 69 73 20 66 6c 61  * true (this fla
191c0 67 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20  g is set if the 
191d0 56 64 62 65 20 6d 61 79 20 6d 6f 64 69 66 79 20  Vdbe may modify 
191e0 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f  more than one ro
191f0 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72  w and may.** thr
19200 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65  ow an ABORT exce
19210 70 74 69 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d  ption), a statem
19220 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
19230 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e  may also be open
19240 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63  ed..** More spec
19250 69 66 69 63 61 6c 6c 79 2c 20 61 20 73 74 61 74  ifically, a stat
19260 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
19270 6e 20 69 73 20 6f 70 65 6e 65 64 20 69 66 66 20  n is opened iff 
19280 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
19290 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75  connection is cu
192a0 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61  rrently not in a
192b0 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20  utocommit mode, 
192c0 6f 72 20 69 66 20 74 68 65 72 65 20 61 72 65 20  or if there are 
192d0 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69 76 65 20  other.** active 
192e0 73 74 61 74 65 6d 65 6e 74 73 2e 20 41 20 73 74  statements. A st
192f0 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
19300 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20 63  ion allows the c
19310 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 74  hanges made by t
19320 68 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62  his.** VDBE to b
19330 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66  e rolled back af
19340 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77 69 74  ter an error wit
19350 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 72  hout having to r
19360 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20  oll back the.** 
19370 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74 69  entire transacti
19380 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f 72 20  on. If no error 
19390 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20  is encountered, 
193a0 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72  the statement tr
193b0 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c  ansaction.** wil
193c0 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  l automatically 
193d0 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20  commit when the 
193e0 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a  VDBE halts..**.*
193f0 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20  * If P5!=0 then 
19400 74 68 69 73 20 6f 70 63 6f 64 65 20 61 6c 73 6f  this opcode also
19410 20 63 68 65 63 6b 73 20 74 68 65 20 73 63 68 65   checks the sche
19420 6d 61 20 63 6f 6f 6b 69 65 20 61 67 61 69 6e 73  ma cookie agains
19430 74 20 50 33 0a 2a 2a 20 61 6e 64 20 74 68 65 20  t P3.** and the 
19440 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f  schema generatio
19450 6e 20 63 6f 75 6e 74 65 72 20 61 67 61 69 6e 73  n counter agains
19460 74 20 50 34 2e 0a 2a 2a 20 54 68 65 20 63 6f 6f  t P4..** The coo
19470 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74 73 20  kie changes its 
19480 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74  value whenever t
19490 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
194a0 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54  ma changes..** T
194b0 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  his operation is
194c0 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20   used to detect 
194d0 77 68 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f  when that the co
194e0 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65 64  okie has changed
194f0 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65  .** and that the
19500 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
19510 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61 64   needs to reread
19520 20 74 68 65 20 73 63 68 65 6d 61 2e 20 20 49 66   the schema.  If
19530 20 74 68 65 20 73 63 68 65 6d 61 0a 2a 2a 20 63   the schema.** c
19540 6f 6f 6b 69 65 20 69 6e 20 50 33 20 64 69 66 66  ookie in P3 diff
19550 65 72 73 20 66 72 6f 6d 20 74 68 65 20 73 63 68  ers from the sch
19560 65 6d 61 20 63 6f 6f 6b 69 65 20 69 6e 20 74 68  ema cookie in th
19570 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65  e database heade
19580 72 20 6f 72 0a 2a 2a 20 69 66 20 74 68 65 20 73  r or.** if the s
19590 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e  chema generation
195a0 20 63 6f 75 6e 74 65 72 20 69 6e 20 50 34 20 64   counter in P4 d
195b0 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20  iffers from the 
195c0 63 75 72 72 65 6e 74 0a 2a 2a 20 67 65 6e 65 72  current.** gener
195d0 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2c 20 74  ation counter, t
195e0 68 65 6e 20 61 6e 20 53 51 4c 49 54 45 5f 53 43  hen an SQLITE_SC
195f0 48 45 4d 41 20 65 72 72 6f 72 20 69 73 20 72 61  HEMA error is ra
19600 69 73 65 64 20 61 6e 64 20 65 78 65 63 75 74 69  ised and executi
19610 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20 20 54 68  on.** halts.  Th
19620 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  e sqlite3_step()
19630 20 77 72 61 70 70 65 72 20 66 75 6e 63 74 69 6f   wrapper functio
19640 6e 20 6d 69 67 68 74 20 74 68 65 6e 20 72 65 70  n might then rep
19650 72 65 70 61 72 65 20 74 68 65 0a 2a 2a 20 73 74  repare the.** st
19660 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65 72 75  atement and reru
19670 6e 20 69 74 20 66 72 6f 6d 20 74 68 65 20 62 65  n it from the be
19680 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65  ginning..*/.case
19690 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a   OP_Transaction:
196a0 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b   {.  Btree *pBt;
196b0 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20  .  int iMeta;.  
196c0 69 6e 74 20 69 47 65 6e 3b 0a 0a 20 20 61 73 73  int iGen;..  ass
196d0 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
196e0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
196f0 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c  ->readOnly==0 ||
19700 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20   pOp->p2==0 );. 
19710 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
19720 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
19730 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
19740 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
19750 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
19760 2d 3e 70 31 29 20 29 3b 0a 20 20 69 66 28 20 70  ->p1) );.  if( p
19770 4f 70 2d 3e 70 32 20 26 26 20 28 64 62 2d 3e 66  Op->p2 && (db->f
19780 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 51 75  lags & SQLITE_Qu
19790 65 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20  eryOnly)!=0 ){. 
197a0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52     rc = SQLITE_R
197b0 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74  EADONLY;.    got
197c0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
197d0 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20  rror;.  }.  pBt 
197e0 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
197f0 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70  1].pBt;..  if( p
19800 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  Bt ){.    rc = s
19810 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
19820 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e  Trans(pBt, pOp->
19830 70 32 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73  p2);.    testcas
19840 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  e( rc==SQLITE_BU
19850 53 59 5f 53 4e 41 50 53 48 4f 54 20 29 3b 0a 20  SY_SNAPSHOT );. 
19860 20 20 20 74 65 73 74 63 61 73 65 28 20 72 63 3d     testcase( rc=
19870 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f 52 45 43  =SQLITE_BUSY_REC
19880 4f 56 45 52 59 20 29 3b 0a 20 20 20 20 69 66 28  OVERY );.    if(
19890 20 28 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49   (rc&0xff)==SQLI
198a0 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
198b0 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70   p->pc = (int)(p
198c0 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20  Op - aOp);.     
198d0 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20   p->rc = rc;.   
198e0 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
198f0 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  urn;.    }.    i
19900 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
19910 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
19920 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
19930 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66  r;.    }..    if
19940 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e  ( pOp->p2 && p->
19950 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20  usesStmtJournal 
19960 0a 20 20 20 20 20 26 26 20 28 64 62 2d 3e 61 75  .     && (db->au
19970 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64  toCommit==0 || d
19980 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 29 20  b->nVdbeRead>1) 
19990 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 61 73  .    ){.      as
199a0 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
199b0 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29  eeIsInTrans(pBt)
199c0 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d   );.      if( p-
199d0 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29  >iStatement==0 )
199e0 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
199f0 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  ( db->nStatement
19a00 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61 76 65  >=0 && db->nSave
19a10 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20  point>=0 );.    
19a20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65      db->nStateme
19a30 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20 70  nt++; .        p
19a40 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d 20 64  ->iStatement = d
19a50 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20  b->nSavepoint + 
19a60 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a  db->nStatement;.
19a70 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72        }..      r
19a80 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53  c = sqlite3VtabS
19a90 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56  avepoint(db, SAV
19aa0 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d  EPOINT_BEGIN, p-
19ab0 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a  >iStatement-1);.
19ac0 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
19ad0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
19ae0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
19af0 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28 70 42  treeBeginStmt(pB
19b00 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  t, p->iStatement
19b10 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  );.      }..    
19b20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65 20 63    /* Store the c
19b30 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20  urrent value of 
19b40 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
19b50 64 6c 65 73 20 64 65 66 65 72 72 65 64 20 63 6f  dles deferred co
19b60 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20 20 2a  nstraint.      *
19b70 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20 74 68  * counter. If th
19b80 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  e statement tran
19b90 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f  saction needs to
19ba0 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c   be rolled back,
19bb0 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 76 61  .      ** the va
19bc0 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 75 6e  lue of this coun
19bd0 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ter needs to be 
19be0 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a  restored too.  *
19bf0 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74  /.      p->nStmt
19c00 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  DefCons = db->nD
19c10 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20  eferredCons;.   
19c20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 49 6d     p->nStmtDefIm
19c30 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  mCons = db->nDef
19c40 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20  erredImmCons;.  
19c50 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 47 61 74 68    }..    /* Gath
19c60 65 72 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  er the schema ve
19c70 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72  rsion number for
19c80 20 63 68 65 63 6b 69 6e 67 3a 0a 20 20 20 20 2a   checking:.    *
19c90 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e  * IMPLEMENTATION
19ca0 2d 4f 46 3a 20 52 2d 33 32 31 39 35 2d 31 39 34  -OF: R-32195-194
19cb0 36 35 20 54 68 65 20 73 63 68 65 6d 61 20 76 65  65 The schema ve
19cc0 72 73 69 6f 6e 20 69 73 20 75 73 65 64 20 62 79  rsion is used by
19cd0 20 53 51 4c 69 74 65 0a 20 20 20 20 2a 2a 20 65   SQLite.    ** e
19ce0 61 63 68 20 74 69 6d 65 20 61 20 71 75 65 72 79  ach time a query
19cf0 20 69 73 20 65 78 65 63 75 74 65 64 20 74 6f 20   is executed to 
19d00 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20  ensure that the 
19d10 69 6e 74 65 72 6e 61 6c 20 63 61 63 68 65 20 6f  internal cache o
19d20 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 73 63 68  f the.    ** sch
19d30 65 6d 61 20 75 73 65 64 20 77 68 65 6e 20 63 6f  ema used when co
19d40 6d 70 69 6c 69 6e 67 20 74 68 65 20 53 51 4c 20  mpiling the SQL 
19d50 71 75 65 72 79 20 6d 61 74 63 68 65 73 20 74 68  query matches th
19d60 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65 0a  e schema of the.
19d70 20 20 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20      ** database 
19d80 61 67 61 69 6e 73 74 20 77 68 69 63 68 20 74 68  against which th
19d90 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79  e compiled query
19da0 20 69 73 20 61 63 74 75 61 6c 6c 79 20 65 78 65   is actually exe
19db0 63 75 74 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20  cuted..    */.  
19dc0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65    sqlite3BtreeGe
19dd0 74 4d 65 74 61 28 70 42 74 2c 20 42 54 52 45 45  tMeta(pBt, BTREE
19de0 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c  _SCHEMA_VERSION,
19df0 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b   (u32 *)&iMeta);
19e00 0a 20 20 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e  .    iGen = db->
19e10 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63  aDb[pOp->p1].pSc
19e20 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f  hema->iGeneratio
19e30 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  n;.  }else{.    
19e40 69 47 65 6e 20 3d 20 69 4d 65 74 61 20 3d 20 30  iGen = iMeta = 0
19e50 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
19e60 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
19e70 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
19e80 54 33 32 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  T32 );.  if( pOp
19e90 2d 3e 70 35 20 26 26 20 28 69 4d 65 74 61 21 3d  ->p5 && (iMeta!=
19ea0 70 4f 70 2d 3e 70 33 20 7c 7c 20 69 47 65 6e 21  pOp->p3 || iGen!
19eb0 3d 70 4f 70 2d 3e 70 34 2e 69 29 20 29 7b 0a 20  =pOp->p4.i) ){. 
19ec0 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
19ed0 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  (db, p->zErrMsg)
19ee0 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67  ;.    p->zErrMsg
19ef0 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72 44   = sqlite3DbStrD
19f00 75 70 28 64 62 2c 20 22 64 61 74 61 62 61 73 65  up(db, "database
19f10 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e   schema has chan
19f20 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66  ged");.    /* If
19f30 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b   the schema-cook
19f40 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ie from the data
19f50 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65  base file matche
19f60 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20  s the cookie .  
19f70 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68    ** stored with
19f80 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72   the in-memory r
19f90 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
19fa0 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a   the schema, do.
19fb0 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61      ** not reloa
19fc0 64 20 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f  d the schema fro
19fd0 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
19fe0 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ile..    **.    
19ff0 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61  ** If virtual-ta
1a000 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c  bles are in use,
1a010 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73   this is not jus
1a020 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  t an optimizatio
1a030 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c  n..    ** Often,
1a040 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20   v-tables store 
1a050 74 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74  their data in ot
1a060 68 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65  her SQLite table
1a070 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20  s, which.    ** 
1a080 61 72 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d  are queried from
1a090 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20   within xNext() 
1a0a0 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c  and other v-tabl
1a0b0 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a  e methods using.
1a0c0 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20      ** prepared 
1a0d0 71 75 65 72 69 65 73 2e 20 49 66 20 73 75 63 68  queries. If such
1a0e0 20 61 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d   a query is out-
1a0f0 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e  of-date, we do n
1a100 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a  ot want to.    *
1a110 2a 20 64 69 73 63 61 72 64 20 74 68 65 20 64 61  * discard the da
1a120 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61  tabase schema, a
1a130 73 20 74 68 65 20 75 73 65 72 20 63 6f 64 65 20  s the user code 
1a140 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65  implementing the
1a150 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20  .    ** v-table 
1a160 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65  would have to be
1a170 20 72 65 61 64 79 20 66 6f 72 20 74 68 65 20 73   ready for the s
1a180 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
1a190 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20  cture itself.   
1a1a0 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69   ** to be invali
1a1b0 64 61 74 65 64 20 77 68 65 6e 65 76 65 72 20 73  dated whenever s
1a1c0 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 73  qlite3_step() is
1a1d0 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74   called from wit
1a1e0 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d  hin .    ** a v-
1a1f0 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20  table method..  
1a200 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d    */.    if( db-
1a210 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53  >aDb[pOp->p1].pS
1a220 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f  chema->schema_co
1a230 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20  okie!=iMeta ){. 
1a240 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65       sqlite3Rese
1a250 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 70  tOneSchema(db, p
1a260 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20  Op->p1);.    }. 
1a270 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
1a280 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  1;.    rc = SQLI
1a290 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20  TE_SCHEMA;.  }. 
1a2a0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
1a2b0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1a2c0 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  r;.  break;.}../
1a2d0 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f  * Opcode: ReadCo
1a2e0 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20  okie P1 P2 P3 * 
1a2f0 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f  *.**.** Read coo
1a300 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72  kie number P3 fr
1a310 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31 20 61  om database P1 a
1a320 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f  nd write it into
1a330 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
1a340 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63   P3==1 is the sc
1a350 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50  hema version.  P
1a360 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  3==2 is the data
1a370 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20  base format..** 
1a380 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63  P3==3 is the rec
1a390 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63  ommended pager c
1a3a0 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73  ache size, and s
1a3b0 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20  o forth.  P1==0 
1a3c0 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  is.** the main d
1a3d0 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
1a3e0 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61   P1==1 is the da
1a3f0 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
1a400 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d   to store.** tem
1a410 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a  porary tables..*
1a420 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20  *.** There must 
1a430 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f  be a read-lock o
1a440 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28  n the database (
1a450 65 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63  either a transac
1a460 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20  tion.** must be 
1a470 73 74 61 72 74 65 64 20 6f 72 20 74 68 65 72 65  started or there
1a480 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e   must be an open
1a490 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a   cursor) before.
1a4a0 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  ** executing thi
1a4b0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  s instruction..*
1a4c0 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f  /.case OP_ReadCo
1a4d0 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20  okie: {         
1a4e0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
1a4f0 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20  .  int iMeta;.  
1a500 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69  int iDb;.  int i
1a510 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72  Cookie;..  asser
1a520 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
1a530 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  );.  iDb = pOp->
1a540 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20  p1;.  iCookie = 
1a550 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
1a560 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54  t( pOp->p3<SQLIT
1a570 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29  E_N_BTREE_META )
1a580 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
1a590 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
1a5a0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  b );.  assert( d
1a5b0 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21  b->aDb[iDb].pBt!
1a5c0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1a5d0 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
1a5e0 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b  reeMask, iDb) );
1a5f0 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  ..  sqlite3Btree
1a600 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b  GetMeta(db->aDb[
1a610 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69  iDb].pBt, iCooki
1a620 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61  e, (u32 *)&iMeta
1a630 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
1a640 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
1a650 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  p);.  pOut->u.i 
1a660 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b  = iMeta;.  break
1a670 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1a680 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  SetCookie P1 P2 
1a690 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69  P3 * *.**.** Wri
1a6a0 74 65 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  te the integer v
1a6b0 61 6c 75 65 20 50 33 20 69 6e 74 6f 20 63 6f 6f  alue P3 into coo
1a6c0 6b 69 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66  kie number P2 of
1a6d0 20 64 61 74 61 62 61 73 65 20 50 31 2e 0a 2a 2a   database P1..**
1a6e0 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63   P2==1 is the sc
1a6f0 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50  hema version.  P
1a700 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  2==2 is the data
1a710 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20  base format..** 
1a720 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63  P2==3 is the rec
1a730 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63  ommended pager c
1a740 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61  ache .** size, a
1a750 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31  nd so forth.  P1
1a760 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20  ==0 is the main 
1a770 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
1a780 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 0a  d P1==1 is the .
1a790 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ** database file
1a7a0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1a7b0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
1a7c0 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63  .**.** A transac
1a7d0 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61  tion must be sta
1a7e0 72 74 65 64 20 62 65 66 6f 72 65 20 65 78 65 63  rted before exec
1a7f0 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  uting this opcod
1a800 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  e..*/.case OP_Se
1a810 74 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 44 62 20  tCookie: {.  Db 
1a820 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74 28 20  *pDb;.  assert( 
1a830 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e  pOp->p2<SQLITE_N
1a840 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20  _BTREE_META );. 
1a850 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1a860 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
1a870 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
1a880 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
1a890 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
1a8a0 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72  ->p1) );.  asser
1a8b0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
1a8c0 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
1a8d0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  ->aDb[pOp->p1];.
1a8e0 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70    assert( pDb->p
1a8f0 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  Bt!=0 );.  asser
1a900 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
1a910 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70 4f  MutexHeld(db, pO
1a920 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20 2f  p->p1, 0) );.  /
1a930 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74  * See note about
1a940 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20   index shifting 
1a950 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65  on OP_ReadCookie
1a960 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
1a970 65 33 42 74 72 65 65 55 70 64 61 74 65 4d 65 74  e3BtreeUpdateMet
1a980 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d  a(pDb->pBt, pOp-
1a990 3e 70 32 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20  >p2, pOp->p3);. 
1a9a0 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54   if( pOp->p2==BT
1a9b0 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  REE_SCHEMA_VERSI
1a9c0 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65  ON ){.    /* Whe
1a9d0 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  n the schema coo
1a9e0 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63  kie changes, rec
1a9f0 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b  ord the new cook
1aa00 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f  ie internally */
1aa10 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d  .    pDb->pSchem
1aa20 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65  a->schema_cookie
1aa30 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20   = pOp->p3;.    
1aa40 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c  db->flags |= SQL
1aa50 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
1aa60 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  s;.  }else if( p
1aa70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49  Op->p2==BTREE_FI
1aa80 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20  LE_FORMAT ){.   
1aa90 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67   /* Record chang
1aaa0 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66  es in the file f
1aab0 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62  ormat */.    pDb
1aac0 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
1aad0 66 6f 72 6d 61 74 20 3d 20 70 4f 70 2d 3e 70 33  format = pOp->p3
1aae0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
1aaf0 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a  >p1==1 ){.    /*
1ab00 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20   Invalidate all 
1ab10 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
1ab20 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74 68 65  nts whenever the
1ab30 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20   TEMP database. 
1ab40 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20     ** schema is 
1ab50 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74  changed.  Ticket
1ab60 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71   #1644 */.    sq
1ab70 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
1ab80 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
1ab90 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  );.    p->expire
1aba0 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  d = 0;.  }.  if(
1abb0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
1abc0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1abd0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1abe0 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50  code: OpenRead P
1abf0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
1ac00 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d   Synopsis: root=
1ac10 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20  P2 iDb=P3.**.** 
1ac20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79  Open a read-only
1ac30 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65 20   cursor for the 
1ac40 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 77  database table w
1ac50 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69  hose root page i
1ac60 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61 74  s.** P2 in a dat
1ac70 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65  abase file.  The
1ac80 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
1ac90 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
1aca0 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65  P3. .** P3==0 me
1acb0 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74  ans the main dat
1acc0 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61  abase, P3==1 mea
1acd0 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ns the database 
1ace0 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d  used for .** tem
1acf0 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20 61  porary tables, a
1ad00 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75 73  nd P3>1 means us
1ad10 65 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ed the correspon
1ad20 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a 2a  ding attached.**
1ad30 20 64 61 74 61 62 61 73 65 2e 20 20 47 69 76 65   database.  Give
1ad40 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20   the new cursor 
1ad50 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f 66  an identifier of
1ad60 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20   P1.  The P1.** 
1ad70 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74 20  values need not 
1ad80 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62 75  be contiguous bu
1ad90 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73 20  t all P1 values 
1ada0 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20  should be small 
1adb0 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20  integers..** It 
1adc0 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20  is an error for 
1add0 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69 76  P1 to be negativ
1ade0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d  e..**.** If P5!=
1adf0 30 20 74 68 65 6e 20 75 73 65 20 74 68 65 20 63  0 then use the c
1ae00 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
1ae10 65 72 20 50 32 20 61 73 20 74 68 65 20 72 6f 6f  er P2 as the roo
1ae20 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74  t page, not.** t
1ae30 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20 69  he value of P2 i
1ae40 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  tself..**.** The
1ae50 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72 65 61  re will be a rea
1ae60 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61  d lock on the da
1ae70 74 61 62 61 73 65 20 77 68 65 6e 65 76 65 72 20  tabase whenever 
1ae80 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f  there is an.** o
1ae90 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49 66 20  pen cursor.  If 
1aea0 74 68 65 20 64 61 74 61 62 61 73 65 20 77 61 73  the database was
1aeb0 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20   unlocked prior 
1aec0 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  to this instruct
1aed0 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65  ion.** then a re
1aee0 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69  ad lock is acqui
1aef0 72 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74  red as part of t
1af00 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
1af10 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b    A read.** lock
1af20 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70 72   allows other pr
1af30 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61 64 20  ocesses to read 
1af40 74 68 65 20 64 61 74 61 62 61 73 65 20 62 75 74  the database but
1af50 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e   prohibits.** an
1af60 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20  y other process 
1af70 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74  from modifying t
1af80 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  he database.  Th
1af90 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a  e read lock is.*
1afa0 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65 6e 20  * released when 
1afb0 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20  all cursors are 
1afc0 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68 69 73  closed.  If this
1afd0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 74   instruction att
1afe0 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20  empts.** to get 
1aff0 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75 74 20  a read lock but 
1b000 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72 69 70  fails, the scrip
1b010 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77 69 74  t terminates wit
1b020 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42  h an.** SQLITE_B
1b030 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a  USY error code..
1b040 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c  **.** The P4 val
1b050 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72  ue may be either
1b060 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f   an integer (P4_
1b070 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e  INT32) or a poin
1b080 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49  ter to.** a KeyI
1b090 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50  nfo structure (P
1b0a0 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69  4_KEYINFO). If i
1b0b0 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  t is a pointer t
1b0c0 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20  o a KeyInfo .** 
1b0d0 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20  structure, then 
1b0e0 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64  said structure d
1b0f0 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65  efines the conte
1b100 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67  nt and collating
1b110 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66   .** sequence of
1b120 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67   the index being
1b130 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69   opened. Otherwi
1b140 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20  se, if P4 is an 
1b150 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75  integer .** valu
1b160 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20  e, it is set to 
1b170 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1b180 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
1b190 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  le..**.** See al
1b1a0 73 6f 3a 20 4f 70 65 6e 57 72 69 74 65 2c 20 52  so: OpenWrite, R
1b1b0 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a 20 4f  eopenIdx.*/./* O
1b1c0 70 63 6f 64 65 3a 20 52 65 6f 70 65 6e 49 64 78  pcode: ReopenIdx
1b1d0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
1b1e0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f  ** Synopsis: roo
1b1f0 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a  t=P2 iDb=P3.**.*
1b200 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20  * The ReopenIdx 
1b210 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 65 78 61  opcode works exa
1b220 63 74 6c 79 20 6c 69 6b 65 20 52 65 61 64 4f 70  ctly like ReadOp
1b230 65 6e 20 65 78 63 65 70 74 20 74 68 61 74 20 69  en except that i
1b240 74 20 66 69 72 73 74 0a 2a 2a 20 63 68 65 63 6b  t first.** check
1b250 73 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20  s to see if the 
1b260 63 75 72 73 6f 72 20 6f 6e 20 50 31 20 69 73 20  cursor on P1 is 
1b270 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 77 69 74  already open wit
1b280 68 20 61 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  h a root page.**
1b290 20 6e 75 6d 62 65 72 20 6f 66 20 50 32 20 61 6e   number of P2 an
1b2a0 64 20 69 66 20 69 74 20 69 73 20 74 68 69 73 20  d if it is this 
1b2b0 6f 70 63 6f 64 65 20 62 65 63 6f 6d 65 73 20 61  opcode becomes a
1b2c0 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74 68 65   no-op.  In othe
1b2d0 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 69 66 20 74  r words,.** if t
1b2e0 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 72  he cursor is alr
1b2f0 65 61 64 79 20 6f 70 65 6e 2c 20 64 6f 20 6e 6f  eady open, do no
1b300 74 20 72 65 6f 70 65 6e 20 69 74 2e 0a 2a 2a 0a  t reopen it..**.
1b310 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78  ** The ReopenIdx
1b320 20 6f 70 63 6f 64 65 20 6d 61 79 20 6f 6e 6c 79   opcode may only
1b330 20 62 65 20 75 73 65 64 20 77 69 74 68 20 50 35   be used with P5
1b340 3d 3d 30 20 61 6e 64 20 77 69 74 68 20 50 34 20  ==0 and with P4 
1b350 62 65 69 6e 67 0a 2a 2a 20 61 20 50 34 5f 4b 45  being.** a P4_KE
1b360 59 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20 20 46  YINFO object.  F
1b370 75 72 74 68 65 72 6d 6f 72 65 2c 20 74 68 65 20  urthermore, the 
1b380 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65  P3 value must be
1b390 20 74 68 65 20 73 61 6d 65 20 61 73 0a 2a 2a 20   the same as.** 
1b3a0 65 76 65 72 79 20 6f 74 68 65 72 20 52 65 6f 70  every other Reop
1b3b0 65 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52 65 61  enIdx or OpenRea
1b3c0 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20 63  d for the same c
1b3d0 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 0a 2a 2a  ursor number..**
1b3e0 0a 2a 2a 20 53 65 65 20 74 68 65 20 4f 70 65 6e  .** See the Open
1b3f0 52 65 61 64 20 6f 70 63 6f 64 65 20 64 6f 63 75  Read opcode docu
1b400 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61 64  mentation for ad
1b410 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
1b420 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
1b430 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31  de: OpenWrite P1
1b440 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
1b450 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50  Synopsis: root=P
1b460 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f  2 iDb=P3.**.** O
1b470 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65  pen a read/write
1b480 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31   cursor named P1
1b490 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   on the table or
1b4a0 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
1b4b0 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e  t.** page is P2.
1b4c0 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73    Or if P5!=0 us
1b4d0 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
1b4e0 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
1b4f0 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74  find the.** root
1b500 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   page..**.** The
1b510 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65   P4 value may be
1b520 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67   either an integ
1b530 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72  er (P4_INT32) or
1b540 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a   a pointer to.**
1b550 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
1b560 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f  ture (P4_KEYINFO
1b570 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f  ). If it is a po
1b580 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e  inter to a KeyIn
1b590 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  fo .** structure
1b5a0 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75  , then said stru
1b5b0 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68  cture defines th
1b5c0 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f  e content and co
1b5d0 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75  llating .** sequ
1b5e0 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65  ence of the inde
1b5f0 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20  x being opened. 
1b600 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34  Otherwise, if P4
1b610 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a   is an integer .
1b620 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20  ** value, it is 
1b630 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
1b640 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1b650 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f  the table, or to
1b660 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20   the.** largest 
1b670 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c  index of any col
1b680 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65  umn of the table
1b690 20 74 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c   that is actuall
1b6a0 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  y used..**.** Th
1b6b0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  is instruction w
1b6c0 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f  orks just like O
1b6d0 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74  penRead except t
1b6e0 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65  hat it opens the
1b6f0 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65   cursor.** in re
1b700 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20  ad/write mode.  
1b710 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c  For a given tabl
1b720 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65 20  e, there can be 
1b730 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64  one or more read
1b740 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73  -only.** cursors
1b750 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61   or a single rea
1b760 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 62  d/write cursor b
1b770 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a  ut not both..**.
1b780 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e  ** See also Open
1b790 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Read..*/.case OP
1b7a0 5f 52 65 6f 70 65 6e 49 64 78 3a 20 7b 0a 20 20  _ReopenIdx: {.  
1b7b0 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65  int nField;.  Ke
1b7c0 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
1b7d0 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74  .  int p2;.  int
1b7e0 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c   iDb;.  int wrFl
1b7f0 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b  ag;.  Btree *pX;
1b800 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1b810 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a  Cur;.  Db *pDb;.
1b820 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1b830 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35  p5==0 || pOp->p5
1b840 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20  ==OPFLAG_SEEKEQ 
1b850 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1b860 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59  ->p4type==P4_KEY
1b870 49 4e 46 4f 20 29 3b 0a 20 20 70 43 75 72 20 3d  INFO );.  pCur =
1b880 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1b890 31 5d 3b 0a 20 20 69 66 28 20 70 43 75 72 20 26  1];.  if( pCur &
1b8a0 26 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74  & pCur->pgnoRoot
1b8b0 3d 3d 28 75 33 32 29 70 4f 70 2d 3e 70 32 20 29  ==(u32)pOp->p2 )
1b8c0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
1b8d0 75 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d 3e 70 33  ur->iDb==pOp->p3
1b8e0 20 29 3b 20 20 20 20 20 20 2f 2a 20 47 75 61 72   );      /* Guar
1b8f0 61 6e 74 65 65 64 20 62 79 20 74 68 65 20 63 6f  anteed by the co
1b900 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a  de generator */.
1b910 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 5f 63 75      goto open_cu
1b920 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3b 0a  rsor_set_hints;.
1b930 20 20 7d 0a 20 20 2f 2a 20 49 66 20 74 68 65 20    }.  /* If the 
1b940 63 75 72 73 6f 72 20 69 73 20 6e 6f 74 20 63 75  cursor is not cu
1b950 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 6f 72 20  rrently open or 
1b960 69 73 20 6f 70 65 6e 20 6f 6e 20 61 20 64 69 66  is open on a dif
1b970 66 65 72 65 6e 74 0a 20 20 2a 2a 20 69 6e 64 65  ferent.  ** inde
1b980 78 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  x, then fall thr
1b990 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4f 70 65  ough into OP_Ope
1b9a0 6e 52 65 61 64 20 74 6f 20 66 6f 72 63 65 20 61  nRead to force a
1b9b0 20 72 65 6f 70 65 6e 20 2a 2f 0a 63 61 73 65 20   reopen */.case 
1b9c0 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73  OP_OpenRead:.cas
1b9d0 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 0a  e OP_OpenWrite:.
1b9e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1b9f0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57  opcode==OP_OpenW
1ba00 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  rite || pOp->p5=
1ba10 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f  =0 || pOp->p5==O
1ba20 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a  PFLAG_SEEKEQ );.
1ba30 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
1ba40 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65  Reader );.  asse
1ba50 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
1ba60 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c 7c 20  =OP_OpenRead || 
1ba70 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1ba80 52 65 6f 70 65 6e 49 64 78 0a 20 20 20 20 20 20  ReopenIdx.      
1ba90 20 20 20 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e      || p->readOn
1baa0 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20  ly==0 );..  if( 
1bab0 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20 20  p->expired ){.  
1bac0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42    rc = SQLITE_AB
1bad0 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20  ORT_ROLLBACK;.  
1bae0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1baf0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a  _to_error;.  }..
1bb00 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20    nField = 0;.  
1bb10 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20  pKeyInfo = 0;.  
1bb20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
1bb30 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  iDb = pOp->p3;. 
1bb40 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
1bb50 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
1bb60 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
1bb70 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
1bb80 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 70  ask, iDb) );.  p
1bb90 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44  Db = &db->aDb[iD
1bba0 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e  b];.  pX = pDb->
1bbb0 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70  pBt;.  assert( p
1bbc0 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f  X!=0 );.  if( pO
1bbd0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
1bbe0 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20 61  enWrite ){.    a
1bbf0 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 46 4f  ssert( OPFLAG_FO
1bc00 52 44 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f 46  RDELETE==BTREE_F
1bc10 4f 52 44 45 4c 45 54 45 20 29 3b 0a 20 20 20 20  ORDELETE );.    
1bc20 77 72 46 6c 61 67 20 3d 20 42 54 52 45 45 5f 57  wrFlag = BTREE_W
1bc30 52 43 53 52 20 7c 20 28 70 4f 70 2d 3e 70 35 20  RCSR | (pOp->p5 
1bc40 26 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45  & OPFLAG_FORDELE
1bc50 54 45 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  TE);.    assert(
1bc60 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
1bc70 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c  texHeld(db, iDb,
1bc80 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 70   0) );.    if( p
1bc90 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
1bca0 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69  e_format < p->mi
1bcb0 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
1bcc0 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e   ){.      p->min
1bcd0 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20  WriteFileFormat 
1bce0 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  = pDb->pSchema->
1bcf0 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20  file_format;.   
1bd00 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
1bd10 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a  wrFlag = 0;.  }.
1bd20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
1bd30 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 29  OPFLAG_P2ISREG )
1bd40 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  {.    assert( p2
1bd50 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  >0 );.    assert
1bd60 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ( p2<=(p->nMem+1
1bd70 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
1bd80 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d  ;.    pIn2 = &aM
1bd90 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73 65  em[p2];.    asse
1bda0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
1bdb0 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73 73 65  In2) );.    asse
1bdc0 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73  rt( (pIn2->flags
1bdd0 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
1bde0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
1bdf0 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
1be00 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28  In2);.    p2 = (
1be10 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  int)pIn2->u.i;. 
1be20 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c     /* The p2 val
1be30 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20  ue always comes 
1be40 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f  from a prior OP_
1be50 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f  CreateTable opco
1be60 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68  de and.    ** th
1be70 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61  at opcode will a
1be80 6c 77 61 79 73 20 73 65 74 20 74 68 65 20 70 32  lways set the p2
1be90 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d   value to 2 or m
1bea0 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c  ore or else fail
1beb0 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72  ..    ** If ther
1bec0 65 20 77 65 72 65 20 61 20 66 61 69 6c 75 72 65  e were a failure
1bed0 2c 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  , the prepared s
1bee0 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68  tatement would h
1bef0 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a  ave halted.    *
1bf00 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e  * before reachin
1bf10 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
1bf20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65 72  on. */.    asser
1bf30 74 28 20 70 32 3e 3d 32 20 29 3b 0a 20 20 7d 0a  t( p2>=2 );.  }.
1bf40 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
1bf50 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b  e==P4_KEYINFO ){
1bf60 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  .    pKeyInfo = 
1bf70 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
1bf80 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b  ;.    assert( pK
1bf90 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43  eyInfo->enc==ENC
1bfa0 28 64 62 29 20 29 3b 0a 20 20 20 20 61 73 73 65  (db) );.    asse
1bfb0 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  rt( pKeyInfo->db
1bfc0 3d 3d 64 62 20 29 3b 0a 20 20 20 20 6e 46 69 65  ==db );.    nFie
1bfd0 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e  ld = pKeyInfo->n
1bfe0 46 69 65 6c 64 2b 70 4b 65 79 49 6e 66 6f 2d 3e  Field+pKeyInfo->
1bff0 6e 58 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73 65  nXField;.  }else
1c000 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
1c010 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20  ==P4_INT32 ){.  
1c020 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
1c030 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65  p4.i;.  }.  asse
1c040 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1c050 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65  ;.  assert( nFie
1c060 6c 64 3e 3d 30 20 29 3b 0a 20 20 74 65 73 74 63  ld>=0 );.  testc
1c070 61 73 65 28 20 6e 46 69 65 6c 64 3d 3d 30 20 29  ase( nField==0 )
1c080 3b 20 20 2f 2a 20 54 61 62 6c 65 20 77 69 74 68  ;  /* Table with
1c090 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
1c0a0 20 4b 45 59 20 61 6e 64 20 6e 6f 74 68 69 6e 67   KEY and nothing
1c0b0 20 65 6c 73 65 20 2a 2f 0a 20 20 70 43 75 72 20   else */.  pCur 
1c0c0 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1c0d0 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69  (p, pOp->p1, nFi
1c0e0 65 6c 64 2c 20 69 44 62 2c 20 43 55 52 54 59 50  eld, iDb, CURTYP
1c0f0 45 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20  E_BTREE);.  if( 
1c100 70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  pCur==0 ) goto n
1c110 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e  o_mem;.  pCur->n
1c120 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
1c130 75 72 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20  ur->isOrdered = 
1c140 31 3b 0a 20 20 70 43 75 72 2d 3e 70 67 6e 6f 52  1;.  pCur->pgnoR
1c150 6f 6f 74 20 3d 20 70 32 3b 0a 23 69 66 64 65 66  oot = p2;.#ifdef
1c160 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
1c170 70 43 75 72 2d 3e 77 72 46 6c 61 67 20 3d 20 77  pCur->wrFlag = w
1c180 72 46 6c 61 67 3b 0a 23 65 6e 64 69 66 0a 20 20  rFlag;.#endif.  
1c190 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1c1a0 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32 2c 20  eCursor(pX, p2, 
1c1b0 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f  wrFlag, pKeyInfo
1c1c0 2c 20 70 43 75 72 2d 3e 75 63 2e 70 43 75 72 73  , pCur->uc.pCurs
1c1d0 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65  or);.  pCur->pKe
1c1e0 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f  yInfo = pKeyInfo
1c1f0 3b 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56  ;.  /* Set the V
1c200 64 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c  dbeCursor.isTabl
1c210 65 20 76 61 72 69 61 62 6c 65 2e 20 50 72 65 76  e variable. Prev
1c220 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66  ious versions of
1c230 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73 65  .  ** SQLite use
1c240 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68  d to check if th
1c250 65 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67  e root-page flag
1c260 73 20 77 65 72 65 20 73 61 6e 65 20 61 74 20 74  s were sane at t
1c270 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61  his point.  ** a
1c280 6e 64 20 72 65 70 6f 72 74 20 64 61 74 61 62 61  nd report databa
1c290 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 66  se corruption if
1c2a0 20 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c 20   they were not, 
1c2b0 62 75 74 20 74 68 69 73 20 63 68 65 63 6b 20 68  but this check h
1c2c0 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f  as.  ** since mo
1c2d0 76 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74 72  ved into the btr
1c2e0 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a  ee layer.  */  .
1c2f0 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20    pCur->isTable 
1c300 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50  = pOp->p4type!=P
1c310 34 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f 70 65 6e  4_KEYINFO;..open
1c320 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74  _cursor_set_hint
1c330 73 3a 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46  s:.  assert( OPF
1c340 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54 52  LAG_BULKCSR==BTR
1c350 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20  EE_BULKLOAD );. 
1c360 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f   assert( OPFLAG_
1c370 53 45 45 4b 45 51 3d 3d 42 54 52 45 45 5f 53 45  SEEKEQ==BTREE_SE
1c380 45 4b 5f 45 51 20 29 3b 0a 20 20 74 65 73 74 63  EK_EQ );.  testc
1c390 61 73 65 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f  ase( pOp->p5 & O
1c3a0 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 29 3b  PFLAG_BULKCSR );
1c3b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
1c3c0 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e  NABLE_CURSOR_HIN
1c3d0 54 53 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  TS.  testcase( p
1c3e0 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f  Op->p2 & OPFLAG_
1c3f0 53 45 45 4b 45 51 20 29 3b 0a 23 65 6e 64 69 66  SEEKEQ );.#endif
1c400 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  .  sqlite3BtreeC
1c410 75 72 73 6f 72 48 69 6e 74 46 6c 61 67 73 28 70  ursorHintFlags(p
1c420 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  Cur->uc.pCursor,
1c430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c450 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c  (pOp->p5 & (OPFL
1c460 41 47 5f 42 55 4c 4b 43 53 52 7c 4f 50 46 4c 41  AG_BULKCSR|OPFLA
1c470 47 5f 53 45 45 4b 45 51 29 29 29 3b 0a 20 20 69  G_SEEKEQ)));.  i
1c480 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
1c490 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1c4a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1c4b0 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65  Opcode: OpenEphe
1c4c0 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34  meral P1 P2 * P4
1c4d0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
1c4e0 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a   nColumn=P2.**.*
1c4f0 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72  * Open a new cur
1c500 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e  sor P1 to a tran
1c510 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20  sient table..** 
1c520 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c  The cursor is al
1c530 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64  ways opened read
1c540 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a  /write even if .
1c550 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
1c560 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c  base is read-onl
1c570 79 2e 20 20 54 68 65 20 65 70 68 65 6d 65 72 61  y.  The ephemera
1c580 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65  l.** table is de
1c590 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  leted automatica
1c5a0 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75 72  lly when the cur
1c5b0 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a  sor is closed..*
1c5c0 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e  *.** P2 is the n
1c5d0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1c5e0 20 69 6e 20 74 68 65 20 65 70 68 65 6d 65 72 61   in the ephemera
1c5f0 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  l table..** The 
1c600 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f  cursor points to
1c610 20 61 20 42 54 72 65 65 20 74 61 62 6c 65 20 69   a BTree table i
1c620 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61  f P4==0 and to a
1c630 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20   BTree index.** 
1c640 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e 20  if P4 is not 0. 
1c650 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
1c660 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  LL, it points to
1c670 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
1c680 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66  ture.** that def
1c690 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20  ines the format 
1c6a0 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69  of keys in the i
1c6b0 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ndex..**.** The 
1c6c0 50 35 20 70 61 72 61 6d 65 74 65 72 20 63 61 6e  P5 parameter can
1c6d0 20 62 65 20 61 20 6d 61 73 6b 20 6f 66 20 74 68   be a mask of th
1c6e0 65 20 42 54 52 45 45 5f 2a 20 66 6c 61 67 73 20  e BTREE_* flags 
1c6f0 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e 20 62 74  defined.** in bt
1c700 72 65 65 2e 68 2e 20 20 54 68 65 73 65 20 66 6c  ree.h.  These fl
1c710 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61 73 70 65  ags control aspe
1c720 63 74 73 20 6f 66 20 74 68 65 20 6f 70 65 72 61  cts of the opera
1c730 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62  tion of.** the b
1c740 74 72 65 65 2e 20 20 54 68 65 20 42 54 52 45 45  tree.  The BTREE
1c750 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e  _OMIT_JOURNAL an
1c760 64 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 66  d BTREE_SINGLE f
1c770 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61 64 64 65  lags are.** adde
1c780 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  d automatically.
1c790 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
1c7a0 70 65 6e 41 75 74 6f 69 6e 64 65 78 20 50 31 20  penAutoindex P1 
1c7b0 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
1c7c0 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50  opsis: nColumn=P
1c7d0 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  2.**.** This opc
1c7e0 6f 64 65 20 77 6f 72 6b 73 20 74 68 65 20 73 61  ode works the sa
1c7f0 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68  me as OP_OpenEph
1c800 65 6d 65 72 61 6c 2e 20 20 49 74 20 68 61 73 20  emeral.  It has 
1c810 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 6e  a.** different n
1c820 61 6d 65 20 74 6f 20 64 69 73 74 69 6e 67 75 69  ame to distingui
1c830 73 68 20 69 74 73 20 75 73 65 2e 20 20 54 61 62  sh its use.  Tab
1c840 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  les created usin
1c850 67 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f 70 63  g.** by this opc
1c860 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64  ode will be used
1c870 20 66 6f 72 20 61 75 74 6f 6d 61 74 69 63 61 6c   for automatical
1c880 6c 79 20 63 72 65 61 74 65 64 20 74 72 61 6e 73  ly created trans
1c890 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20  ient.** indices 
1c8a0 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73  in joins..*/.cas
1c8b0 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64  e OP_OpenAutoind
1c8c0 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ex: .case OP_Ope
1c8d0 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20  nEphemeral: {.  
1c8e0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1c8f0 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
1c900 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74 69 63 20  Info;..  static 
1c910 63 6f 6e 73 74 20 69 6e 74 20 76 66 73 46 6c 61  const int vfsFla
1c920 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49  gs = .      SQLI
1c930 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54  TE_OPEN_READWRIT
1c940 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1c950 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20  _OPEN_CREATE |. 
1c960 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1c970 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20  _EXCLUSIVE |.   
1c980 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44     SQLITE_OPEN_D
1c990 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20  ELETEONCLOSE |. 
1c9a0 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1c9b0 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 20  _TRANSIENT_DB;. 
1c9c0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1c9d0 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >=0 );.  assert(
1c9e0 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20   pOp->p2>=0 );. 
1c9f0 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
1ca00 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1ca10 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 43  , pOp->p2, -1, C
1ca20 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a 20  URTYPE_BTREE);. 
1ca30 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
1ca40 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
1ca50 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
1ca60 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65 72 61   pCx->isEphemera
1ca70 6c 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71  l = 1;.  rc = sq
1ca80 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28 64  lite3BtreeOpen(d
1ca90 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c 20  b->pVfs, 0, db, 
1caa0 26 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20 20 20  &pCx->pBt, .    
1cab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cac0 20 20 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a      BTREE_OMIT_J
1cad0 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53  OURNAL | BTREE_S
1cae0 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c  INGLE | pOp->p5,
1caf0 20 76 66 73 46 6c 61 67 73 29 3b 0a 20 20 69 66   vfsFlags);.  if
1cb00 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1cb10 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
1cb20 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61  te3BtreeBeginTra
1cb30 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b  ns(pCx->pBt, 1);
1cb40 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53  .  }.  if( rc==S
1cb50 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1cb60 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e  /* If a transien
1cb70 74 20 69 6e 64 65 78 20 69 73 20 72 65 71 75 69  t index is requi
1cb80 72 65 64 2c 20 63 72 65 61 74 65 20 69 74 20 62  red, create it b
1cb90 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a  y calling.    **
1cba0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
1cbb0 61 74 65 54 61 62 6c 65 28 29 20 77 69 74 68 20  ateTable() with 
1cbc0 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45  the BTREE_BLOBKE
1cbd0 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20  Y flag before.  
1cbe0 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e    ** opening it.
1cbf0 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20   If a transient 
1cc00 74 61 62 6c 65 20 69 73 20 72 65 71 75 69 72 65  table is require
1cc10 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a  d, just use the.
1cc20 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63      ** automatic
1cc30 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61 62  ally created tab
1cc40 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67  le with root-pag
1cc50 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54  e 1 (an BLOB_INT
1cc60 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20  KEY table)..    
1cc70 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 4b 65 79  */.    if( (pKey
1cc80 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
1cc90 4b 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a 20  KeyInfo)!=0 ){. 
1cca0 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20       int pgno;. 
1ccb0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1ccc0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59  ->p4type==P4_KEY
1ccd0 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63  INFO );.      rc
1cce0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1ccf0 72 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e  reateTable(pCx->
1cd00 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45  pBt, &pgno, BTRE
1cd10 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d  E_BLOBKEY | pOp-
1cd20 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 69 66 28  >p5); .      if(
1cd30 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1cd40 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
1cd50 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52  ( pgno==MASTER_R
1cd60 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20  OOT+1 );.       
1cd70 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1cd80 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20  o->db==db );.   
1cd90 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65       assert( pKe
1cda0 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28  yInfo->enc==ENC(
1cdb0 64 62 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70  db) );.        p
1cdc0 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  Cx->pKeyInfo = p
1cdd0 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20  KeyInfo;.       
1cde0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1cdf0 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42  eeCursor(pCx->pB
1ce00 74 2c 20 70 67 6e 6f 2c 20 42 54 52 45 45 5f 57  t, pgno, BTREE_W
1ce10 52 43 53 52 2c 0a 20 20 20 20 20 20 20 20 20 20  RCSR,.          
1ce20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce30 20 20 20 20 20 20 70 4b 65 79 49 6e 66 6f 2c 20        pKeyInfo, 
1ce40 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  pCx->uc.pCursor)
1ce50 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1ce60 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30  pCx->isTable = 0
1ce70 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
1ce80 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1ce90 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e  treeCursor(pCx->
1cea0 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54  pBt, MASTER_ROOT
1ceb0 2c 20 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20  , BTREE_WRCSR,. 
1cec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ced0 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20               0, 
1cee0 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  pCx->uc.pCursor)
1cef0 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54  ;.      pCx->isT
1cf00 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a  able = 1;.    }.
1cf10 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67    }.  if( rc ) g
1cf20 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1cf30 5f 65 72 72 6f 72 3b 0a 20 20 70 43 78 2d 3e 69  _error;.  pCx->i
1cf40 73 4f 72 64 65 72 65 64 20 3d 20 28 70 4f 70 2d  sOrdered = (pOp-
1cf50 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44  >p5!=BTREE_UNORD
1cf60 45 52 45 44 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ERED);.  break;.
1cf70 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  }../* Opcode: So
1cf80 72 74 65 72 4f 70 65 6e 20 50 31 20 50 32 20 50  rterOpen P1 P2 P
1cf90 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69  3 P4 *.**.** Thi
1cfa0 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c  s opcode works l
1cfb0 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ike OP_OpenEphem
1cfc0 65 72 61 6c 20 65 78 63 65 70 74 20 74 68 61 74  eral except that
1cfd0 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74   it opens.** a t
1cfe0 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 74  ransient index t
1cff0 68 61 74 20 69 73 20 73 70 65 63 69 66 69 63 61  hat is specifica
1d000 6c 6c 79 20 64 65 73 69 67 6e 65 64 20 74 6f 20  lly designed to 
1d010 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61  sort large.** ta
1d020 62 6c 65 73 20 75 73 69 6e 67 20 61 6e 20 65 78  bles using an ex
1d030 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72  ternal merge-sor
1d040 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a  t algorithm..**.
1d050 2a 2a 20 49 66 20 61 72 67 75 6d 65 6e 74 20 50  ** If argument P
1d060 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  3 is non-zero, t
1d070 68 65 6e 20 69 74 20 69 6e 64 69 63 61 74 65 73  hen it indicates
1d080 20 74 68 61 74 20 74 68 65 20 73 6f 72 74 65 72   that the sorter
1d090 20 6d 61 79 0a 2a 2a 20 61 73 73 75 6d 65 20 74   may.** assume t
1d0a0 68 61 74 20 61 20 73 74 61 62 6c 65 20 73 6f 72  hat a stable sor
1d0b0 74 20 63 6f 6e 73 69 64 65 72 69 6e 67 20 74 68  t considering th
1d0c0 65 20 66 69 72 73 74 20 50 33 20 66 69 65 6c 64  e first P3 field
1d0d0 73 20 6f 66 20 65 61 63 68 0a 2a 2a 20 6b 65 79  s of each.** key
1d0e0 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 20 74   is sufficient t
1d0f0 6f 20 70 72 6f 64 75 63 65 20 74 68 65 20 72 65  o produce the re
1d100 71 75 69 72 65 64 20 72 65 73 75 6c 74 73 2e 0a  quired results..
1d110 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
1d120 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43  rOpen: {.  VdbeC
1d130 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61  ursor *pCx;..  a
1d140 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1d150 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1d160 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70  Op->p2>=0 );.  p
1d170 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
1d180 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
1d190 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52  pOp->p2, -1, CUR
1d1a0 54 59 50 45 5f 53 4f 52 54 45 52 29 3b 0a 20 20  TYPE_SORTER);.  
1d1b0 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74  if( pCx==0 ) got
1d1c0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d  o no_mem;.  pCx-
1d1d0 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d  >pKeyInfo = pOp-
1d1e0 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
1d1f0 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65  assert( pCx->pKe
1d200 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b  yInfo->db==db );
1d210 0a 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e  .  assert( pCx->
1d220 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45  pKeyInfo->enc==E
1d230 4e 43 28 64 62 29 20 29 3b 0a 20 20 72 63 20 3d  NC(db) );.  rc =
1d240 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
1d250 65 72 49 6e 69 74 28 64 62 2c 20 70 4f 70 2d 3e  erInit(db, pOp->
1d260 70 33 2c 20 70 43 78 29 3b 0a 20 20 69 66 28 20  p3, pCx);.  if( 
1d270 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
1d280 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1d290 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1d2a0 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 54 65 73  ode: SequenceTes
1d2b0 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
1d2c0 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 28 20 63   Synopsis: if( c
1d2d0 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 20  ursor[P1].ctr++ 
1d2e0 29 20 70 63 20 3d 20 50 32 0a 2a 2a 0a 2a 2a 20  ) pc = P2.**.** 
1d2f0 50 31 20 69 73 20 61 20 73 6f 72 74 65 72 20 63  P1 is a sorter c
1d300 75 72 73 6f 72 2e 20 49 66 20 74 68 65 20 73 65  ursor. If the se
1d310 71 75 65 6e 63 65 20 63 6f 75 6e 74 65 72 20 69  quence counter i
1d320 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f  s currently zero
1d330 2c 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e  , jump.** to P2.
1d340 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   Regardless of w
1d350 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
1d360 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c  e jump is taken,
1d370 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 65 0a 2a   increment the.*
1d380 2a 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 76  * the sequence v
1d390 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  alue..*/.case OP
1d3a0 5f 53 65 71 75 65 6e 63 65 54 65 73 74 3a 20 7b  _SequenceTest: {
1d3b0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1d3c0 43 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  C;.  assert( pOp
1d3d0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1d3e0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1d3f0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1d400 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1d410 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
1d420 29 20 29 3b 0a 20 20 69 66 28 20 28 70 43 2d 3e  ) );.  if( (pC->
1d430 73 65 71 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20 29  seqCount++)==0 )
1d440 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  {.    goto jump_
1d450 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
1d460 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1d470 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20  : OpenPseudo P1 
1d480 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
1d490 6f 70 73 69 73 3a 20 50 33 20 63 6f 6c 75 6d 6e  opsis: P3 column
1d4a0 73 20 69 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  s in r[P2].**.**
1d4b0 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73   Open a new curs
1d4c0 6f 72 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74  or that points t
1d4d0 6f 20 61 20 66 61 6b 65 20 74 61 62 6c 65 20 74  o a fake table t
1d4e0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73  hat contains a s
1d4f0 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20  ingle.** row of 
1d500 64 61 74 61 2e 20 20 54 68 65 20 63 6f 6e 74 65  data.  The conte
1d510 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e 65 20 72  nt of that one r
1d520 6f 77 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e  ow is the conten
1d530 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72  t of memory.** r
1d540 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 6e 20  egister P2.  In 
1d550 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 63 75 72  other words, cur
1d560 73 6f 72 20 50 31 20 62 65 63 6f 6d 65 73 20 61  sor P1 becomes a
1d570 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
1d580 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e  .** MEM_Blob con
1d590 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69  tent contained i
1d5a0 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
1d5b0 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61  *.** A pseudo-ta
1d5c0 62 6c 65 20 63 72 65 61 74 65 64 20 62 79 20 74  ble created by t
1d5d0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
1d5e0 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e  ed to hold a sin
1d5f0 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75  gle.** row outpu
1d600 74 20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65  t from the sorte
1d610 72 20 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f  r so that the ro
1d620 77 20 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f  w can be decompo
1d630 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69  sed into.** indi
1d640 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75  vidual columns u
1d650 73 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75  sing the OP_Colu
1d660 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20  mn opcode.  The 
1d670 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
1d680 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79 20  .** is the only 
1d690 63 75 72 73 6f 72 20 6f 70 63 6f 64 65 20 74 68  cursor opcode th
1d6a0 61 74 20 77 6f 72 6b 73 20 77 69 74 68 20 61 20  at works with a 
1d6b0 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a  pseudo-table..**
1d6c0 0a 2a 2a 20 50 33 20 69 73 20 74 68 65 20 6e 75  .** P3 is the nu
1d6d0 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
1d6e0 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20 74 68  n the records th
1d6f0 61 74 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65  at will be store
1d700 64 20 62 79 0a 2a 2a 20 74 68 65 20 70 73 65 75  d by.** the pseu
1d710 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  do-table..*/.cas
1d720 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a  e OP_OpenPseudo:
1d730 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
1d740 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pCx;..  assert(
1d750 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20   pOp->p1>=0 );. 
1d760 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
1d770 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61  >=0 );.  pCx = a
1d780 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
1d790 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
1d7a0 33 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 50  3, -1, CURTYPE_P
1d7b0 53 45 55 44 4f 29 3b 0a 20 20 69 66 28 20 70 43  SEUDO);.  if( pC
1d7c0 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  x==0 ) goto no_m
1d7d0 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52  em;.  pCx->nullR
1d7e0 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 75  ow = 1;.  pCx->u
1d7f0 63 2e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  c.pseudoTableReg
1d800 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43   = pOp->p2;.  pC
1d810 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a  x->isTable = 1;.
1d820 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1d830 35 3d 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b  5==0 );.  break;
1d840 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
1d850 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  lose P1 * * * *.
1d860 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75  **.** Close a cu
1d870 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20  rsor previously 
1d880 6f 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49  opened as P1.  I
1d890 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63  f P1 is not.** c
1d8a0 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74  urrently open, t
1d8b0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1d8c0 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63  is a no-op..*/.c
1d8d0 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a  ase OP_Close: {.
1d8e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1d8f0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1d900 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1d910 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43  sqlite3VdbeFreeC
1d920 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73  ursor(p, p->apCs
1d930 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70  r[pOp->p1]);.  p
1d940 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1d950 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
1d960 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
1d970 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53  ENABLE_COLUMN_US
1d980 45 44 5f 4d 41 53 4b 0a 2f 2a 20 4f 70 63 6f 64  ED_MASK./* Opcod
1d990 65 3a 20 43 6f 6c 75 6d 6e 73 55 73 65 64 20 50  e: ColumnsUsed P
1d9a0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
1d9b0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 28 77 68   This opcode (wh
1d9c0 69 63 68 20 6f 6e 6c 79 20 65 78 69 73 74 73 20  ich only exists 
1d9d0 69 66 20 53 51 4c 69 74 65 20 77 61 73 20 63 6f  if SQLite was co
1d9e0 6d 70 69 6c 65 64 20 77 69 74 68 0a 2a 2a 20 53  mpiled with.** S
1d9f0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c  QLITE_ENABLE_COL
1da00 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 29 20 69  UMN_USED_MASK) i
1da10 64 65 6e 74 69 66 69 65 73 20 77 68 69 63 68 20  dentifies which 
1da20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 0a 2a  columns of the.*
1da30 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
1da40 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 20 61   for cursor P1 a
1da50 72 65 20 75 73 65 64 2e 20 20 50 34 20 69 73 20  re used.  P4 is 
1da60 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
1da70 0a 2a 2a 20 28 50 34 5f 49 4e 54 36 34 29 20 69  .** (P4_INT64) i
1da80 6e 20 77 68 69 63 68 20 74 68 65 20 66 69 72 73  n which the firs
1da90 74 20 36 33 20 62 69 74 73 20 61 72 65 20 6f 6e  t 63 bits are on
1daa0 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68  e for each of th
1dab0 65 0a 2a 2a 20 66 69 72 73 74 20 36 33 20 63 6f  e.** first 63 co
1dac0 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62  lumns of the tab
1dad0 6c 65 20 6f 72 20 69 6e 64 65 78 20 74 68 61 74  le or index that
1dae0 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20 75 73   are actually us
1daf0 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 63 75 72  ed.** by the cur
1db00 73 6f 72 2e 20 20 54 68 65 20 68 69 67 68 2d 6f  sor.  The high-o
1db10 72 64 65 72 20 62 69 74 20 69 73 20 73 65 74 20  rder bit is set 
1db20 69 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 61 66  if any column af
1db30 74 65 72 0a 2a 2a 20 74 68 65 20 36 34 74 68 20  ter.** the 64th 
1db40 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 63 61 73 65  is used..*/.case
1db50 20 4f 50 5f 43 6f 6c 75 6d 6e 73 55 73 65 64 3a   OP_ColumnsUsed:
1db60 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
1db70 2a 70 43 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  *pC;.  pC = p->a
1db80 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1db90 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
1dba0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
1dbb0 54 52 45 45 20 29 3b 0a 20 20 70 43 2d 3e 6d 61  TREE );.  pC->ma
1dbc0 73 6b 55 73 65 64 20 3d 20 2a 28 75 36 34 2a 29  skUsed = *(u64*)
1dbd0 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20  pOp->p4.pI64;.  
1dbe0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
1dbf0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1dc00 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  GE P1 P2 P3 P4 *
1dc10 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1dc20 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1dc30 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1dc40 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1dc50 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1dc60 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1dc70 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1dc80 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1dc90 74 65 72 20 50 33 20 61 73 20 74 68 65 20 6b 65  ter P3 as the ke
1dca0 79 2e 20 20 49 66 20 63 75 72 73 6f 72 20 50 31  y.  If cursor P1
1dcb0 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1dcc0 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1dcd0 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1dce0 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1dcf0 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1dd00 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1dd10 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1dd20 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1dd30 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1dd40 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
1dd50 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1dd60 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74  smallest entry t
1dd70 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74  hat .** is great
1dd80 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
1dd90 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
1dda0 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1ddb0 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67  no records .** g
1ddc0 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
1ddd0 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
1dde0 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1ddf0 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1de00 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P2..**.** If th
1de10 65 20 63 75 72 73 6f 72 20 50 31 20 77 61 73 20  e cursor P1 was 
1de20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65  opened using the
1de30 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 66   OPFLAG_SEEKEQ f
1de40 6c 61 67 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a  lag, then this.*
1de50 2a 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c  * opcode will al
1de60 77 61 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72  ways land on a r
1de70 65 63 6f 72 64 20 74 68 61 74 20 65 71 75 61 6c  ecord that equal
1de80 6c 79 20 65 71 75 61 6c 73 20 74 68 65 20 6b 65  ly equals the ke
1de90 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75  y, or.** else ju
1dea0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
1deb0 6f 20 50 32 2e 20 20 57 68 65 6e 20 74 68 65 20  o P2.  When the 
1dec0 63 75 72 73 6f 72 20 69 73 20 4f 50 46 4c 41 47  cursor is OPFLAG
1ded0 5f 53 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a  _SEEKEQ, this.**
1dee0 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20   opcode must be 
1def0 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 49  followed by an I
1df00 64 78 4c 45 20 6f 70 63 6f 64 65 20 77 69 74 68  dxLE opcode with
1df10 20 74 68 65 20 73 61 6d 65 20 61 72 67 75 6d 65   the same argume
1df20 6e 74 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78 4c  nts..** The IdxL
1df30 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  E opcode will be
1df40 20 73 6b 69 70 70 65 64 20 69 66 20 74 68 69 73   skipped if this
1df50 20 6f 70 63 6f 64 65 20 73 75 63 63 65 65 64 73   opcode succeeds
1df60 2c 20 62 75 74 20 74 68 65 0a 2a 2a 20 49 64 78  , but the.** Idx
1df70 4c 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62  LE opcode will b
1df80 65 20 75 73 65 64 20 6f 6e 20 73 75 62 73 65 71  e used on subseq
1df90 75 65 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61 74  uent loop iterat
1dfa0 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ions..**.** This
1dfb0 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
1dfc0 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
1dfd0 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
1dfe0 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a  forward order,.*
1dff0 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  * from the begin
1e000 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20  ning toward the 
1e010 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  end.  In other w
1e020 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
1e030 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
1e040 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e  d to use Next, n
1e050 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53  ot Prev..**.** S
1e060 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1e070 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74  NotFound, SeekLt
1e080 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65  , SeekGt, SeekLe
1e090 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
1e0a0 65 65 6b 47 54 20 50 31 20 50 32 20 50 33 20 50  eekGT P1 P2 P3 P
1e0b0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1e0c0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1e0d0 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1e0e0 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1e0f0 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1e100 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1e110 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1e120 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1e130 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
1e140 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
1e150 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1e160 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1e170 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1e180 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1e190 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1e1a0 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1e1b0 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1e1c0 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1e1d0 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1e1e0 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
1e1f0 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1e200 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74  smallest entry t
1e210 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74  hat .** is great
1e220 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  er than the key 
1e230 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
1e240 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67  are no records g
1e250 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20  reater than .** 
1e260 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1e270 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1e280 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1e290 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
1e2a0 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1e2b0 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
1e2c0 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f  ove in forward o
1e2d0 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
1e2e0 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61  e beginning towa
1e2f0 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20  rd the end.  In 
1e300 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
1e310 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
1e320 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
1e330 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a  Next, not Prev..
1e340 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1e350 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1e360 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c   SeekLt, SeekGe,
1e370 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekLe.*/./* Op
1e380 63 6f 64 65 3a 20 53 65 65 6b 4c 54 20 50 31 20  code: SeekLT P1 
1e390 50 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a 20 53  P2 P3 P4 * .** S
1e3a0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1e3b0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
1e3c0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1e3d0 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1e3e0 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1e3f0 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1e400 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1e410 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1e420 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
1e430 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1e440 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
1e450 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
1e460 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
1e470 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
1e480 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
1e490 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
1e4a0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1e4b0 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
1e4c0 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
1e4d0 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
1e4e0 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20   to the largest 
1e4f0 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
1e500 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  s less than the 
1e510 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1e520 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1e530 64 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a  ds less than .**
1e540 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
1e550 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
1e560 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
1e570 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1e580 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
1e590 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
1e5a0 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20  move in reverse 
1e5b0 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
1e5c0 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68  he end toward th
1e5d0 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e  e beginning.  In
1e5e0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
1e5f0 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
1e600 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
1e610 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e   Prev, not Next.
1e620 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1e630 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1e640 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65  , SeekGt, SeekGe
1e650 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , SeekLe.*/./* O
1e660 70 63 6f 64 65 3a 20 53 65 65 6b 4c 45 20 50 31  pcode: SeekLE P1
1e670 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1e680 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1e690 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
1e6a0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1e6b0 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1e6c0 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1e6d0 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1e6e0 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1e6f0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1e700 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
1e710 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1e720 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
1e730 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
1e740 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
1e750 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
1e760 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
1e770 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
1e780 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1e790 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
1e7a0 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
1e7b0 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
1e7c0 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  to the largest e
1e7d0 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
1e7e0 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
1e7f0 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
1e800 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1e810 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a  re no records .*
1e820 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  * less than or e
1e830 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
1e840 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1e850 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1e860 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
1e870 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
1e880 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
1e890 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72  red to move in r
1e8a0 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a  everse order,.**
1e8b0 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f   from the end to
1e8c0 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69  ward the beginni
1e8d0 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ng.  In other wo
1e8e0 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
1e8f0 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
1e900 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f   to use Prev, no
1e910 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  t Next..**.** If
1e920 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 77   the cursor P1 w
1e930 61 73 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20  as opened using 
1e940 74 68 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  the OPFLAG_SEEKE
1e950 51 20 66 6c 61 67 2c 20 74 68 65 6e 20 74 68 69  Q flag, then thi
1e960 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 77 69 6c 6c  s.** opcode will
1e970 20 61 6c 77 61 79 73 20 6c 61 6e 64 20 6f 6e 20   always land on 
1e980 61 20 72 65 63 6f 72 64 20 74 68 61 74 20 65 71  a record that eq
1e990 75 61 6c 6c 79 20 65 71 75 61 6c 73 20 74 68 65  ually equals the
1e9a0 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65   key, or.** else
1e9b0 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
1e9c0 79 20 74 6f 20 50 32 2e 20 20 57 68 65 6e 20 74  y to P2.  When t
1e9d0 68 65 20 63 75 72 73 6f 72 20 69 73 20 4f 50 46  he cursor is OPF
1e9e0 4c 41 47 5f 53 45 45 4b 45 51 2c 20 74 68 69 73  LAG_SEEKEQ, this
1e9f0 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d 75 73 74 20  .** opcode must 
1ea00 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  be followed by a
1ea10 6e 20 49 64 78 47 45 20 6f 70 63 6f 64 65 20 77  n IdxGE opcode w
1ea20 69 74 68 20 74 68 65 20 73 61 6d 65 20 61 72 67  ith the same arg
1ea30 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54 68 65 20 49  uments..** The I
1ea40 64 78 47 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c  dxGE opcode will
1ea50 20 62 65 20 73 6b 69 70 70 65 64 20 69 66 20 74   be skipped if t
1ea60 68 69 73 20 6f 70 63 6f 64 65 20 73 75 63 63 65  his opcode succe
1ea70 65 64 73 2c 20 62 75 74 20 74 68 65 0a 2a 2a 20  eds, but the.** 
1ea80 49 64 78 47 45 20 6f 70 63 6f 64 65 20 77 69 6c  IdxGE opcode wil
1ea90 6c 20 62 65 20 75 73 65 64 20 6f 6e 20 73 75 62  l be used on sub
1eaa0 73 65 71 75 65 6e 74 20 6c 6f 6f 70 20 69 74 65  sequent loop ite
1eab0 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53  rations..**.** S
1eac0 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1ead0 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74  NotFound, SeekGt
1eae0 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74  , SeekGe, SeekLt
1eaf0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
1eb00 4c 54 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  LT:         /* j
1eb10 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1eb20 20 4f 50 5f 53 65 65 6b 4c 45 3a 20 20 20 20 20   OP_SeekLE:     
1eb30 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1eb40 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b   */.case OP_Seek
1eb50 47 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  GE:         /* j
1eb60 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1eb70 20 4f 50 5f 53 65 65 6b 47 54 3a 20 7b 20 20 20   OP_SeekGT: {   
1eb80 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1eb90 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20   */.  int res;  
1eba0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70           /* Comp
1ebb0 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 2a 2f  arison result */
1ebc0 0a 20 20 69 6e 74 20 6f 63 3b 20 20 20 20 20 20  .  int oc;      
1ebd0 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20        /* Opcode 
1ebe0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
1ebf0 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 63  *pC;    /* The c
1ec00 75 72 73 6f 72 20 74 6f 20 73 65 65 6b 20 2a 2f  ursor to seek */
1ec10 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
1ec20 64 20 72 3b 20 20 2f 2a 20 54 68 65 20 6b 65 79  d r;  /* The key
1ec30 20 74 6f 20 73 65 65 6b 20 66 6f 72 20 2a 2f 0a   to seek for */.
1ec40 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20    int nField;   
1ec50 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1ec60 66 20 63 6f 6c 75 6d 6e 73 20 6f 72 20 66 69 65  f columns or fie
1ec70 6c 64 73 20 69 6e 20 74 68 65 20 6b 65 79 20 2a  lds in the key *
1ec80 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20  /.  i64 iKey;   
1ec90 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 6f         /* The ro
1eca0 77 69 64 20 77 65 20 61 72 65 20 74 6f 20 73 65  wid we are to se
1ecb0 65 6b 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 65  ek to */.  int e
1ecc0 71 4f 6e 6c 79 3b 20 20 20 20 20 20 20 20 2f 2a  qOnly;        /*
1ecd0 20 4f 6e 6c 79 20 69 6e 74 65 72 65 73 74 65 64   Only interested
1ece0 20 69 6e 20 3d 3d 20 72 65 73 75 6c 74 73 20 2a   in == results *
1ecf0 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  /..  assert( pOp
1ed00 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1ed10 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1ed20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1ed30 70 32 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20  p2!=0 );.  pC = 
1ed40 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1ed50 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1ed60 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1ed70 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
1ed80 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
1ed90 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1eda0 4c 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b  LE == OP_SeekLT+
1edb0 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  1 );.  assert( O
1edc0 50 5f 53 65 65 6b 47 45 20 3d 3d 20 4f 50 5f 53  P_SeekGE == OP_S
1edd0 65 65 6b 4c 54 2b 32 20 29 3b 0a 20 20 61 73 73  eekLT+2 );.  ass
1ede0 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 20 3d  ert( OP_SeekGT =
1edf0 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 33 20 29 3b  = OP_SeekLT+3 );
1ee00 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
1ee10 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73  sOrdered );.  as
1ee20 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
1ee30 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 6f 63 20  rsor!=0 );.  oc 
1ee40 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20  = pOp->opcode;. 
1ee50 20 65 71 4f 6e 6c 79 20 3d 20 30 3b 0a 20 20 70   eqOnly = 0;.  p
1ee60 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
1ee70 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1ee80 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
1ee90 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
1eea0 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 43  #endif..  if( pC
1eeb0 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20  ->isTable ){.   
1eec0 20 2f 2a 20 54 68 65 20 42 54 52 45 45 5f 53 45   /* The BTREE_SE
1eed0 45 4b 5f 45 51 20 66 6c 61 67 20 69 73 20 6f 6e  EK_EQ flag is on
1eee0 6c 79 20 73 65 74 20 6f 6e 20 69 6e 64 65 78 20  ly set on index 
1eef0 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 20 20 61  cursors */.    a
1ef00 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
1ef10 72 65 65 43 75 72 73 6f 72 48 61 73 48 69 6e 74  reeCursorHasHint
1ef20 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
1ef30 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 29 3d   BTREE_SEEK_EQ)=
1ef40 3d 30 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 54 68  =0 );..    /* Th
1ef50 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e  e input value in
1ef60 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20   P3 might be of 
1ef70 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65  any type: intege
1ef80 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c  r, real, string,
1ef90 0a 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72  .    ** blob, or
1efa0 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e   NULL.  But it n
1efb0 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69 6e  eeds to be an in
1efc0 74 65 67 65 72 20 62 65 66 6f 72 65 20 77 65 20  teger before we 
1efd0 63 61 6e 20 64 6f 0a 20 20 20 20 2a 2a 20 74 68  can do.    ** th
1efe0 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f 6e 76 65  e seek, so conve
1eff0 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20 70 49  rt it. */.    pI
1f000 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
1f010 70 33 5d 3b 0a 20 20 20 20 69 66 28 20 28 70 49  p3];.    if( (pI
1f020 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  n3->flags & (MEM
1f030 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45  _Int|MEM_Real|ME
1f040 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72  M_Str))==MEM_Str
1f050 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 4e   ){.      applyN
1f060 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
1f070 49 6e 33 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20  In3, 0);.    }. 
1f080 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65     iKey = sqlite
1f090 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
1f0a0 6e 33 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20  n3);..    /* If 
1f0b0 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75  the P3 value cou
1f0c0 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  ld not be conver
1f0d0 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65  ted into an inte
1f0e0 67 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20  ger without.    
1f0f0 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ** loss of infor
1f100 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65  mation, then spe
1f110 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20  cial processing 
1f120 69 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a  is required... *
1f130 2f 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d  /.    if( (pIn3-
1f140 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
1f150 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66  )==0 ){.      if
1f160 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
1f170 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b   MEM_Real)==0 ){
1f180 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  .        /* If t
1f190 68 65 20 50 33 20 76 61 6c 75 65 20 63 61 6e 6e  he P3 value cann
1f1a0 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
1f1b0 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66  into any kind of
1f1c0 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20   a number,.     
1f1d0 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 73     ** then the s
1f1e0 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73 69  eek is not possi
1f1f0 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20  ble, so jump to 
1f200 50 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 56 64  P2 */.        Vd
1f210 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c  beBranchTaken(1,
1f220 32 29 3b 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  2); goto jump_to
1f230 5f 70 32 3b 0a 20 20 20 20 20 20 20 20 62 72 65  _p2;.        bre
1f240 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  ak;.      }..   
1f250 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70     /* If the app
1f260 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20  roximation iKey 
1f270 69 73 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74  is larger than t
1f280 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73  he actual real s
1f290 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74  earch.      ** t
1f2a0 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20  erm, substitute 
1f2b0 3e 3d 20 66 6f 72 20 3e 20 61 6e 64 20 3c 20 66  >= for > and < f
1f2c0 6f 72 20 3c 3d 2e 20 65 2e 67 2e 20 69 66 20 74  or <=. e.g. if t
1f2d0 68 65 20 73 65 61 72 63 68 20 74 65 72 6d 0a 20  he search term. 
1f2e0 20 20 20 20 20 2a 2a 20 69 73 20 34 2e 39 20 61       ** is 4.9 a
1f2f0 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72 20 61  nd the integer a
1f300 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 35 3a 0a  pproximation 5:.
1f310 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a        **.      *
1f320 2a 20 20 20 20 20 20 20 20 28 78 20 3e 20 20 34  *        (x >  4
1f330 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28 78  .9)    ->     (x
1f340 20 3e 3d 20 35 29 0a 20 20 20 20 20 20 2a 2a 20   >= 5).      ** 
1f350 20 20 20 20 20 20 20 28 78 20 3c 3d 20 34 2e 39         (x <= 4.9
1f360 29 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3c  )    ->     (x <
1f370 20 20 35 29 0a 20 20 20 20 20 20 2a 2f 0a 20 20    5).      */.  
1f380 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e      if( pIn3->u.
1f390 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29  r<(double)iKey )
1f3a0 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
1f3b0 28 20 4f 50 5f 53 65 65 6b 47 45 3d 3d 28 4f 50  ( OP_SeekGE==(OP
1f3c0 5f 53 65 65 6b 47 54 2d 31 29 20 29 3b 0a 20 20  _SeekGT-1) );.  
1f3d0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
1f3e0 5f 53 65 65 6b 4c 54 3d 3d 28 4f 50 5f 53 65 65  _SeekLT==(OP_See
1f3f0 6b 4c 45 2d 31 29 20 29 3b 0a 20 20 20 20 20 20  kLE-1) );.      
1f400 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65    assert( (OP_Se
1f410 65 6b 4c 45 20 26 20 30 78 30 30 30 31 29 3d 3d  ekLE & 0x0001)==
1f420 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30  (OP_SeekGT & 0x0
1f430 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  001) );.        
1f440 69 66 28 20 28 6f 63 20 26 20 30 78 30 30 30 31  if( (oc & 0x0001
1f450 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26 20  )==(OP_SeekGT & 
1f460 30 78 30 30 30 31 29 20 29 20 6f 63 2d 2d 3b 0a  0x0001) ) oc--;.
1f470 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
1f480 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69  * If the approxi
1f490 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 73  mation iKey is s
1f4a0 6d 61 6c 6c 65 72 20 74 68 61 6e 20 74 68 65 20  maller than the 
1f4b0 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72  actual real sear
1f4c0 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d  ch.      ** term
1f4d0 2c 20 73 75 62 73 74 69 74 75 74 65 20 3c 3d 20  , substitute <= 
1f4e0 66 6f 72 20 3c 20 61 6e 64 20 3e 20 66 6f 72 20  for < and > for 
1f4f0 3e 3d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 65 6c  >=.  */.      el
1f500 73 65 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72  se if( pIn3->u.r
1f510 3e 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b  >(double)iKey ){
1f520 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1f530 20 4f 50 5f 53 65 65 6b 4c 45 3d 3d 28 4f 50 5f   OP_SeekLE==(OP_
1f540 53 65 65 6b 4c 54 2b 31 29 20 29 3b 0a 20 20 20  SeekLT+1) );.   
1f550 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
1f560 53 65 65 6b 47 54 3d 3d 28 4f 50 5f 53 65 65 6b  SeekGT==(OP_Seek
1f570 47 45 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20  GE+1) );.       
1f580 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65   assert( (OP_See
1f590 6b 4c 54 20 26 20 30 78 30 30 30 31 29 3d 3d 28  kLT & 0x0001)==(
1f5a0 4f 50 5f 53 65 65 6b 47 45 20 26 20 30 78 30 30  OP_SeekGE & 0x00
1f5b0 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69  01) );.        i
1f5c0 66 28 20 28 6f 63 20 26 20 30 78 30 30 30 31 29  f( (oc & 0x0001)
1f5d0 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30  ==(OP_SeekLT & 0
1f5e0 78 30 30 30 31 29 20 29 20 6f 63 2b 2b 3b 0a 20  x0001) ) oc++;. 
1f5f0 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 0a 20 20       }.    } .  
1f600 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1f610 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
1f620 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  d(pC->uc.pCursor
1f630 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c 20  , 0, (u64)iKey, 
1f640 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43  0, &res);.    pC
1f650 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d  ->movetoTarget =
1f660 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64 20   iKey;  /* Used 
1f670 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a  by OP_Delete */.
1f680 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1f690 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
1f6a0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1f6b0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
1f6c0 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 46 6f  }else{.    /* Fo
1f6d0 72 20 61 20 63 75 72 73 6f 72 20 77 69 74 68 20  r a cursor with 
1f6e0 74 68 65 20 42 54 52 45 45 5f 53 45 45 4b 5f 45  the BTREE_SEEK_E
1f6f0 51 20 68 69 6e 74 2c 20 6f 6e 6c 79 20 74 68 65  Q hint, only the
1f700 20 4f 50 5f 53 65 65 6b 47 45 20 61 6e 64 0a 20   OP_SeekGE and. 
1f710 20 20 20 2a 2a 20 4f 50 5f 53 65 65 6b 4c 45 20     ** OP_SeekLE 
1f720 6f 70 63 6f 64 65 73 20 61 72 65 20 61 6c 6c 6f  opcodes are allo
1f730 77 65 64 2c 20 61 6e 64 20 74 68 65 73 65 20 6d  wed, and these m
1f740 75 73 74 20 62 65 20 69 6d 6d 65 64 69 61 74 65  ust be immediate
1f750 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a 20 20 20 20  ly followed.    
1f760 2a 2a 20 62 79 20 61 6e 20 4f 50 5f 49 64 78 47  ** by an OP_IdxG
1f770 54 20 6f 72 20 4f 50 5f 49 64 78 4c 54 20 6f 70  T or OP_IdxLT op
1f780 63 6f 64 65 2c 20 72 65 73 70 65 63 74 69 76 65  code, respective
1f790 6c 79 2c 20 77 69 74 68 20 74 68 65 20 73 61 6d  ly, with the sam
1f7a0 65 20 6b 65 79 2e 0a 20 20 20 20 2a 2f 0a 20 20  e key..    */.  
1f7b0 20 20 69 66 28 20 73 71 6c 69 74 65 33 42 74 72    if( sqlite3Btr
1f7c0 65 65 43 75 72 73 6f 72 48 61 73 48 69 6e 74 28  eeCursorHasHint(
1f7d0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
1f7e0 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 29 20 29  BTREE_SEEK_EQ) )
1f7f0 7b 0a 20 20 20 20 20 20 65 71 4f 6e 6c 79 20 3d  {.      eqOnly =
1f800 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   1;.      assert
1f810 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1f820 50 5f 53 65 65 6b 47 45 20 7c 7c 20 70 4f 70 2d  P_SeekGE || pOp-
1f830 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b  >opcode==OP_Seek
1f840 4c 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  LE );.      asse
1f850 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64  rt( pOp[1].opcod
1f860 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c 20 70  e==OP_IdxLT || p
1f870 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  Op[1].opcode==OP
1f880 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 20 20  _IdxGT );.      
1f890 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70  assert( pOp[1].p
1f8a0 31 3d 3d 70 4f 70 5b 30 5d 2e 70 31 20 29 3b 0a  1==pOp[0].p1 );.
1f8b0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
1f8c0 70 5b 31 5d 2e 70 32 3d 3d 70 4f 70 5b 30 5d 2e  p[1].p2==pOp[0].
1f8d0 70 32 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  p2 );.      asse
1f8e0 72 74 28 20 70 4f 70 5b 31 5d 2e 70 33 3d 3d 70  rt( pOp[1].p3==p
1f8f0 4f 70 5b 30 5d 2e 70 33 20 29 3b 0a 20 20 20 20  Op[0].p3 );.    
1f900 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
1f910 2e 70 34 2e 69 3d 3d 70 4f 70 5b 30 5d 2e 70 34  .p4.i==pOp[0].p4
1f920 2e 69 20 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  .i );.    }..   
1f930 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
1f940 34 2e 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28  4.i;.    assert(
1f950 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1f960 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 61 73  _INT32 );.    as
1f970 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 29  sert( nField>0 )
1f980 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f  ;.    r.pKeyInfo
1f990 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
1f9a0 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  .    r.nField = 
1f9b0 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20  (u16)nField;..  
1f9c0 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c 69    /* The next li
1f9d0 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70 75  ne of code compu
1f9e0 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c 20  tes as follows, 
1f9f0 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20 20 20  only faster:.   
1fa00 20 2a 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50   **   if( oc==OP
1fa10 5f 53 65 65 6b 47 54 20 7c 7c 20 6f 63 3d 3d 4f  _SeekGT || oc==O
1fa20 50 5f 53 65 65 6b 4c 45 20 29 7b 0a 20 20 20 20  P_SeekLE ){.    
1fa30 2a 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c 74  **     r.default
1fa40 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 20 20 2a 2a  _rc = -1;.    **
1fa50 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2a 2a     }else{.    **
1fa60 20 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72       r.default_r
1fa70 63 20 3d 20 2b 31 3b 0a 20 20 20 20 2a 2a 20 20  c = +1;.    **  
1fa80 20 7d 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72 2e   }.    */.    r.
1fa90 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 28 28 31  default_rc = ((1
1faa0 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65 6b   & (oc - OP_Seek
1fab0 4c 54 29 29 20 3f 20 2d 31 20 3a 20 2b 31 29 3b  LT)) ? -1 : +1);
1fac0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21  .    assert( oc!
1fad0 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 72 2e  =OP_SeekGT || r.
1fae0 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29  default_rc==-1 )
1faf0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63  ;.    assert( oc
1fb00 21 3d 4f 50 5f 53 65 65 6b 4c 45 20 7c 7c 20 72  !=OP_SeekLE || r
1fb10 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20  .default_rc==-1 
1fb20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  );.    assert( o
1fb30 63 21 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20  c!=OP_SeekGE || 
1fb40 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31  r.default_rc==+1
1fb50 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1fb60 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c  oc!=OP_SeekLT ||
1fb70 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b   r.default_rc==+
1fb80 31 20 29 3b 0a 0a 20 20 20 20 72 2e 61 4d 65 6d  1 );..    r.aMem
1fb90 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
1fba0 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ];.#ifdef SQLITE
1fbb0 5f 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74  _DEBUG.    { int
1fbc0 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72   i; for(i=0; i<r
1fbd0 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73  .nField; i++) as
1fbe0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
1fbf0 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20  (&r.aMem[i]) ); 
1fc00 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 45 78 70  }.#endif.    Exp
1fc10 61 6e 64 42 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b  andBlob(r.aMem);
1fc20 0a 20 20 20 20 72 2e 65 71 53 65 65 6e 20 3d 20  .    r.eqSeen = 
1fc30 30 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  0;.    rc = sqli
1fc40 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1fc50 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43  packed(pC->uc.pC
1fc60 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c  ursor, &r, 0, 0,
1fc70 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20   &res);.    if( 
1fc80 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
1fc90 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
1fca0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1fcb0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 65 71      }.    if( eq
1fcc0 4f 6e 6c 79 20 26 26 20 72 2e 65 71 53 65 65 6e  Only && r.eqSeen
1fcd0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  ==0 ){.      ass
1fce0 65 72 74 28 20 72 65 73 21 3d 30 20 29 3b 0a 20  ert( res!=0 );. 
1fcf0 20 20 20 20 20 67 6f 74 6f 20 73 65 65 6b 5f 6e       goto seek_n
1fd00 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20 20 20 7d 0a  ot_found;.    }.
1fd10 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66 65 72 72    }.  pC->deferr
1fd20 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
1fd30 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
1fd40 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23  = CACHE_STALE;.#
1fd50 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
1fd60 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72  T.  sqlite3_sear
1fd70 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  ch_count++;.#end
1fd80 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f  if.  if( oc>=OP_
1fd90 53 65 65 6b 47 45 20 29 7b 20 20 61 73 73 65 72  SeekGE ){  asser
1fda0 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 45  t( oc==OP_SeekGE
1fdb0 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   || oc==OP_SeekG
1fdc0 54 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  T );.    if( res
1fdd0 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26  <0 || (res==0 &&
1fde0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 29 20   oc==OP_SeekGT) 
1fdf0 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30  ){.      res = 0
1fe00 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
1fe10 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70 43  ite3BtreeNext(pC
1fe20 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72  ->uc.pCursor, &r
1fe30 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  es);.      if( r
1fe40 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
1fe50 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1fe60 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73  _error;.    }els
1fe70 65 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30  e{.      res = 0
1fe80 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
1fe90 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d  .    assert( oc=
1fea0 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 6f 63  =OP_SeekLT || oc
1feb0 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20  ==OP_SeekLE );. 
1fec0 20 20 20 69 66 28 20 72 65 73 3e 30 20 7c 7c 20     if( res>0 || 
1fed0 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f  (res==0 && oc==O
1fee0 50 5f 53 65 65 6b 4c 54 29 20 29 7b 0a 20 20 20  P_SeekLT) ){.   
1fef0 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
1ff00 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1ff10 72 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e  reePrevious(pC->
1ff20 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  uc.pCursor, &res
1ff30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
1ff40 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
1ff50 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1ff60 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  rror;.    }else{
1ff70 0a 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69  .      /* res mi
1ff80 67 68 74 20 62 65 20 6e 65 67 61 74 69 76 65 20  ght be negative 
1ff90 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c  because the tabl
1ffa0 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65  e is empty.  Che
1ffb0 63 6b 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 73  ck to.      ** s
1ffc0 65 65 20 69 66 20 74 68 69 73 20 69 73 20 74 68  ee if this is th
1ffd0 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f  e case..      */
1ffe0 0a 20 20 20 20 20 20 72 65 73 20 3d 20 73 71 6c  .      res = sql
1fff0 69 74 65 33 42 74 72 65 65 45 6f 66 28 70 43 2d  ite3BtreeEof(pC-
20000 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
20010 20 20 7d 0a 20 20 7d 0a 73 65 65 6b 5f 6e 6f 74    }.  }.seek_not
20020 5f 66 6f 75 6e 64 3a 0a 20 20 61 73 73 65 72 74  _found:.  assert
20030 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
20040 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
20050 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66  (res!=0,2);.  if
20060 28 20 72 65 73 20 29 7b 0a 20 20 20 20 67 6f 74  ( res ){.    got
20070 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
20080 7d 65 6c 73 65 20 69 66 28 20 65 71 4f 6e 6c 79  }else if( eqOnly
20090 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
200a0 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  pOp[1].opcode==O
200b0 50 5f 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31  P_IdxLT || pOp[1
200c0 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ].opcode==OP_Idx
200d0 47 54 20 29 3b 0a 20 20 20 20 70 4f 70 2b 2b 3b  GT );.    pOp++;
200e0 20 2f 2a 20 53 6b 69 70 20 74 68 65 20 4f 50 5f   /* Skip the OP_
200f0 49 64 78 4c 74 20 6f 72 20 4f 50 5f 49 64 78 47  IdxLt or OP_IdxG
20100 54 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 2a  T that follows *
20110 2f 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  /.  }.  break;.}
20120 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .  ../* Opcode: 
20130 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50  Found P1 P2 P3 P
20140 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
20150 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
20160 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65  .** If P4==0 the
20170 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f  n register P3 ho
20180 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  lds a blob const
20190 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65  ructed by MakeRe
201a0 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e  cord.  If.** P4>
201b0 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
201c0 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
201d0 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
201e0 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70  that form an unp
201f0 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e  acked.** record.
20200 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31  .**.** Cursor P1
20210 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20   is on an index 
20220 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72  btree.  If the r
20230 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64  ecord identified
20240 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a   by P3 and P4.**
20250 20 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20   is a prefix of 
20260 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20  any entry in P1 
20270 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d  then a jump is m
20280 61 64 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a  ade to P2 and.**
20290 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e   P1 is left poin
202a0 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63  ting at the matc
202b0 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a  hing entry..**.*
202c0 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  * This operation
202d0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
202e0 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68  or in a state wh
202f0 65 72 65 20 69 74 20 63 61 6e 20 62 65 0a 2a 2a  ere it can be.**
20300 20 61 64 76 61 6e 63 65 64 20 69 6e 20 74 68 65   advanced in the
20310 20 66 6f 72 77 61 72 64 20 64 69 72 65 63 74 69   forward directi
20320 6f 6e 2e 20 20 54 68 65 20 4e 65 78 74 20 69 6e  on.  The Next in
20330 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 77  struction will w
20340 6f 72 6b 2c 0a 2a 2a 20 62 75 74 20 6e 6f 74 20  ork,.** but not 
20350 74 68 65 20 50 72 65 76 20 69 6e 73 74 72 75 63  the Prev instruc
20360 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  tion..**.** See 
20370 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20  also: NotFound, 
20380 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45  NoConflict, NotE
20390 78 69 73 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f  xists. SeekGe.*/
203a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46  ./* Opcode: NotF
203b0 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34  ound P1 P2 P3 P4
203c0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
203d0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
203e0 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e  ** If P4==0 then
203f0 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c   register P3 hol
20400 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  ds a blob constr
20410 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63  ucted by MakeRec
20420 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30  ord.  If.** P4>0
20430 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
20440 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f  3 is the first o
20450 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74  f P4 registers t
20460 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61  hat form an unpa
20470 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a  cked.** record..
20480 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31  ** .** Cursor P1
20490 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20   is on an index 
204a0 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72  btree.  If the r
204b0 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64  ecord identified
204c0 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a   by P3 and P4.**
204d0 20 69 73 20 6e 6f 74 20 74 68 65 20 70 72 65 66   is not the pref
204e0 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20  ix of any entry 
204f0 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d  in P1 then a jum
20500 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 2e  p is made to P2.
20510 20 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73    If P1 .** does
20520 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72   contain an entr
20530 79 20 77 68 6f 73 65 20 70 72 65 66 69 78 20 6d  y whose prefix m
20540 61 74 63 68 65 73 20 74 68 65 20 50 33 2f 50 34  atches the P3/P4
20550 20 72 65 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e   record then con
20560 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68  trol.** falls th
20570 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
20580 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e  t instruction an
20590 64 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69  d P1 is left poi
205a0 6e 74 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20  nting at the.** 
205b0 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a  matching entry..
205c0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  **.** This opera
205d0 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20  tion leaves the 
205e0 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74  cursor in a stat
205f0 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f  e where it canno
20600 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64  t be.** advanced
20610 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63   in either direc
20620 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20  tion.  In other 
20630 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20  words, the Next 
20640 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f  and Prev.** opco
20650 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20  des do not work 
20660 61 66 74 65 72 20 74 68 69 73 20 6f 70 65 72 61  after this opera
20670 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  tion..**.** See 
20680 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
20690 45 78 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69  Exists, NoConfli
206a0 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ct.*/./* Opcode:
206b0 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50 31 20 50   NoConflict P1 P
206c0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
206d0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
206e0 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d  P4].**.** If P4=
206f0 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  =0 then register
20700 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62   P3 holds a blob
20710 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
20720 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a  MakeRecord.  If.
20730 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67  ** P4>0 then reg
20740 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20  ister P3 is the 
20750 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69  first of P4 regi
20760 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20  sters that form 
20770 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72  an unpacked.** r
20780 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75  ecord..** .** Cu
20790 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
207a0 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
207b0 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
207c0 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
207d0 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  d P4.** contains
207e0 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65 2c   any NULL value,
207f0 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
20800 79 20 74 6f 20 50 32 2e 20 20 49 66 20 61 6c 6c  y to P2.  If all
20810 20 74 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a 2a   terms of the.**
20820 20 72 65 63 6f 72 64 20 61 72 65 20 6e 6f 74 2d   record are not-
20830 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63 68 65 63  NULL then a chec
20840 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20 64 65 74  k is done to det
20850 65 72 6d 69 6e 65 20 69 66 20 61 6e 79 20 72 6f  ermine if any ro
20860 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20 69  w in the.** P1 i
20870 6e 64 65 78 20 62 74 72 65 65 20 68 61 73 20 61  ndex btree has a
20880 20 6d 61 74 63 68 69 6e 67 20 6b 65 79 20 70 72   matching key pr
20890 65 66 69 78 2e 20 20 49 66 20 74 68 65 72 65 20  efix.  If there 
208a0 61 72 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c 20  are no matches, 
208b0 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61 74  jump.** immediat
208c0 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 74  ely to P2.  If t
208d0 68 65 72 65 20 69 73 20 61 20 6d 61 74 63 68 2c  here is a match,
208e0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e   fall through an
208f0 64 20 6c 65 61 76 65 20 74 68 65 20 50 31 0a 2a  d leave the P1.*
20900 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  * cursor pointin
20910 67 20 74 6f 20 74 68 65 20 6d 61 74 63 68 69 6e  g to the matchin
20920 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  g row..**.** Thi
20930 73 20 6f 70 63 6f 64 65 20 69 73 20 73 69 6d 69  s opcode is simi
20940 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75  lar to OP_NotFou
20950 6e 64 20 77 69 74 68 20 74 68 65 20 65 78 63 65  nd with the exce
20960 70 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65 0a  ptions that the.
20970 2a 2a 20 62 72 61 6e 63 68 20 69 73 20 61 6c 77  ** branch is alw
20980 61 79 73 20 74 61 6b 65 6e 20 69 66 20 61 6e 79  ays taken if any
20990 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 65 61   part of the sea
209a0 72 63 68 20 6b 65 79 20 69 6e 70 75 74 20 69 73  rch key input is
209b0 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   NULL..**.** Thi
209c0 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76  s operation leav
209d0 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e  es the cursor in
209e0 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69   a state where i
209f0 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61  t cannot be.** a
20a00 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65  dvanced in eithe
20a10 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e  r direction.  In
20a20 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
20a30 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a  e Next and Prev.
20a40 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f  ** opcodes do no
20a50 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69  t work after thi
20a60 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a  s operation..**.
20a70 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74  ** See also: Not
20a80 46 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f  Found, Found, No
20a90 74 45 78 69 73 74 73 0a 2a 2f 0a 63 61 73 65 20  tExists.*/.case 
20aa0 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 3a 20 20  OP_NoConflict:  
20ab0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
20ac0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f  */.case OP_NotFo
20ad0 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75  und:       /* ju
20ae0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
20af0 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20  OP_Found: {     
20b00 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
20b10 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61 64 79  */.  int already
20b20 45 78 69 73 74 73 3b 0a 20 20 69 6e 74 20 74 61  Exists;.  int ta
20b30 6b 65 4a 75 6d 70 3b 0a 20 20 69 6e 74 20 69 69  keJump;.  int ii
20b40 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
20b50 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  pC;.  int res;. 
20b60 20 63 68 61 72 20 2a 70 46 72 65 65 3b 0a 20 20   char *pFree;.  
20b70 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a  UnpackedRecord *
20b80 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63  pIdxKey;.  Unpac
20b90 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 63  kedRecord r;.  c
20ba0 68 61 72 20 61 54 65 6d 70 52 65 63 5b 52 4f 55  har aTempRec[ROU
20bb0 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e 70 61 63  ND8(sizeof(Unpac
20bc0 6b 65 64 52 65 63 6f 72 64 29 29 20 2b 20 73 69  kedRecord)) + si
20bd0 7a 65 6f 66 28 4d 65 6d 29 2a 34 20 2b 20 37 5d  zeof(Mem)*4 + 7]
20be0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
20bf0 5f 54 45 53 54 0a 20 20 69 66 28 20 70 4f 70 2d  _TEST.  if( pOp-
20c00 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f  >opcode!=OP_NoCo
20c10 6e 66 6c 69 63 74 20 29 20 73 71 6c 69 74 65 33  nflict ) sqlite3
20c20 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a  _found_count++;.
20c30 23 65 6e 64 69 66 0a 0a 20 20 61 73 73 65 72 74  #endif..  assert
20c40 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
20c50 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
20c60 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
20c70 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
20c80 49 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20  INT32 );.  pC = 
20c90 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
20ca0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
20cb0 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  =0 );.#ifdef SQL
20cc0 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
20cd0 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70  seekOp = pOp->op
20ce0 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 70  code;.#endif.  p
20cf0 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
20d00 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
20d10 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
20d20 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
20d30 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
20d40 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
20d50 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
20d60 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 70 46 72 65  ble==0 );.  pFre
20d70 65 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70  e = 0;.  if( pOp
20d80 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20  ->p4.i>0 ){.    
20d90 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
20da0 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72  >pKeyInfo;.    r
20db0 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
20dc0 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72 2e  Op->p4.i;.    r.
20dd0 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 20 20 20  aMem = pIn3;.   
20de0 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72 2e   for(ii=0; ii<r.
20df0 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20  nField; ii++){. 
20e00 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
20e10 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b  IsValid(&r.aMem[
20e20 69 69 5d 29 20 29 3b 0a 20 20 20 20 20 20 45 78  ii]) );.      Ex
20e30 70 61 6e 64 42 6c 6f 62 28 26 72 2e 61 4d 65 6d  pandBlob(&r.aMem
20e40 5b 69 69 5d 29 3b 0a 23 69 66 64 65 66 20 53 51  [ii]);.#ifdef SQ
20e50 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 20  LITE_DEBUG.     
20e60 20 69 66 28 20 69 69 20 29 20 52 45 47 49 53 54   if( ii ) REGIST
20e70 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
20e80 2b 69 69 2c 20 26 72 2e 61 4d 65 6d 5b 69 69 5d  +ii, &r.aMem[ii]
20e90 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a  );.#endif.    }.
20ea0 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 26 72      pIdxKey = &r
20eb0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
20ec0 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33  IdxKey = sqlite3
20ed0 56 64 62 65 41 6c 6c 6f 63 55 6e 70 61 63 6b 65  VdbeAllocUnpacke
20ee0 64 52 65 63 6f 72 64 28 0a 20 20 20 20 20 20 20  dRecord(.       
20ef0 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 61   pC->pKeyInfo, a
20f00 54 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28  TempRec, sizeof(
20f10 61 54 65 6d 70 52 65 63 29 2c 20 26 70 46 72 65  aTempRec), &pFre
20f20 65 0a 20 20 20 20 29 3b 0a 20 20 20 20 69 66 28  e.    );.    if(
20f30 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 20 67 6f   pIdxKey==0 ) go
20f40 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61  to no_mem;.    a
20f50 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
20f60 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
20f70 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28  .    ExpandBlob(
20f80 70 49 6e 33 29 3b 0a 20 20 20 20 73 71 6c 69 74  pIn3);.    sqlit
20f90 65 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61  e3VdbeRecordUnpa
20fa0 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c  ck(pC->pKeyInfo,
20fb0 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e   pIn3->n, pIn3->
20fc0 7a 2c 20 70 49 64 78 4b 65 79 29 3b 0a 20 20 7d  z, pIdxKey);.  }
20fd0 0a 20 20 70 49 64 78 4b 65 79 2d 3e 64 65 66 61  .  pIdxKey->defa
20fe0 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 74 61  ult_rc = 0;.  ta
20ff0 6b 65 4a 75 6d 70 20 3d 20 30 3b 0a 20 20 69 66  keJump = 0;.  if
21000 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
21010 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 7b 0a  P_NoConflict ){.
21020 20 20 20 20 2f 2a 20 46 6f 72 20 74 68 65 20 4f      /* For the O
21030 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f 70 63  P_NoConflict opc
21040 6f 64 65 2c 20 74 61 6b 65 20 74 68 65 20 6a 75  ode, take the ju
21050 6d 70 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65  mp if any of the
21060 0a 20 20 20 20 2a 2a 20 69 6e 70 75 74 20 66 69  .    ** input fi
21070 65 6c 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 73  elds are NULL, s
21080 69 6e 63 65 20 61 6e 79 20 6b 65 79 20 77 69 74  ince any key wit
21090 68 20 61 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f  h a NULL will no
210a0 74 0a 20 20 20 20 2a 2a 20 63 6f 6e 66 6c 69 63  t.    ** conflic
210b0 74 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 69 3d  t */.    for(ii=
210c0 30 3b 20 69 69 3c 70 49 64 78 4b 65 79 2d 3e 6e  0; ii<pIdxKey->n
210d0 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20  Field; ii++){.  
210e0 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 2d      if( pIdxKey-
210f0 3e 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20  >aMem[ii].flags 
21100 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
21110 20 20 20 20 20 20 74 61 6b 65 4a 75 6d 70 20 3d        takeJump =
21120 20 31 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61   1;.        brea
21130 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
21140 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
21150 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
21160 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43  packed(pC->uc.pC
21170 75 72 73 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20  ursor, pIdxKey, 
21180 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 73  0, 0, &res);.  s
21190 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
211a0 20 70 46 72 65 65 29 3b 0a 20 20 69 66 28 20 72   pFree);.  if( r
211b0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
211c0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
211d0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
211e0 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c  .  pC->seekResul
211f0 74 20 3d 20 72 65 73 3b 0a 20 20 61 6c 72 65 61  t = res;.  alrea
21200 64 79 45 78 69 73 74 73 20 3d 20 28 72 65 73 3d  dyExists = (res=
21210 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  =0);.  pC->nullR
21220 6f 77 20 3d 20 31 2d 61 6c 72 65 61 64 79 45 78  ow = 1-alreadyEx
21230 69 73 74 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65  ists;.  pC->defe
21240 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
21250 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
21260 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
21270 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
21280 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a  de==OP_Found ){.
21290 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
212a0 6b 65 6e 28 61 6c 72 65 61 64 79 45 78 69 73 74  ken(alreadyExist
212b0 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28  s!=0,2);.    if(
212c0 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29   alreadyExists )
212d0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
212e0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56  ;.  }else{.    V
212f0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 74  dbeBranchTaken(t
21300 61 6b 65 4a 75 6d 70 7c 7c 61 6c 72 65 61 64 79  akeJump||already
21310 45 78 69 73 74 73 3d 3d 30 2c 32 29 3b 0a 20 20  Exists==0,2);.  
21320 20 20 69 66 28 20 74 61 6b 65 4a 75 6d 70 20 7c    if( takeJump |
21330 7c 20 21 61 6c 72 65 61 64 79 45 78 69 73 74 73  | !alreadyExists
21340 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
21350 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
21360 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
21370 6f 74 45 78 69 73 74 73 20 50 31 20 50 32 20 50  otExists P1 P2 P
21380 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
21390 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a  s: intkey=r[P3].
213a0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
213b0 69 6e 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f  index of a curso
213c0 72 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c  r open on an SQL
213d0 20 74 61 62 6c 65 20 62 74 72 65 65 20 28 77 69   table btree (wi
213e0 74 68 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65  th integer.** ke
213f0 79 73 29 2e 20 20 50 33 20 69 73 20 61 6e 20 69  ys).  P3 is an i
21400 6e 74 65 67 65 72 20 72 6f 77 69 64 2e 20 20 49  nteger rowid.  I
21410 66 20 50 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f  f P1 does not co
21420 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77  ntain a record w
21430 69 74 68 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20  ith.** rowid P3 
21440 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
21450 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 4f 72  ately to P2.  Or
21460 2c 20 69 66 20 50 32 20 69 73 20 30 2c 20 72 61  , if P2 is 0, ra
21470 69 73 65 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45  ise an.** SQLITE
21480 5f 43 4f 52 52 55 50 54 20 65 72 72 6f 72 2e 20  _CORRUPT error. 
21490 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61  If P1 does conta
214a0 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68  in a record with
214b0 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 0a   rowid P3 then .
214c0 2a 2a 20 6c 65 61 76 65 20 74 68 65 20 63 75 72  ** leave the cur
214d0 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  sor pointing at 
214e0 74 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20  that record and 
214f0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
21500 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74  the next.** inst
21510 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ruction..**.** T
21520 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f  he OP_NotFound o
21530 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74  pcode performs t
21540 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
21550 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n on index btree
21560 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69 74  s.** (with arbit
21570 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65  rary multi-value
21580 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68   keys)..**.** Th
21590 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
215a0 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61   the cursor in a
215b0 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20   state where it 
215c0 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e 63  cannot be advanc
215d0 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72 20  ed.** in either 
215e0 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f  direction.  In o
215f0 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
21600 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f 70  Next and Prev op
21610 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f  codes will.** no
21620 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67  t work following
21630 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a   this opcode..**
21640 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
21650 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e  und, NotFound, N
21660 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 63 61 73  oConflict.*/.cas
21670 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20  e OP_NotExists: 
21680 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
21690 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43  , in3 */.  VdbeC
216a0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
216b0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
216c0 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20 69  int res;.  u64 i
216d0 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20 26  Key;..  pIn3 = &
216e0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
216f0 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
21700 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
21710 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
21720 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
21730 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
21740 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
21750 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
21760 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66  rt( pC!=0 );.#if
21770 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
21780 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20  .  pC->seekOp = 
21790 30 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73 73 65  0;.#endif.  asse
217a0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
217b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
217c0 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
217d0 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43  PE_BTREE );.  pC
217e0 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75  rsr = pC->uc.pCu
217f0 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
21800 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 65  pCrsr!=0 );.  re
21810 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20  s = 0;.  iKey = 
21820 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20  pIn3->u.i;.  rc 
21830 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
21840 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
21850 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20  sr, 0, iKey, 0, 
21860 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28  &res);.  assert(
21870 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
21880 7c 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20 70 43  | res==0 );.  pC
21890 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d  ->movetoTarget =
218a0 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64 20   iKey;  /* Used 
218b0 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a  by OP_Delete */.
218c0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
218d0 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
218e0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
218f0 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72  LE;.  pC->deferr
21900 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
21910 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
21920 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 70 43 2d  res!=0,2);.  pC-
21930 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65  >seekResult = re
21940 73 3b 0a 20 20 69 66 28 20 72 65 73 21 3d 30 20  s;.  if( res!=0 
21950 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  ){.    assert( r
21960 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
21970 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
21980 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  =0 ){.      rc =
21990 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
219a0 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BKPT;.    }else{
219b0 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  .      goto jump
219c0 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20  _to_p2;.    }.  
219d0 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
219e0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
219f0 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
21a00 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71  ../* Opcode: Seq
21a10 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20  uence P1 P2 * * 
21a20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
21a30 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31 5d 2e  [P2]=cursor[P1].
21a40 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64  ctr++.**.** Find
21a50 20 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61   the next availa
21a60 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  ble sequence num
21a70 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50  ber for cursor P
21a80 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  1..** Write the 
21a90 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
21aa0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
21ab0 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63  ..** The sequenc
21ac0 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20  e number on the 
21ad0 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d  cursor is increm
21ae0 65 6e 74 65 64 20 61 66 74 65 72 20 74 68 69 73  ented after this
21af0 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
21b00 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65    .*/.case OP_Se
21b10 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20  quence: {       
21b20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
21b30 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
21b40 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
21b50 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
21b60 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
21b70 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20  pOp->p1]!=0 );. 
21b80 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
21b90 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72  r[pOp->p1]->eCur
21ba0 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56 54  Type!=CURTYPE_VT
21bb0 41 42 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  AB );.  pOut = o
21bc0 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
21bd0 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75   pOp);.  pOut->u
21be0 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  .i = p->apCsr[pO
21bf0 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74  p->p1]->seqCount
21c00 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ++;.  break;.}..
21c10 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52  ./* Opcode: NewR
21c20 6f 77 69 64 20 50 31 20 50 32 20 50 33 20 2a 20  owid P1 P2 P3 * 
21c30 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
21c40 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a  [P2]=rowid.**.**
21c50 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67   Get a new integ
21c60 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  er record number
21c70 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29   (a.k.a "rowid")
21c80 20 75 73 65 64 20 61 73 20 74 68 65 20 6b 65 79   used as the key
21c90 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20   to a table..** 
21ca0 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  The record numbe
21cb0 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75  r is not previou
21cc0 73 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b 65  sly used as a ke
21cd0 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  y in the databas
21ce0 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20  e.** table that 
21cf0 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73  cursor P1 points
21d00 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65   to.  The new re
21d10 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77  cord number is w
21d20 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65  ritten.** writte
21d30 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  n to register P2
21d40 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20  ..**.** If P3>0 
21d50 74 68 65 6e 20 50 33 20 69 73 20 61 20 72 65 67  then P3 is a reg
21d60 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f  ister in the roo
21d70 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20  t frame of this 
21d80 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73 20  VDBE that holds 
21d90 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74 20  .** the largest 
21da0 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72  previously gener
21db0 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62  ated record numb
21dc0 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72  er. No new recor
21dd0 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a  d numbers are.**
21de0 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c   allowed to be l
21df0 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 76 61  ess than this va
21e00 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20 76  lue. When this v
21e10 61 6c 75 65 20 72 65 61 63 68 65 73 20 69 74 73  alue reaches its
21e20 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e   maximum, .** an
21e30 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72   SQLITE_FULL err
21e40 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e  or is generated.
21e50 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65 72   The P3 register
21e60 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68   is updated with
21e70 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61   the '.** genera
21e80 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ted record numbe
21e90 72 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68 61  r. This P3 mecha
21ea0 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20  nism is used to 
21eb0 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74  help implement t
21ec0 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d  he.** AUTOINCREM
21ed0 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a  ENT feature..*/.
21ee0 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64  case OP_NewRowid
21ef0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
21f00 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34 20 76   out2 */.  i64 v
21f10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21f20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77    /* The new row
21f30 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  id */.  VdbeCurs
21f40 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f  or *pC;        /
21f50 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c  * Cursor of tabl
21f60 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77  e to get the new
21f70 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20   rowid */.  int 
21f80 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  res;            
21f90 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
21fa0 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c  an sqlite3BtreeL
21fb0 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63  ast() */.  int c
21fc0 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
21fd0 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20    /* Counter to 
21fe0 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72  limit the number
21ff0 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a   of searches */.
22000 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
22010 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
22020 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72  ster holding lar
22030 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41  gest rowid for A
22040 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
22050 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
22060 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74  ame;     /* Root
22070 20 66 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a   frame of VDBE *
22080 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65  /..  v = 0;.  re
22090 73 20 3d 20 30 3b 0a 20 20 70 4f 75 74 20 3d 20  s = 0;.  pOut = 
220a0 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
220b0 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74  , pOp);.  assert
220c0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
220d0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
220e0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
220f0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
22100 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
22110 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
22120 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
22130 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
22140 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
22150 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 7b 0a 20  rsor!=0 );.  {. 
22160 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72     /* The next r
22170 6f 77 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e  owid or record n
22180 75 6d 62 65 72 20 28 64 69 66 66 65 72 65 6e 74  umber (different
22190 20 74 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73   terms for the s
221a0 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67  ame.    ** thing
221b0 29 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e  ) is obtained in
221c0 20 61 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f   a two-step algo
221d0 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20  rithm..    **.  
221e0 20 20 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74    ** First we at
221f0 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68  tempt to find th
22200 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69  e largest existi
22210 6e 67 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64  ng rowid and add
22220 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74   one.    ** to t
22230 68 61 74 2e 20 20 42 75 74 20 69 66 20 74 68 65  hat.  But if the
22240 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e   largest existin
22250 67 20 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61  g rowid is alrea
22260 64 79 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20  dy the maximum. 
22270 20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69     ** positive i
22280 6e 74 65 67 65 72 2c 20 77 65 20 68 61 76 65 20  nteger, we have 
22290 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  to fall through 
222a0 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20  to the second.  
222b0 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74    ** probabilist
222c0 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20  ic algorithm.   
222d0 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73   **.    ** The s
222e0 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20  econd algorithm 
222f0 69 73 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72  is to select a r
22300 6f 77 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61  owid at random a
22310 6e 64 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a  nd see if.    **
22320 20 69 74 20 61 6c 72 65 61 64 79 20 65 78 69 73   it already exis
22330 74 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ts in the table.
22340 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74    If it does not
22350 20 65 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a   exist, we have.
22360 20 20 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64      ** succeeded
22370 2e 20 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d  .  If the random
22380 20 72 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73   rowid does exis
22390 74 2c 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e  t, we select a n
223a0 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e  ew one.    ** an
223b0 64 20 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20  d try again, up 
223c0 74 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a 20 20  to 100 times..  
223d0 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28    */.    assert(
223e0 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
223f0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33  .#ifdef SQLITE_3
22400 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64  2BIT_ROWID.#   d
22410 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20  efine MAX_ROWID 
22420 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65  0x7fffffff.#else
22430 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d  .    /* Some com
22440 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20  pilers complain 
22450 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20  about constants 
22460 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66  of the form 0x7f
22470 66 66 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a  ffffffffffffff..
22480 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f      ** Others co
22490 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37  mplain about 0x7
224a0 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  ffffffffffffffff
224b0 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  LL.  The followi
224c0 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20  ng macro seems. 
224d0 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65     ** to provide
224e0 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68   the constant wh
224f0 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63  ile making all c
22500 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a  ompilers happy..
22510 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e      */.#   defin
22520 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36  e MAX_ROWID  (i6
22530 34 29 28 20 28 28 28 75 36 34 29 30 78 37 66 66  4)( (((u64)0x7ff
22540 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75  fffff)<<32) | (u
22550 36 34 29 30 78 66 66 66 66 66 66 66 66 20 29 0a  64)0xffffffff ).
22560 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20  #endif..    if( 
22570 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f  !pC->useRandomRo
22580 77 69 64 20 29 7b 0a 20 20 20 20 20 20 72 63 20  wid ){.      rc 
22590 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
225a0 73 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  st(pC->uc.pCurso
225b0 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
225c0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
225d0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  K ){.        got
225e0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
225f0 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
22600 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
22610 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20 20         v = 1;   
22620 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d  /* IMP: R-61914-
22630 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20 7d  48074 */.      }
22640 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61 73  else{.        as
22650 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
22660 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
22670 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 20  pC->uc.pCursor) 
22680 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
22690 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
226a0 69 7a 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ize(pC->uc.pCurs
226b0 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20  or, &v);.       
226c0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
226d0 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 43  ITE_OK );   /* C
226e0 61 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c 6c 6f  annot fail follo
226f0 77 69 6e 67 20 42 74 72 65 65 4c 61 73 74 28 29  wing BtreeLast()
22700 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
22710 76 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a  v>=MAX_ROWID ){.
22720 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73            pC->us
22730 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31  eRandomRowid = 1
22740 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
22750 0a 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 20  .          v++; 
22760 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33    /* IMP: R-2953
22770 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20 20 20  8-34987 */.     
22780 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
22790 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   }..#ifndef SQLI
227a0 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
227b0 45 4d 45 4e 54 0a 20 20 20 20 69 66 28 20 70 4f  EMENT.    if( pO
227c0 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 2f  p->p3 ){.      /
227d0 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33  * Assert that P3
227e0 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f   is a valid memo
227f0 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20  ry cell. */.    
22800 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
22810 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28  3>0 );.      if(
22820 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
22830 20 20 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65        for(pFrame
22840 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61  =p->pFrame; pFra
22850 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72  me->pParent; pFr
22860 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72  ame=pFrame->pPar
22870 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a  ent);.        /*
22880 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20   Assert that P3 
22890 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72  is a valid memor
228a0 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20  y cell. */.     
228b0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
228c0 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d  p3<=pFrame->nMem
228d0 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d   );.        pMem
228e0 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d   = &pFrame->aMem
228f0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
22900 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
22910 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50  /* Assert that P
22920 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
22930 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20  ory cell. */.   
22940 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
22950 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p3<=(p->nMem+1
22960 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
22970 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d  ;.        pMem =
22980 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
22990 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75  .        memAbou
229a0 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d 65  tToChange(p, pMe
229b0 6d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  m);.      }.    
229c0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
229d0 61 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20  alid(pMem) );.. 
229e0 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
229f0 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65  ACE(pOp->p3, pMe
22a00 6d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  m);.      sqlite
22a10 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
22a20 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20  fy(pMem);.      
22a30 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66  assert( (pMem->f
22a40 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
22a50 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33  =0 );  /* mem(P3
22a60 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67  ) holds an integ
22a70 65 72 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  er */.      if( 
22a80 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52  pMem->u.i==MAX_R
22a90 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52  OWID || pC->useR
22aa0 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20  andomRowid ){.  
22ab0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
22ac0 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50  E_FULL;   /* IMP
22ad0 3a 20 52 2d 31 32 32 37 35 2d 36 31 33 33 38 20  : R-12275-61338 
22ae0 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  */.        goto 
22af0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
22b00 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
22b10 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e    if( v<pMem->u.
22b20 69 2b 31 20 29 7b 0a 20 20 20 20 20 20 20 20 76  i+1 ){.        v
22b30 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31   = pMem->u.i + 1
22b40 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
22b50 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pMem->u.i = v;. 
22b60 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
22b70 69 66 28 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f  if( pC->useRando
22b80 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20  mRowid ){.      
22b90 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f  /* IMPLEMENTATIO
22ba0 4e 2d 4f 46 3a 20 52 2d 30 37 36 37 37 2d 34 31  N-OF: R-07677-41
22bb0 38 38 31 20 49 66 20 74 68 65 20 6c 61 72 67 65  881 If the large
22bc0 73 74 20 52 4f 57 49 44 20 69 73 20 65 71 75 61  st ROWID is equa
22bd0 6c 20 74 6f 20 74 68 65 0a 20 20 20 20 20 20 2a  l to the.      *
22be0 2a 20 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62  * largest possib
22bf0 6c 65 20 69 6e 74 65 67 65 72 20 28 39 32 32 33  le integer (9223
22c00 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37 29  372036854775807)
22c10 20 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61   then the databa
22c20 73 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e 67 69  se.      ** engi
22c30 6e 65 20 73 74 61 72 74 73 20 70 69 63 6b 69 6e  ne starts pickin
22c40 67 20 70 6f 73 69 74 69 76 65 20 63 61 6e 64 69  g positive candi
22c50 64 61 74 65 20 52 4f 57 49 44 73 20 61 74 20 72  date ROWIDs at r
22c60 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20 20 20 20  andom until.    
22c70 20 20 2a 2a 20 69 74 20 66 69 6e 64 73 20 6f 6e    ** it finds on
22c80 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20 70 72  e that is not pr
22c90 65 76 69 6f 75 73 6c 79 20 75 73 65 64 2e 20 2a  eviously used. *
22ca0 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
22cb0 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f  pOp->p3==0 );  /
22cc0 2a 20 57 65 20 63 61 6e 6e 6f 74 20 62 65 20 69  * We cannot be i
22cd0 6e 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d  n random rowid m
22ce0 6f 64 65 20 69 66 20 74 68 69 73 20 69 73 0a 20  ode if this is. 
22cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d00 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61              ** a
22d10 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  n AUTOINCREMENT 
22d20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20  table. */.      
22d30 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 64  cnt = 0;.      d
22d40 6f 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  o{.        sqlit
22d50 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69  e3_randomness(si
22d60 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20  zeof(v), &v);.  
22d70 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f        v &= (MAX_
22d80 52 4f 57 49 44 3e 3e 31 29 3b 20 76 2b 2b 3b 20  ROWID>>1); v++; 
22d90 20 2f 2a 20 45 6e 73 75 72 65 20 74 68 61 74 20   /* Ensure that 
22da0 76 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  v is greater tha
22db0 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20  n zero */.      
22dc0 7d 77 68 69 6c 65 28 20 20 28 28 72 63 20 3d 20  }while(  ((rc = 
22dd0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
22de0 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75  toUnpacked(pC->u
22df0 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75  c.pCursor, 0, (u
22e00 36 34 29 76 2c 0a 20 20 20 20 20 20 20 20 20 20  64)v,.          
22e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e30 20 20 20 20 20 20 20 30 2c 20 26 72 65 73 29 29         0, &res))
22e40 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20  ==SQLITE_OK).   
22e50 20 20 20 20 20 20 20 20 20 26 26 20 28 72 65 73           && (res
22e60 3d 3d 30 29 0a 20 20 20 20 20 20 20 20 20 20 20  ==0).           
22e70 20 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29   && (++cnt<100))
22e80 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 20 29  ;.      if( rc )
22e90 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
22ea0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
22eb0 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
22ec0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
22ed0 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50  E_FULL;   /* IMP
22ee0 3a 20 52 2d 33 38 32 31 39 2d 35 33 30 30 32 20  : R-38219-53002 
22ef0 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  */.        goto 
22f00 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
22f10 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
22f20 20 20 61 73 73 65 72 74 28 20 76 3e 30 20 29 3b    assert( v>0 );
22f30 20 20 2f 2a 20 45 56 3a 20 52 2d 34 30 38 31 32    /* EV: R-40812
22f40 2d 30 33 35 37 30 20 2a 2f 0a 20 20 20 20 7d 0a  -03570 */.    }.
22f50 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64      pC->deferred
22f60 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20  Moveto = 0;.    
22f70 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
22f80 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
22f90 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d   }.  pOut->u.i =
22fa0 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   v;.  break;.}..
22fb0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72  /* Opcode: Inser
22fc0 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
22fd0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e  .** Synopsis: in
22fe0 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61 74 61 3d  tkey=r[P3] data=
22ff0 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74  r[P2].**.** Writ
23000 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20  e an entry into 
23010 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72  the table of cur
23020 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65  sor P1.  A new e
23030 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74  ntry is.** creat
23040 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74  ed if it doesn't
23050 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f   already exist o
23060 72 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 61  r the data for a
23070 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e  n existing.** en
23080 74 72 79 20 69 73 20 6f 76 65 72 77 72 69 74 74  try is overwritt
23090 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69 73  en.  The data is
230a0 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42   the value MEM_B
230b0 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20 72 65  lob stored in re
230c0 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  gister.** number
230d0 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20   P2. The key is 
230e0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
230f0 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d  er P3. The key m
23100 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f  ust.** be a MEM_
23110 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  Int..**.** If th
23120 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
23130 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
23140 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77  et, then the row
23150 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73   change count is
23160 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  .** incremented 
23170 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e  (otherwise not).
23180 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f    If the OPFLAG_
23190 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f  LASTROWID flag o
231a0 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20  f P5 is set,.** 
231b0 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74  then rowid is st
231c0 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65 71 75  ored for subsequ
231d0 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74 68  ent return by th
231e0 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73  e.** sqlite3_las
231f0 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
23200 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72   function (other
23210 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64  wise it is unmod
23220 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66  ified)..**.** If
23230 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53   the OPFLAG_USES
23240 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f  EEKRESULT flag o
23250 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20  f P5 is set and 
23260 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  if the result of
23270 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73 65 65  .** the last see
23280 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50 5f  k operation (OP_
23290 4e 6f 74 45 78 69 73 74 73 29 20 77 61 73 20 61  NotExists) was a
232a0 20 73 75 63 63 65 73 73 2c 20 74 68 65 6e 20 74   success, then t
232b0 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  his.** operation
232c0 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d 70   will not attemp
232d0 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 61 70  t to find the ap
232e0 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20 62 65  propriate row be
232f0 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74 68  fore doing.** th
23300 65 20 69 6e 73 65 72 74 20 62 75 74 20 77 69 6c  e insert but wil
23310 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72 77 72  l instead overwr
23320 69 74 65 20 74 68 65 20 72 6f 77 20 74 68 61 74  ite the row that
23330 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
23340 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  * currently poin
23350 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73 75 6d  ting to.  Presum
23360 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f 72 20  ably, the prior 
23370 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63  OP_NotExists opc
23380 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65 61  ode.** has alrea
23390 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68  dy positioned th
233a0 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65 63 74  e cursor correct
233b0 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20  ly.  This is an 
233c0 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20  optimization.** 
233d0 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65 72 66  that boosts perf
233e0 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f 69 64  ormance by avoid
233f0 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20 73 65  ing redundant se
23400 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  eks..**.** If th
23410 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  e OPFLAG_ISUPDAT
23420 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74  E flag is set, t
23430 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20  hen this opcode 
23440 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a  is part of an.**
23450 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f   UPDATE operatio
23460 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28 69  n.  Otherwise (i
23470 66 20 74 68 65 20 66 6c 61 67 20 69 73 20 63 6c  f the flag is cl
23480 65 61 72 29 20 74 68 65 6e 20 74 68 69 73 20 6f  ear) then this o
23490 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72 74  pcode.** is part
234a0 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 70   of an INSERT op
234b0 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 69  eration.  The di
234c0 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79  fference is only
234d0 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a   important to.**
234e0 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b   the update hook
234f0 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65  ..**.** Paramete
23500 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74  r P4 may point t
23510 6f 20 61 20 54 61 62 6c 65 20 73 74 72 75 63 74  o a Table struct
23520 75 72 65 2c 20 6f 72 20 6d 61 79 20 62 65 20 4e  ure, or may be N
23530 55 4c 4c 2e 20 49 66 20 69 74 20 69 73 20 0a 2a  ULL. If it is .*
23540 2a 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e  * not NULL, then
23550 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
23560 20 28 73 71 6c 69 74 65 33 2e 78 55 70 64 61 74   (sqlite3.xUpdat
23570 65 43 61 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e  eCallback) is in
23580 76 6f 6b 65 64 20 0a 2a 2a 20 66 6f 6c 6c 6f 77  voked .** follow
23590 69 6e 67 20 61 20 73 75 63 63 65 73 73 66 75 6c  ing a successful
235a0 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28   insert..**.** (
235b0 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66  WARNING/TODO: If
235c0 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d   P1 is a pseudo-
235d0 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73  cursor and P2 is
235e0 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20   dynamically.** 
235f0 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20  allocated, then 
23600 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20  ownership of P2 
23610 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20 74  is transferred t
23620 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72  o the pseudo-cur
23630 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73  sor.** and regis
23640 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65  ter P2 becomes e
23650 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68  phemeral.  If th
23660 65 20 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e  e cursor is chan
23670 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75  ged, the.** valu
23680 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  e of register P2
23690 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67   will then chang
236a0 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68  e.  Make sure th
236b0 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63  is does not.** c
236c0 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d  ause any problem
236d0 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  s.).**.** This i
236e0 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20  nstruction only 
236f0 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e  works on tables.
23700 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74    The equivalent
23710 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
23720 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f  for indices is O
23730 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a  P_IdxInsert..*/.
23740 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72  /* Opcode: Inser
23750 74 49 6e 74 20 50 31 20 50 32 20 50 33 20 50 34  tInt P1 P2 P3 P4
23760 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
23770 20 20 69 6e 74 6b 65 79 3d 50 33 20 64 61 74 61    intkey=P3 data
23780 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 69  =r[P2].**.** Thi
23790 73 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20  s works exactly 
237a0 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20 65  like OP_Insert e
237b0 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6b  xcept that the k
237c0 65 79 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74  ey is the.** int
237d0 65 67 65 72 20 76 61 6c 75 65 20 50 33 2c 20 6e  eger value P3, n
237e0 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ot the value of 
237f0 74 68 65 20 69 6e 74 65 67 65 72 20 73 74 6f 72  the integer stor
23800 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
23810 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  3..*/.case OP_In
23820 73 65 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49  sert: .case OP_I
23830 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65  nsertInt: {.  Me
23840 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20 20 20  m *pData;       
23850 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64  /* MEM cell hold
23860 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74 68 65  ing data for the
23870 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e   record to be in
23880 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20  serted */.  Mem 
23890 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20 2f 2a  *pKey;        /*
238a0 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e   MEM cell holdin
238b0 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65 20 72  g key  for the r
238c0 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 69  ecord */.  i64 i
238d0 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Key;         /* 
238e0 54 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49  The integer ROWI
238f0 44 20 6f 72 20 6b 65 79 20 66 6f 72 20 74 68 65  D or key for the
23900 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e   record to be in
23910 73 65 72 74 65 64 20 2a 2f 0a 20 20 56 64 62 65  serted */.  Vdbe
23920 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a  Cursor *pC;   /*
23930 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62 6c 65   Cursor to table
23940 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e 73 65   into which inse
23950 72 74 20 69 73 20 77 72 69 74 74 65 6e 20 2a 2f  rt is written */
23960 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20  .  int nZero;   
23970 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
23980 66 20 7a 65 72 6f 2d 62 79 74 65 73 20 74 6f 20  f zero-bytes to 
23990 61 70 70 65 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  append */.  int 
239a0 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a  seekResult;   /*
239b0 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72   Result of prior
239c0 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f   seek or 0 if no
239d0 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66   USESEEKRESULT f
239e0 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  lag */.  const c
239f0 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61  har *zDb;  /* da
23a00 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73  tabase name - us
23a10 65 64 20 62 79 20 74 68 65 20 75 70 64 61 74 65  ed by the update
23a20 20 68 6f 6f 6b 20 2a 2f 0a 20 20 54 61 62 6c 65   hook */.  Table
23a30 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20   *pTab;      /* 
23a40 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20  Table structure 
23a50 2d 20 75 73 65 64 20 62 79 20 75 70 64 61 74 65  - used by update
23a60 20 61 6e 64 20 70 72 65 2d 75 70 64 61 74 65 20   and pre-update 
23a70 68 6f 6f 6b 73 20 2a 2f 0a 20 20 69 6e 74 20 6f  hooks */.  int o
23a80 70 20 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a 20  p = 0;       /* 
23a90 4f 70 63 6f 64 65 20 66 6f 72 20 75 70 64 61 74  Opcode for updat
23aa0 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55  e hook: SQLITE_U
23ab0 50 44 41 54 45 20 6f 72 20 53 51 4c 49 54 45 5f  PDATE or SQLITE_
23ac0 49 4e 53 45 52 54 20 2a 2f 0a 0a 20 20 70 44 61  INSERT */..  pDa
23ad0 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ta = &aMem[pOp->
23ae0 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
23af0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
23b00 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
23b10 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d  );.  assert( mem
23b20 49 73 56 61 6c 69 64 28 70 44 61 74 61 29 20 29  IsValid(pData) )
23b30 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
23b40 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
23b50 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
23b60 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
23b70 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
23b80 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
23b90 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
23ba0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
23bb0 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
23bc0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23bd0 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20  4type==P4_TABLE 
23be0 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3e 3d  || pOp->p4type>=
23bf0 50 34 5f 53 54 41 54 49 43 20 29 3b 0a 20 20 52  P4_STATIC );.  R
23c00 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
23c10 70 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a 0a  p->p2, pData);..
23c20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
23c30 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20 29 7b 0a  e==OP_Insert ){.
23c40 20 20 20 20 70 4b 65 79 20 3d 20 26 61 4d 65 6d      pKey = &aMem
23c50 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61  [pOp->p3];.    a
23c60 73 73 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61  ssert( pKey->fla
23c70 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
23c80 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
23c90 73 56 61 6c 69 64 28 70 4b 65 79 29 20 29 3b 0a  sValid(pKey) );.
23ca0 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
23cb0 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79  CE(pOp->p3, pKey
23cc0 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4b  );.    iKey = pK
23cd0 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73 65  ey->u.i;.  }else
23ce0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
23cf0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e  p->opcode==OP_In
23d00 73 65 72 74 49 6e 74 20 29 3b 0a 20 20 20 20 69  sertInt );.    i
23d10 4b 65 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  Key = pOp->p3;. 
23d20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   }..  if( pOp->p
23d30 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20  4type==P4_TABLE 
23d40 26 26 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f  && HAS_UPDATE_HO
23d50 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73  OK(db) ){.    as
23d60 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
23d70 65 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  e );.    assert(
23d80 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20   pC->iDb>=0 );. 
23d90 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62     zDb = db->aDb
23da0 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b  [pC->iDb].zName;
23db0 0a 20 20 20 20 70 54 61 62 20 3d 20 70 4f 70 2d  .    pTab = pOp-
23dc0 3e 70 34 2e 70 54 61 62 3b 0a 20 20 20 20 6f 70  >p4.pTab;.    op
23dd0 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f   = ((pOp->p5 & O
23de0 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20  PFLAG_ISUPDATE) 
23df0 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20  ? SQLITE_UPDATE 
23e00 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 29  : SQLITE_INSERT)
23e10 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51  ;.  }..#ifdef SQ
23e20 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
23e30 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20  PDATE_HOOK.  /* 
23e40 49 6e 76 6f 6b 65 20 74 68 65 20 70 72 65 2d 75  Invoke the pre-u
23e50 70 64 61 74 65 20 68 6f 6f 6b 2c 20 69 66 20 61  pdate hook, if a
23e60 6e 79 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  ny */.  if( db->
23e70 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
23e80 63 6b 20 0a 20 20 20 26 26 20 70 4f 70 2d 3e 70  ck .   && pOp->p
23e90 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 0a  4type==P4_TABLE.
23ea0 20 20 20 26 26 20 21 28 70 4f 70 2d 3e 70 35 20     && !(pOp->p5 
23eb0 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  & OPFLAG_ISUPDAT
23ec0 45 29 0a 20 20 20 26 26 20 48 61 73 52 6f 77 69  E).   && HasRowi
23ed0 64 28 70 54 61 62 29 0a 20 20 29 7b 0a 20 20 20  d(pTab).  ){.   
23ee0 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 65 55   sqlite3VdbePreU
23ef0 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43 2c  pdateHook(p, pC,
23f00 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c 20   SQLITE_INSERT, 
23f10 7a 44 62 2c 20 70 54 61 62 2c 20 69 4b 65 79 2c  zDb, pTab, iKey,
23f20 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 7d 0a 23   pOp->p2);.  }.#
23f30 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 4f 70  endif..  if( pOp
23f40 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p5 & OPFLAG_NC
23f50 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e  HANGE ) p->nChan
23f60 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d  ge++;.  if( pOp-
23f70 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53  >p5 & OPFLAG_LAS
23f80 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73  TROWID ) db->las
23f90 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77  tRowid = lastRow
23fa0 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 69 66 28  id = iKey;.  if(
23fb0 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
23fc0 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
23fd0 70 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20  pData->z = 0;.  
23fe0 20 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a    pData->n = 0;.
23ff0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
24000 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67  ert( pData->flag
24010 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  s & (MEM_Blob|ME
24020 4d 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20 20  M_Str) );.  }.  
24030 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28 70  seekResult = ((p
24040 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
24050 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f  USESEEKRESULT) ?
24060 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
24070 3a 20 30 29 3b 0a 20 20 69 66 28 20 70 44 61 74  : 0);.  if( pDat
24080 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  a->flags & MEM_Z
24090 65 72 6f 20 29 7b 0a 20 20 20 20 6e 5a 65 72 6f  ero ){.    nZero
240a0 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72   = pData->u.nZer
240b0 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  o;.  }else{.    
240c0 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20  nZero = 0;.  }. 
240d0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
240e0 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e  eeInsert(pC->uc.
240f0 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65 79  pCursor, 0, iKey
24100 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
24110 20 20 20 20 20 20 20 20 20 20 20 20 70 44 61 74              pDat
24120 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20  a->z, pData->n, 
24130 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20 20 20  nZero,.         
24140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24150 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
24160 41 47 5f 41 50 50 45 4e 44 29 21 3d 30 2c 20 73  AG_APPEND)!=0, s
24170 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20  eekResult.  );. 
24180 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
24190 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
241a0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
241b0 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20  HE_STALE;..  /* 
241c0 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74  Invoke the updat
241d0 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
241e0 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 20  ed. */.  if( rc 
241f0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
24200 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
24210 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
24220 62 61 63 6b 20 26 26 20 6f 70 20 26 26 20 48 61  back && op && Ha
24230 73 52 6f 77 69 64 28 70 54 61 62 29 20 29 7b 0a  sRowid(pTab) ){.
24240 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43      db->xUpdateC
24250 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64  allback(db->pUpd
24260 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c  ateArg, op, zDb,
24270 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 20 69 4b   pTab->zName, iK
24280 65 79 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ey);.  }.  break
24290 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
242a0 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20  Delete P1 P2 P3 
242b0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  P4 P5.**.** Dele
242c0 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74  te the record at
242d0 20 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75   which the P1 cu
242e0 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c  rsor is currentl
242f0 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a  y pointing..**.*
24300 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
24310 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74  SAVEPOSITION bit
24320 20 6f 66 20 74 68 65 20 50 35 20 70 61 72 61 6d   of the P5 param
24330 65 74 65 72 20 69 73 20 73 65 74 2c 20 74 68 65  eter is set, the
24340 6e 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20  n.** the cursor 
24350 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69  will be left poi
24360 6e 74 69 6e 67 20 61 74 20 20 65 69 74 68 65 72  nting at  either
24370 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65   the next or the
24380 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63   previous.** rec
24390 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ord in the table
243a0 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66 74 20  . If it is left 
243b0 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20  pointing at the 
243c0 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65  next record, the
243d0 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65  n.** the next Ne
243e0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  xt instruction w
243f0 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20  ill be a no-op. 
24400 41 73 20 61 20 72 65 73 75 6c 74 2c 20 69 6e 20  As a result, in 
24410 74 68 69 73 20 63 61 73 65 0a 2a 2a 20 69 74 20  this case.** it 
24420 69 73 20 6f 6b 20 74 6f 20 64 65 6c 65 74 65 20  is ok to delete 
24430 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69  a record from wi
24440 74 68 69 6e 20 61 20 4e 65 78 74 20 6c 6f 6f 70  thin a Next loop
24450 2e 20 49 66 20 0a 2a 2a 20 4f 50 46 4c 41 47 5f  . If .** OPFLAG_
24460 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74  SAVEPOSITION bit
24470 20 6f 66 20 50 35 20 69 73 20 63 6c 65 61 72 2c   of P5 is clear,
24480 20 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   then the cursor
24490 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 6c 65 66 74   will be.** left
244a0 20 69 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64   in an undefined
244b0 20 73 74 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 49 66   state..**.** If
244c0 20 74 68 65 20 4f 50 46 4c 41 47 5f 41 55 58 44   the OPFLAG_AUXD
244d0 45 4c 45 54 45 20 62 69 74 20 69 73 20 73 65 74  ELETE bit is set
244e0 20 6f 6e 20 50 35 2c 20 74 68 61 74 20 69 6e 64   on P5, that ind
244f0 69 63 61 74 65 73 20 74 68 61 74 20 74 68 69 73  icates that this
24500 0a 2a 2a 20 64 65 6c 65 74 65 20 6f 6e 65 20 6f  .** delete one o
24510 66 20 73 65 76 65 72 61 6c 20 61 73 73 6f 63 69  f several associ
24520 61 74 65 64 20 77 69 74 68 20 64 65 6c 65 74 69  ated with deleti
24530 6e 67 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61  ng a table row a
24540 6e 64 20 61 6c 6c 20 69 74 73 0a 2a 2a 20 61 73  nd all its.** as
24550 73 6f 63 69 61 74 65 64 20 69 6e 64 65 78 20 65  sociated index e
24560 6e 74 72 69 65 73 2e 20 20 45 78 61 63 74 6c 79  ntries.  Exactly
24570 20 6f 6e 65 20 6f 66 20 74 68 6f 73 65 20 64 65   one of those de
24580 6c 65 74 65 73 20 69 73 20 74 68 65 20 22 70 72  letes is the "pr
24590 69 6d 61 72 79 22 0a 2a 2a 20 64 65 6c 65 74 65  imary".** delete
245a0 2e 20 20 54 68 65 20 6f 74 68 65 72 73 20 61 72  .  The others ar
245b0 65 20 61 6c 6c 20 6f 6e 20 4f 50 46 4c 41 47 5f  e all on OPFLAG_
245c0 46 4f 52 44 45 4c 45 54 45 20 63 75 72 73 6f 72  FORDELETE cursor
245d0 73 20 6f 72 20 65 6c 73 65 20 61 72 65 0a 2a 2a  s or else are.**
245e0 20 6d 61 72 6b 65 64 20 77 69 74 68 20 74 68 65   marked with the
245f0 20 41 55 58 44 45 4c 45 54 45 20 66 6c 61 67 2e   AUXDELETE flag.
24600 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
24610 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61  FLAG_NCHANGE fla
24620 67 20 6f 66 20 50 32 20 28 4e 42 3a 20 50 32 20  g of P2 (NB: P2 
24630 6e 6f 74 20 50 35 29 20 69 73 20 73 65 74 2c 20  not P5) is set, 
24640 74 68 65 6e 20 74 68 65 20 72 6f 77 0a 2a 2a 20  then the row.** 
24650 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 20  change count is 
24660 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68  incremented (oth
24670 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a  erwise not)..**.
24680 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62  ** P1 must not b
24690 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20  e pseudo-table. 
246a0 20 49 74 20 68 61 73 20 74 6f 20 62 65 20 61 20   It has to be a 
246b0 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a  real table with.
246c0 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  ** multiple rows
246d0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73  ..**.** If P4 is
246e0 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 69   not NULL then i
246f0 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 54 61  t points to a Ta
24700 62 6c 65 20 73 74 72 75 74 75 72 65 2e 20 49 6e  ble struture. In
24710 20 74 68 69 73 20 63 61 73 65 20 65 69 74 68 65   this case eithe
24720 72 20 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65  r .** the update
24730 20 6f 72 20 70 72 65 2d 75 70 64 61 74 65 20 68   or pre-update h
24740 6f 6f 6b 2c 20 6f 72 20 62 6f 74 68 2c 20 6d 61  ook, or both, ma
24750 79 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 54 68  y be invoked. Th
24760 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
24770 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 70 6f  .** have been po
24780 73 69 74 69 6f 6e 65 64 20 75 73 69 6e 67 20 4f  sitioned using O
24790 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72  P_NotFound prior
247a0 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69   to invoking thi
247b0 73 20 6f 70 63 6f 64 65 20 69 6e 20 0a 2a 2a 20  s opcode in .** 
247c0 74 68 69 73 20 63 61 73 65 2e 20 53 70 65 63 69  this case. Speci
247d0 66 69 63 61 6c 6c 79 2c 20 69 66 20 6f 6e 65 20  fically, if one 
247e0 69 73 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 74  is configured, t
247f0 68 65 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f  he pre-update ho
24800 6f 6b 20 69 73 20 0a 2a 2a 20 69 6e 76 6f 6b 65  ok is .** invoke
24810 64 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20 4e  d if P4 is not N
24820 55 4c 4c 2e 20 54 68 65 20 75 70 64 61 74 65 2d  ULL. The update-
24830 68 6f 6f 6b 20 69 73 20 69 6e 76 6f 6b 65 64 20  hook is invoked 
24840 69 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67  if one is config
24850 75 72 65 64 2c 20 0a 2a 2a 20 50 34 20 69 73 20  ured, .** P4 is 
24860 6e 6f 74 20 4e 55 4c 4c 2c 20 61 6e 64 20 74 68  not NULL, and th
24870 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
24880 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
24890 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  P2..**.** If the
248a0 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
248b0 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
248c0 50 32 2c 20 74 68 65 6e 20 50 33 20 63 6f 6e 74  P2, then P3 cont
248d0 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
248e0 0a 2a 2a 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72  .** of the memor
248f0 79 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74  y cell that cont
24900 61 69 6e 73 20 74 68 65 20 76 61 6c 75 65 20 74  ains the value t
24910 68 61 74 20 74 68 65 20 72 6f 77 69 64 20 6f 66  hat the rowid of
24920 20 74 68 65 20 72 6f 77 20 77 69 6c 6c 0a 2a 2a   the row will.**
24930 20 62 65 20 73 65 74 20 74 6f 20 62 79 20 74 68   be set to by th
24940 65 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73  e update..*/.cas
24950 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20  e OP_Delete: {. 
24960 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
24970 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
24980 44 62 3b 0a 20 20 54 61 62 6c 65 20 2a 70 54 61  Db;.  Table *pTa
24990 62 3b 0a 20 20 69 6e 74 20 6f 70 66 6c 61 67 73  b;.  int opflags
249a0 3b 0a 0a 20 20 6f 70 66 6c 61 67 73 20 3d 20 70  ;..  opflags = p
249b0 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
249c0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
249d0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
249e0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
249f0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
24a00 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
24a10 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
24a20 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
24a30 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
24a40 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
24a50 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  rsor!=0 );.  ass
24a60 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
24a70 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 23  dMoveto==0 );..#
24a80 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
24a90 55 47 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  UG.  if( pOp->p4
24aa0 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26  type==P4_TABLE &
24ab0 26 20 48 61 73 52 6f 77 69 64 28 70 4f 70 2d 3e  & HasRowid(pOp->
24ac0 70 34 2e 70 54 61 62 29 20 26 26 20 70 4f 70 2d  p4.pTab) && pOp-
24ad0 3e 70 35 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a  >p5==0 ){.    /*
24ae0 20 49 66 20 70 35 20 69 73 20 7a 65 72 6f 2c 20   If p5 is zero, 
24af0 74 68 65 20 73 65 65 6b 20 6f 70 65 72 61 74 69  the seek operati
24b00 6f 6e 20 74 68 61 74 20 70 6f 73 69 74 69 6f 6e  on that position
24b10 65 64 20 74 68 65 20 63 75 72 73 6f 72 20 70 72  ed the cursor pr
24b20 69 6f 72 20 74 6f 0a 20 20 20 20 2a 2a 20 4f 50  ior to.    ** OP
24b30 5f 44 65 6c 65 74 65 20 77 69 6c 6c 20 68 61 76  _Delete will hav
24b40 65 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20 70  e also set the p
24b50 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  C->movetoTarget 
24b60 66 69 65 6c 64 20 74 6f 20 74 68 65 20 72 6f 77  field to the row
24b70 69 64 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65  id of.    ** the
24b80 20 72 6f 77 20 74 68 61 74 20 69 73 20 62 65 69   row that is bei
24b90 6e 67 20 64 65 6c 65 74 65 64 20 2a 2f 0a 20 20  ng deleted */.  
24ba0 20 20 69 36 34 20 69 4b 65 79 20 3d 20 30 3b 0a    i64 iKey = 0;.
24bb0 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
24bc0 4b 65 79 53 69 7a 65 28 70 43 2d 3e 75 63 2e 70  KeySize(pC->uc.p
24bd0 43 75 72 73 6f 72 2c 20 26 69 4b 65 79 29 3b 0a  Cursor, &iKey);.
24be0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
24bf0 6d 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d 69 4b  movetoTarget==iK
24c00 65 79 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  ey );.  }.#endif
24c10 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75 70  ..  /* If the up
24c20 64 61 74 65 2d 68 6f 6f 6b 20 6f 72 20 70 72 65  date-hook or pre
24c30 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c  -update-hook wil
24c40 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65  l be invoked, se
24c50 74 20 7a 44 62 20 74 6f 0a 20 20 2a 2a 20 74 68  t zDb to.  ** th
24c60 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 62  e name of the db
24c70 20 74 6f 20 70 61 73 73 20 61 73 20 74 6f 20 69   to pass as to i
24c80 74 2e 20 41 6c 73 6f 20 73 65 74 20 6c 6f 63 61  t. Also set loca
24c90 6c 20 70 54 61 62 20 74 6f 20 61 20 63 6f 70 79  l pTab to a copy
24ca0 0a 20 20 2a 2a 20 6f 66 20 70 34 2e 70 54 61 62  .  ** of p4.pTab
24cb0 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 70 35  . Finally, if p5
24cc0 20 69 73 20 74 72 75 65 2c 20 69 6e 64 69 63 61   is true, indica
24cd0 74 69 6e 67 20 74 68 61 74 20 74 68 69 73 20 63  ting that this c
24ce0 75 72 73 6f 72 20 77 61 73 0a 20 20 2a 2a 20 6c  ursor was.  ** l
24cf0 61 73 74 20 6d 6f 76 65 64 20 77 69 74 68 20 4f  ast moved with O
24d00 50 5f 4e 65 78 74 20 6f 72 20 4f 50 5f 50 72 65  P_Next or OP_Pre
24d10 76 2c 20 6e 6f 74 20 53 65 65 6b 20 6f 72 20 4e  v, not Seek or N
24d20 6f 74 46 6f 75 6e 64 2c 20 73 65 74 20 0a 20 20  otFound, set .  
24d30 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 2e 6d 6f  ** VdbeCursor.mo
24d40 76 65 74 6f 54 61 72 67 65 74 20 74 6f 20 74 68  vetoTarget to th
24d50 65 20 63 75 72 72 65 6e 74 20 72 6f 77 69 64 2e  e current rowid.
24d60 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e    */.  if( pOp->
24d70 70 34 2e 70 54 61 62 20 26 26 20 48 41 53 5f 55  p4.pTab && HAS_U
24d80 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29  PDATE_HOOK(db) )
24d90 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
24da0 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20  ->iDb>=0 );.    
24db0 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43  zDb = db->aDb[pC
24dc0 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20  ->iDb].zName;.  
24dd0 20 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34    pTab = pOp->p4
24de0 2e 70 54 61 62 3b 0a 20 20 20 20 69 66 28 20 70  .pTab;.    if( p
24df0 4f 70 2d 3e 70 35 20 26 26 20 70 43 2d 3e 69 73  Op->p5 && pC->is
24e00 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 73  Table ){.      s
24e10 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
24e20 7a 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ze(pC->uc.pCurso
24e30 72 2c 20 26 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  r, &pC->movetoTa
24e40 72 67 65 74 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rget);.    }.  }
24e50 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
24e60 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45  ENABLE_PREUPDATE
24e70 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b  _HOOK.  /* Invok
24e80 65 20 74 68 65 20 70 72 65 2d 75 70 64 61 74 65  e the pre-update
24e90 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
24ea0 64 2e 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  d. */.  if( db->
24eb0 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
24ec0 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 54  ck && pOp->p4.pT
24ed0 61 62 20 26 26 20 48 61 73 52 6f 77 69 64 28 70  ab && HasRowid(p
24ee0 54 61 62 29 20 29 7b 0a 20 20 20 20 61 73 73 65  Tab) ){.    asse
24ef0 72 74 28 20 21 28 6f 70 66 6c 61 67 73 20 26 20  rt( !(opflags & 
24f00 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29  OPFLAG_ISUPDATE)
24f10 20 7c 7c 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70   || (aMem[pOp->p
24f20 33 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3].flags & MEM_I
24f30 6e 74 29 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  nt) );.    sqlit
24f40 65 33 56 64 62 65 50 72 65 55 70 64 61 74 65 48  e3VdbePreUpdateH
24f50 6f 6f 6b 28 70 2c 20 70 43 2c 0a 20 20 20 20 20  ook(p, pC,.     
24f60 20 20 20 28 6f 70 66 6c 61 67 73 20 26 20 4f 50     (opflags & OP
24f70 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f  FLAG_ISUPDATE) ?
24f80 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a   SQLITE_UPDATE :
24f90 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20   SQLITE_DELETE, 
24fa0 0a 20 20 20 20 20 20 20 20 7a 44 62 2c 20 70 54  .        zDb, pT
24fb0 61 62 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  ab, pC->movetoTa
24fc0 72 67 65 74 2c 0a 20 20 20 20 20 20 20 20 70 4f  rget,.        pO
24fd0 70 2d 3e 70 33 0a 20 20 20 20 29 3b 0a 20 20 7d  p->p3.    );.  }
24fe0 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 6f  .#endif..  if( o
24ff0 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f  pflags & OPFLAG_
25000 49 53 4e 4f 4f 50 20 29 20 62 72 65 61 6b 3b 0a  ISNOOP ) break;.
25010 20 0a 20 20 2f 2a 20 4f 6e 6c 79 20 66 6c 61 67   .  /* Only flag
25020 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 65  s that can be se
25030 74 20 61 72 65 20 53 41 56 45 50 4f 49 53 54 49  t are SAVEPOISTI
25040 4f 4e 20 61 6e 64 20 41 55 58 44 45 4c 45 54 45  ON and AUXDELETE
25050 20 2a 2f 20 0a 20 20 61 73 73 65 72 74 28 20 28   */ .  assert( (
25060 70 4f 70 2d 3e 70 35 20 26 20 7e 28 4f 50 46 4c  pOp->p5 & ~(OPFL
25070 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 7c  AG_SAVEPOSITION|
25080 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
25090 29 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ))==0 );.  asser
250a0 74 28 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  t( OPFLAG_SAVEPO
250b0 53 49 54 49 4f 4e 3d 3d 42 54 52 45 45 5f 53 41  SITION==BTREE_SA
250c0 56 45 50 4f 53 49 54 49 4f 4e 20 29 3b 0a 20 20  VEPOSITION );.  
250d0 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 41  assert( OPFLAG_A
250e0 55 58 44 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f  UXDELETE==BTREE_
250f0 41 55 58 44 45 4c 45 54 45 20 29 3b 0a 0a 23 69  AUXDELETE );..#i
25100 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
25110 47 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d  G.  if( p->pFram
25120 65 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  e==0 ){.    if( 
25130 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 3d  pC->isEphemeral=
25140 3d 30 0a 20 20 20 20 20 20 20 20 26 26 20 28 70  =0.        && (p
25150 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
25160 41 55 58 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20  AUXDELETE)==0.  
25170 20 20 20 20 20 20 26 26 20 28 70 43 2d 3e 77 72        && (pC->wr
25180 46 6c 61 67 20 26 20 4f 50 46 4c 41 47 5f 46 4f  Flag & OPFLAG_FO
25190 52 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20 20 20  RDELETE)==0.    
251a0 20 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74 72    ){.      nExtr
251b0 61 44 65 6c 65 74 65 2b 2b 3b 0a 20 20 20 20 7d  aDelete++;.    }
251c0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
251d0 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
251e0 45 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74 72  E ){.      nExtr
251f0 61 44 65 6c 65 74 65 2d 2d 3b 0a 20 20 20 20 7d  aDelete--;.    }
25200 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 72  .  }.#endif..  r
25210 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
25220 44 65 6c 65 74 65 28 70 43 2d 3e 75 63 2e 70 43  Delete(pC->uc.pC
25230 75 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 35 29 3b  ursor, pOp->p5);
25240 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
25250 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
25260 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
25270 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
25280 72 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  rror;..  /* Invo
25290 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  ke the update-ho
252a0 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20  ok if required. 
252b0 2a 2f 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73  */.  if( opflags
252c0 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
252d0 45 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61  E ){.    p->nCha
252e0 6e 67 65 2b 2b 3b 0a 20 20 20 20 69 66 28 20 72  nge++;.    if( r
252f0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
25300 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
25310 61 63 6b 20 26 26 20 48 61 73 52 6f 77 69 64 28  ack && HasRowid(
25320 70 54 61 62 29 20 29 7b 0a 20 20 20 20 20 20 64  pTab) ){.      d
25330 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
25340 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72  ck(db->pUpdateAr
25350 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  g, SQLITE_DELETE
25360 2c 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61  , zDb, pTab->zNa
25370 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 70 43  me,.          pC
25380 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 29 3b  ->movetoTarget);
25390 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
253a0 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20  C->iDb>=0 );.   
253b0 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b   }.  }..  break;
253c0 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  .}./* Opcode: Re
253d0 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a  setCount * * * *
253e0 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c   *.**.** The val
253f0 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65  ue of the change
25400 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69   counter is copi
25410 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  ed to the databa
25420 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61  se handle.** cha
25430 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74  nge counter (ret
25440 75 72 6e 65 64 20 62 79 20 73 75 62 73 65 71 75  urned by subsequ
25450 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c  ent calls to sql
25460 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e  ite3_changes()).
25470 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73  .** Then the VMs
25480 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65   internal change
25490 20 63 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20   counter resets 
254a0 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73  to 0..** This is
254b0 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72   used by trigger
254c0 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61   programs..*/.ca
254d0 73 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74  se OP_ResetCount
254e0 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  : {.  sqlite3Vdb
254f0 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20  eSetChanges(db, 
25500 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70  p->nChange);.  p
25510 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20  ->nChange = 0;. 
25520 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
25530 63 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70  code: SorterComp
25540 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34 0a  are P1 P2 P3 P4.
25550 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66  ** Synopsis:  if
25560 20 6b 65 79 28 50 31 29 21 3d 74 72 69 6d 28 72   key(P1)!=trim(r
25570 5b 50 33 5d 2c 50 34 29 20 67 6f 74 6f 20 50 32  [P3],P4) goto P2
25580 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73  .**.** P1 is a s
25590 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20 54 68  orter cursor. Th
255a0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
255b0 6f 6d 70 61 72 65 73 20 61 20 70 72 65 66 69 78  ompares a prefix
255c0 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72   of the.** recor
255d0 64 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74  d blob in regist
255e0 65 72 20 50 33 20 61 67 61 69 6e 73 74 20 61 20  er P3 against a 
255f0 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 65 6e  prefix of the en
25600 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 74 68 65  try that .** the
25610 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20 63   sorter cursor c
25620 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20  urrently points 
25630 74 6f 2e 20 20 4f 6e 6c 79 20 74 68 65 20 66 69  to.  Only the fi
25640 72 73 74 20 50 34 20 66 69 65 6c 64 73 0a 2a 2a  rst P4 fields.**
25650 20 6f 66 20 72 5b 50 33 5d 20 61 6e 64 20 74 68   of r[P3] and th
25660 65 20 73 6f 72 74 65 72 20 72 65 63 6f 72 64 20  e sorter record 
25670 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a  are compared..**
25680 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 33  .** If either P3
25690 20 6f 72 20 74 68 65 20 73 6f 72 74 65 72 20 63   or the sorter c
256a0 6f 6e 74 61 69 6e 73 20 61 20 4e 55 4c 4c 20 69  ontains a NULL i
256b0 6e 20 6f 6e 65 20 6f 66 20 74 68 65 69 72 20 73  n one of their s
256c0 69 67 6e 69 66 69 63 61 6e 74 0a 2a 2a 20 66 69  ignificant.** fi
256d0 65 6c 64 73 20 28 6e 6f 74 20 63 6f 75 6e 74 69  elds (not counti
256e0 6e 67 20 74 68 65 20 50 34 20 66 69 65 6c 64 73  ng the P4 fields
256f0 20 61 74 20 74 68 65 20 65 6e 64 20 77 68 69 63   at the end whic
25700 68 20 61 72 65 20 69 67 6e 6f 72 65 64 29 20 74  h are ignored) t
25710 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61  hen.** the compa
25720 72 69 73 6f 6e 20 69 73 20 61 73 73 75 6d 65 64  rison is assumed
25730 20 74 6f 20 62 65 20 65 71 75 61 6c 2e 0a 2a 2a   to be equal..**
25740 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68  .** Fall through
25750 20 74 6f 20 6e 65 78 74 20 69 6e 73 74 72 75 63   to next instruc
25760 74 69 6f 6e 20 69 66 20 74 68 65 20 74 77 6f 20  tion if the two 
25770 72 65 63 6f 72 64 73 20 63 6f 6d 70 61 72 65 20  records compare 
25780 65 71 75 61 6c 20 74 6f 0a 2a 2a 20 65 61 63 68  equal to.** each
25790 20 6f 74 68 65 72 2e 20 20 4a 75 6d 70 20 74 6f   other.  Jump to
257a0 20 50 32 20 69 66 20 74 68 65 79 20 61 72 65 20   P2 if they are 
257b0 64 69 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61  different..*/.ca
257c0 73 65 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70  se OP_SorterComp
257d0 61 72 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  are: {.  VdbeCur
257e0 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
257f0 65 73 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 43 6f  es;.  int nKeyCo
25800 6c 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70  l;..  pC = p->ap
25810 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
25820 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
25830 28 70 43 29 20 29 3b 0a 20 20 61 73 73 65 72 74  (pC) );.  assert
25840 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
25850 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 49 6e  4_INT32 );.  pIn
25860 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
25870 33 5d 3b 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d 20  3];.  nKeyCol = 
25880 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 72 65 73  pOp->p4.i;.  res
25890 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 0;.  rc = sql
258a0 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 43 6f  ite3VdbeSorterCo
258b0 6d 70 61 72 65 28 70 43 2c 20 70 49 6e 33 2c 20  mpare(pC, pIn3, 
258c0 6e 4b 65 79 43 6f 6c 2c 20 26 72 65 73 29 3b 0a  nKeyCol, &res);.
258d0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
258e0 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69  n(res!=0,2);.  i
258f0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
25900 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
25910 0a 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74  .  if( res ) got
25920 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
25930 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70  break;.};../* Op
25940 63 6f 64 65 3a 20 53 6f 72 74 65 72 44 61 74 61  code: SorterData
25950 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
25960 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
25970 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74  =data.**.** Writ
25980 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
25990 50 32 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  P2 the current s
259a0 6f 72 74 65 72 20 64 61 74 61 20 66 6f 72 20 73  orter data for s
259b0 6f 72 74 65 72 20 63 75 72 73 6f 72 20 50 31 2e  orter cursor P1.
259c0 0a 2a 2a 20 54 68 65 6e 20 63 6c 65 61 72 20 74  .** Then clear t
259d0 68 65 20 63 6f 6c 75 6d 6e 20 68 65 61 64 65 72  he column header
259e0 20 63 61 63 68 65 20 6f 6e 20 63 75 72 73 6f 72   cache on cursor
259f0 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P3..**.** This 
25a00 6f 70 63 6f 64 65 20 69 73 20 6e 6f 72 6d 61 6c  opcode is normal
25a10 6c 79 20 75 73 65 20 74 6f 20 6d 6f 76 65 20 61  ly use to move a
25a20 20 72 65 63 6f 72 64 20 6f 75 74 20 6f 66 20 74   record out of t
25a30 68 65 20 73 6f 72 74 65 72 20 61 6e 64 20 69 6e  he sorter and in
25a40 74 6f 0a 2a 2a 20 61 20 72 65 67 69 73 74 65 72  to.** a register
25a50 20 74 68 61 74 20 69 73 20 74 68 65 20 73 6f 75   that is the sou
25a60 72 63 65 20 66 6f 72 20 61 20 70 73 65 75 64 6f  rce for a pseudo
25a70 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 20 63 72  -table cursor cr
25a80 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 4f  eated using.** O
25a90 70 65 6e 50 73 65 75 64 6f 2e 20 20 54 68 61 74  penPseudo.  That
25aa0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75   pseudo-table cu
25ab0 72 73 6f 72 20 69 73 20 74 68 65 20 6f 6e 65 20  rsor is the one 
25ac0 74 68 61 74 20 69 73 20 69 64 65 6e 74 69 66 69  that is identifi
25ad0 65 64 20 62 79 0a 2a 2a 20 70 61 72 61 6d 65 74  ed by.** paramet
25ae0 65 72 20 50 33 2e 20 20 43 6c 65 61 72 69 6e 67  er P3.  Clearing
25af0 20 74 68 65 20 50 33 20 63 6f 6c 75 6d 6e 20 63   the P3 column c
25b00 61 63 68 65 20 61 73 20 70 61 72 74 20 6f 66 20  ache as part of 
25b10 74 68 69 73 20 6f 70 63 6f 64 65 20 73 61 76 65  this opcode save
25b20 73 0a 2a 2a 20 75 73 20 66 72 6f 6d 20 68 61 76  s.** us from hav
25b30 69 6e 67 20 74 6f 20 69 73 73 75 65 20 61 20 73  ing to issue a s
25b40 65 70 61 72 61 74 65 20 4e 75 6c 6c 52 6f 77 20  eparate NullRow 
25b50 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 63  instruction to c
25b60 6c 65 61 72 20 74 68 61 74 20 63 61 63 68 65 2e  lear that cache.
25b70 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
25b80 65 72 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65  erData: {.  Vdbe
25b90 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70  Cursor *pC;..  p
25ba0 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
25bb0 3e 70 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  >p2];.  pC = p->
25bc0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
25bd0 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
25be0 65 72 28 70 43 29 20 29 3b 0a 20 20 72 63 20 3d  er(pC) );.  rc =
25bf0 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
25c00 65 72 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75  erRowkey(pC, pOu
25c10 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63  t);.  assert( rc
25c20 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28  !=SQLITE_OK || (
25c30 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pOut->flags & ME
25c40 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20 20 61 73 73  M_Blob) );.  ass
25c50 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
25c60 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
25c70 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 72  ursor );.  if( r
25c80 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
25c90 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70  ue_to_error;.  p
25ca0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d  ->apCsr[pOp->p3]
25cb0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
25cc0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62  CACHE_STALE;.  b
25cd0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
25ce0 64 65 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50  de: RowData P1 P
25cf0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
25d00 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a  sis: r[P2]=data.
25d10 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
25d20 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65   register P2 the
25d30 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 64 61   complete row da
25d40 74 61 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31  ta for cursor P1
25d50 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f  ..** There is no
25d60 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20   interpretation 
25d70 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a  of the data.  .*
25d80 2a 20 49 74 20 69 73 20 6a 75 73 74 20 63 6f 70  * It is just cop
25d90 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20  ied onto the P2 
25da0 72 65 67 69 73 74 65 72 20 65 78 61 63 74 6c 79  register exactly
25db0 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f   as .** it is fo
25dc0 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  und in the datab
25dd0 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
25de0 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  If the P1 cursor
25df0 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e   must be pointin
25e00 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77  g to a valid row
25e10 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77   (not a NULL row
25e20 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74  ).** of a real t
25e30 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
25e40 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20  do-table..*/./* 
25e50 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50  Opcode: RowKey P
25e60 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
25e70 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 6b 65  nopsis: r[P2]=ke
25e80 79 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  y.**.** Write in
25e90 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74  to register P2 t
25ea0 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20  he complete row 
25eb0 6b 65 79 20 66 6f 72 20 63 75 72 73 6f 72 20 50  key for cursor P
25ec0 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e  1..** There is n
25ed0 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  o interpretation
25ee0 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a   of the data.  .
25ef0 2a 2a 20 54 68 65 20 6b 65 79 20 69 73 20 63 6f  ** The key is co
25f00 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 32  pied onto the P2
25f10 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74 6c   register exactl
25f20 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66  y as .** it is f
25f30 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61  ound in the data
25f40 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
25f50 20 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f   If the P1 curso
25f60 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69  r must be pointi
25f70 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f  ng to a valid ro
25f80 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f  w (not a NULL ro
25f90 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20  w).** of a real 
25fa0 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
25fb0 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  udo-table..*/.ca
25fc0 73 65 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61  se OP_RowKey:.ca
25fd0 73 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b  se OP_RowData: {
25fe0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
25ff0 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
26000 43 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 20  Crsr;.  u32 n;. 
26010 20 69 36 34 20 6e 36 34 3b 0a 0a 20 20 70 4f 75   i64 n64;..  pOu
26020 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
26030 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  2];.  memAboutTo
26040 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
26050 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74  ..  /* Note that
26060 20 52 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77 44   RowKey and RowD
26070 61 74 61 20 61 72 65 20 72 65 61 6c 6c 79 20 65  ata are really e
26080 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20  xactly the same 
26090 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20  instruction */. 
260a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
260b0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
260c0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
260d0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
260e0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
260f0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
26100 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
26110 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
26120 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  );.  assert( isS
26130 6f 72 74 65 72 28 70 43 29 3d 3d 30 20 29 3b 0a  orter(pC)==0 );.
26140 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
26150 54 61 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70  Table || pOp->op
26160 63 6f 64 65 21 3d 4f 50 5f 52 6f 77 44 61 74 61  code!=OP_RowData
26170 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
26180 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 7c 7c 20  ->isTable==0 || 
26190 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
261a0 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73  RowData );.  ass
261b0 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  ert( pC->nullRow
261c0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
261d0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
261e0 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
261f0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a  pC->uc.pCursor;.
26200 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77  .  /* The OP_Row
26210 4b 65 79 20 61 6e 64 20 4f 50 5f 52 6f 77 44 61  Key and OP_RowDa
26220 74 61 20 6f 70 63 6f 64 65 73 20 61 6c 77 61 79  ta opcodes alway
26230 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45  s follow OP_NotE
26240 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50  xists or.  ** OP
26250 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20  _Rewind/Op_Next 
26260 77 69 74 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e  with no interven
26270 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ing instructions
26280 20 74 68 61 74 20 6d 69 67 68 74 20 69 6e 76 61   that might inva
26290 6c 69 64 61 74 65 0a 20 20 2a 2a 20 74 68 65 20  lidate.  ** the 
262a0 63 75 72 73 6f 72 2e 20 20 49 66 20 74 68 69 73  cursor.  If this
262b0 20 77 68 65 72 65 20 6e 6f 74 20 74 68 65 20 63   where not the c
262c0 61 73 65 2c 20 6f 6e 20 6f 66 20 74 68 65 20 66  ase, on of the f
262d0 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72 74 28  ollowing assert(
262e0 29 73 0a 20 20 2a 2a 20 77 6f 75 6c 64 20 66 61  )s.  ** would fa
262f0 69 6c 2e 20 20 53 68 6f 75 6c 64 20 74 68 69 73  il.  Should this
26300 20 65 76 65 72 20 63 68 61 6e 67 65 20 28 62 65   ever change (be
26310 63 61 75 73 65 20 6f 66 20 63 68 61 6e 67 65 73  cause of changes
26320 20 69 6e 20 74 68 65 20 63 6f 64 65 0a 20 20 2a   in the code.  *
26330 2a 20 67 65 6e 65 72 61 74 6f 72 29 20 74 68 65  * generator) the
26340 6e 20 74 68 65 20 66 69 78 20 77 6f 75 6c 64 20  n the fix would 
26350 62 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 63  be to insert a c
26360 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69  all to.  ** sqli
26370 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
26380 65 74 6f 28 29 2e 0a 20 20 2a 2f 0a 20 20 61 73  eto()..  */.  as
26390 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
263a0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
263b0 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
263c0 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
263d0 69 64 28 70 43 72 73 72 29 20 29 3b 0a 23 69 66  id(pCrsr) );.#if
263e0 20 30 20 20 2f 2a 20 4e 6f 74 20 72 65 71 75 69   0  /* Not requi
263f0 72 65 64 20 64 75 65 20 74 6f 20 74 68 65 20 70  red due to the p
26400 72 65 76 69 6f 75 73 20 74 6f 20 61 73 73 65 72  revious to asser
26410 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 2a  t() statements *
26420 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
26430 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
26440 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63 21 3d  (pC);.  if( rc!=
26450 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
26460 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
26470 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69  ror;.#endif..  i
26480 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  f( pC->isTable==
26490 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
264a0 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b   !pC->isTable );
264b0 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63  .    VVA_ONLY(rc
264c0 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65   =) sqlite3Btree
264d0 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c 20 26  KeySize(pCrsr, &
264e0 6e 36 34 29 3b 0a 20 20 20 20 61 73 73 65 72 74  n64);.    assert
264f0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
26500 29 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 62 65  );    /* True be
26510 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d  cause of CursorM
26520 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f  oveto() call abo
26530 76 65 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 36  ve */.    if( n6
26540 34 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  4>db->aLimit[SQL
26550 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
26560 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ] ){.      goto 
26570 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20  too_big;.    }. 
26580 20 20 20 6e 20 3d 20 28 75 33 32 29 6e 36 34 3b     n = (u32)n64;
26590 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 56  .  }else{.    VV
265a0 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c  A_ONLY(rc =) sql
265b0 69 74 65 33 42 74 72 65 65 44 61 74 61 53 69 7a  ite3BtreeDataSiz
265c0 65 28 70 43 72 73 72 2c 20 26 6e 29 3b 0a 20 20  e(pCrsr, &n);.  
265d0 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
265e0 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a  LITE_OK );    /*
265f0 20 44 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e   DataSize() cann
26600 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 69  ot fail */.    i
26610 66 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c  f( n>(u32)db->aL
26620 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
26630 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
26640 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
26650 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 74 65 73  .    }.  }.  tes
26660 74 63 61 73 65 28 20 6e 3d 3d 30 20 29 3b 0a 20  tcase( n==0 );. 
26670 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
26680 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a  MemClearAndResiz
26690 65 28 70 4f 75 74 2c 20 4d 41 58 28 6e 2c 33 32  e(pOut, MAX(n,32
266a0 29 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  )) ){.    goto n
266b0 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75  o_mem;.  }.  pOu
266c0 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53  t->n = n;.  MemS
266d0 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
266e0 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69 66   MEM_Blob);.  if
266f0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
26700 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
26710 69 74 65 33 42 74 72 65 65 4b 65 79 28 70 43 72  ite3BtreeKey(pCr
26720 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e  sr, 0, n, pOut->
26730 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  z);.  }else{.   
26740 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
26750 65 65 44 61 74 61 28 70 43 72 73 72 2c 20 30 2c  eeData(pCrsr, 0,
26760 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20   n, pOut->z);.  
26770 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
26780 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
26790 72 72 6f 72 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  rror;.  pOut->en
267a0 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
267b0 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65    /* In case the
267c0 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 61   blob is ever ca
267d0 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20  st to text */.  
267e0 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
267f0 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 52 45 47  IZE(pOut);.  REG
26800 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
26810 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72  >p2, pOut);.  br
26820 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
26830 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a  e: Rowid P1 P2 *
26840 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
26850 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a  : r[P2]=rowid.**
26860 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67  .** Store in reg
26870 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65  ister P2 an inte
26880 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65  ger which is the
26890 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c   key of the tabl
268a0 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20  e entry that.** 
268b0 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
268c0 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20  point to..**.** 
268d0 50 31 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  P1 can be either
268e0 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62   an ordinary tab
268f0 6c 65 20 6f 72 20 61 20 76 69 72 74 75 61 6c 20  le or a virtual 
26900 74 61 62 6c 65 2e 20 20 54 68 65 72 65 20 75 73  table.  There us
26910 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65  ed to.** be a se
26920 70 61 72 61 74 65 20 4f 50 5f 56 52 6f 77 69 64  parate OP_VRowid
26930 20 6f 70 63 6f 64 65 20 66 6f 72 20 75 73 65 20   opcode for use 
26940 77 69 74 68 20 76 69 72 74 75 61 6c 20 74 61 62  with virtual tab
26950 6c 65 73 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a  les, but this.**
26960 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20   one opcode now 
26970 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68 20 74  works for both t
26980 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63  able types..*/.c
26990 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20  ase OP_Rowid: { 
269a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269b0 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62  /* out2 */.  Vdb
269c0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
269d0 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f  64 v;.  sqlite3_
269e0 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
269f0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
26a00 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20  ule *pModule;.. 
26a10 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
26a20 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
26a30 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
26a40 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
26a50 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
26a60 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
26a70 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
26a80 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
26a90 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
26aa0 65 21 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44  e!=CURTYPE_PSEUD
26ab0 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  O || pC->nullRow
26ac0 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75   );.  if( pC->nu
26ad0 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 70 4f 75  llRow ){.    pOu
26ae0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
26af0 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ull;.    break;.
26b00 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
26b10 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 29  deferredMoveto )
26b20 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f  {.    v = pC->mo
26b30 76 65 74 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e  vetoTarget;.#ifn
26b40 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
26b50 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d  VIRTUALTABLE.  }
26b60 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 65 43 75  else if( pC->eCu
26b70 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56  rType==CURTYPE_V
26b80 54 41 42 20 29 7b 0a 20 20 20 20 61 73 73 65 72  TAB ){.    asser
26b90 74 28 20 70 43 2d 3e 75 63 2e 70 56 43 75 72 21  t( pC->uc.pVCur!
26ba0 3d 30 20 29 3b 0a 20 20 20 20 70 56 74 61 62 20  =0 );.    pVtab 
26bb0 3d 20 70 43 2d 3e 75 63 2e 70 56 43 75 72 2d 3e  = pC->uc.pVCur->
26bc0 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75  pVtab;.    pModu
26bd0 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
26be0 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ule;.    assert(
26bf0 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
26c00 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f   );.    rc = pMo
26c10 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d  dule->xRowid(pC-
26c20 3e 75 63 2e 70 56 43 75 72 2c 20 26 76 29 3b 0a  >uc.pVCur, &v);.
26c30 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49      sqlite3VtabI
26c40 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
26c50 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72  Vtab);.    if( r
26c60 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
26c70 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e  ue_to_error;.#en
26c80 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
26c90 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
26ca0 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  */.  }else{.    
26cb0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
26cc0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
26cd0 52 45 45 20 29 3b 0a 20 20 20 20 61 73 73 65 72  REE );.    asser
26ce0 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
26cf0 72 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  r!=0 );.    rc =
26d00 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
26d10 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b 0a 20  orRestore(pC);. 
26d20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
26d30 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
26d40 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d  ror;.    if( pC-
26d50 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
26d60 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
26d70 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20  MEM_Null;.      
26d80 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
26d90 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
26da0 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 75 63  eeKeySize(pC->uc
26db0 2e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20  .pCursor, &v);. 
26dc0 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
26dd0 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 2f 2a 20  QLITE_OK );  /* 
26de0 41 6c 77 61 79 73 20 73 6f 20 62 65 63 61 75 73  Always so becaus
26df0 65 20 6f 66 20 43 75 72 73 6f 72 52 65 73 74 6f  e of CursorResto
26e00 72 65 28 29 20 61 62 6f 76 65 20 2a 2f 0a 20 20  re() above */.  
26e10 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
26e20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  v;.  break;.}../
26e30 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f  * Opcode: NullRo
26e40 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  w P1 * * * *.**.
26e50 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73  ** Move the curs
26e60 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20  or P1 to a null 
26e70 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c  row.  Any OP_Col
26e80 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a  umn operations.*
26e90 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77 68 69  * that occur whi
26ea0 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  le the cursor is
26eb0 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77   on the null row
26ec0 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20   will always.** 
26ed0 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f  write a NULL..*/
26ee0 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77  .case OP_NullRow
26ef0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
26f00 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28   *pC;..  assert(
26f10 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
26f20 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
26f30 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
26f40 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
26f50 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
26f60 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
26f70 3d 20 31 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 1;.  pC->cache
26f80 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
26f90 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d 3e  TALE;.  if( pC->
26fa0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
26fb0 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20 61  E_BTREE ){.    a
26fc0 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
26fd0 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20  ursor!=0 );.    
26fe0 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61  sqlite3BtreeClea
26ff0 72 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e 70  rCursor(pC->uc.p
27000 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62  Cursor);.  }.  b
27010 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
27020 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 50  de: Last P1 P2 P
27030 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3 * *.**.** The 
27040 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20  next use of the 
27050 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20  Rowid or Column 
27060 6f 72 20 50 72 65 76 20 69 6e 73 74 72 75 63 74  or Prev instruct
27070 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77  ion for P1 .** w
27080 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65  ill refer to the
27090 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74   last entry in t
270a0 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
270b0 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  e or index..** I
270c0 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
270d0 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e  ndex is empty an
270e0 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d  d P2>0, then jum
270f0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
27100 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73   P2..** If P2 is
27110 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62   0 or if the tab
27120 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e  le or index is n
27130 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74  ot empty, fall t
27140 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
27150 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
27160 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
27170 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
27180 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
27190 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
271a0 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c  n reverse order,
271b0 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64  .** from the end
271c0 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69   toward the begi
271d0 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72  nning.  In other
271e0 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
271f0 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
27200 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c  red to use Prev,
27210 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63 61   not Next..*/.ca
27220 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20  se OP_Last: {   
27230 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
27240 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
27250 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
27260 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
27270 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
27280 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
27290 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
272a0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
272b0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
272c0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
272d0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
272e0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
272f0 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  E );.  pCrsr = p
27300 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20  C->uc.pCursor;. 
27310 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65   res = 0;.  asse
27320 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a  rt( pCrsr!=0 );.
27330 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
27340 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26  reeLast(pCrsr, &
27350 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  res);.  pC->null
27360 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20  Row = (u8)res;. 
27370 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
27380 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
27390 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
273a0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e  HE_STALE;.  pC->
273b0 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 70 4f 70  seekResult = pOp
273c0 2d 3e 70 33 3b 0a 23 69 66 64 65 66 20 53 51 4c  ->p3;.#ifdef SQL
273d0 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
273e0 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c 61 73 74  seekOp = OP_Last
273f0 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 72  ;.#endif.  if( r
27400 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
27410 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
27420 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a  f( pOp->p2>0 ){.
27430 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
27440 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
27450 20 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74     if( res ) got
27460 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
27470 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  }.  break;.}.../
27480 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50  * Opcode: Sort P
27490 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
274a0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65   This opcode doe
274b0 73 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  s exactly the sa
274c0 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52  me thing as OP_R
274d0 65 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61  ewind except tha
274e0 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e  t.** it incremen
274f0 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74  ts an undocument
27500 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  ed global variab
27510 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  le used for test
27520 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69  ing..**.** Sorti
27530 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68  ng is accomplish
27540 65 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65  ed by writing re
27550 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72  cords into a sor
27560 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74  ting index,.** t
27570 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68  hen rewinding th
27580 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61  at index and pla
27590 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f  ying it back fro
275a0 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a  m beginning to.*
275b0 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74  * end.  We use t
275c0 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64  he OP_Sort opcod
275d0 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f  e instead of OP_
275e0 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65  Rewind to do the
275f0 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f  .** rewinding so
27600 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c   that the global
27610 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62   variable will b
27620 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e  e incremented an
27630 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20  d.** regression 
27640 74 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d  tests can determ
27650 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
27660 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  ot the optimizer
27670 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79   is.** correctly
27680 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20   optimizing out 
27690 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  sorts..*/.case O
276a0 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20  P_SorterSort:   
276b0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
276c0 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20   OP_Sort: {     
276d0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69     /* jump */.#i
276e0 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
276f0 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  .  sqlite3_sort_
27700 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74  count++;.  sqlit
27710 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d  e3_search_count-
27720 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61  -;.#endif.  p->a
27730 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53  Counter[SQLITE_S
27740 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b  TMTSTATUS_SORT]+
27750 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  +;.  /* Fall thr
27760 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77  ough into OP_Rew
27770 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f  ind */.}./* Opco
27780 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32  de: Rewind P1 P2
27790 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
277a0 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
277b0 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
277c0 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63   or Next instruc
277d0 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
277e0 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
277f0 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e  e first entry in
27800 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
27810 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a  ble or index..**
27820 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   If the table or
27830 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 2c   index is empty,
27840 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
27850 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74  y to P2..** If t
27860 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
27870 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20  x is not empty, 
27880 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
27890 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a  the following .*
278a0 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  * instruction..*
278b0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
278c0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
278d0 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
278e0 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64   move in forward
278f0 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
27900 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  the beginning to
27910 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49  ward the end.  I
27920 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
27930 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
27940 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
27950 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76  e Next, not Prev
27960 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77  ..*/.case OP_Rew
27970 69 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ind: {        /*
27980 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
27990 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
279a0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
279b0 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65  int res;..  asse
279c0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
279d0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
279e0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
279f0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
27a00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
27a10 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  0 );.  assert( i
27a20 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f  sSorter(pC)==(pO
27a30 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f  p->opcode==OP_So
27a40 72 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72  rterSort) );.  r
27a50 65 73 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53  es = 1;.#ifdef S
27a60 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
27a70 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65  ->seekOp = OP_Re
27a80 77 69 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69  wind;.#endif.  i
27a90 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  f( isSorter(pC) 
27aa0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
27ab0 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 77  te3VdbeSorterRew
27ac0 69 6e 64 28 70 43 2c 20 26 72 65 73 29 3b 0a 20  ind(pC, &res);. 
27ad0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
27ae0 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
27af0 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
27b00 29 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70  );.    pCrsr = p
27b10 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20  C->uc.pCursor;. 
27b20 20 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72     assert( pCrsr
27b30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
27b40 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70  ite3BtreeFirst(p
27b50 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  Crsr, &res);.   
27b60 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
27b70 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  eto = 0;.    pC-
27b80 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
27b90 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a  ACHE_STALE;.  }.
27ba0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
27bb0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
27bc0 6f 72 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  or;.  pC->nullRo
27bd0 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61  w = (u8)res;.  a
27be0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
27bf0 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e   && pOp->p2<p->n
27c00 4f 70 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  Op );.  VdbeBran
27c10 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
27c20 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20 67  );.  if( res ) g
27c30 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
27c40 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
27c50 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50  pcode: Next P1 P
27c60 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
27c70 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20   Advance cursor 
27c80 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
27c90 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74  ints to the next
27ca0 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69   key/data pair i
27cb0 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f  n its.** table o
27cc0 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65  r index.  If the
27cd0 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b  re are no more k
27ce0 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74  ey/value pairs t
27cf0 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
27d00 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
27d10 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
27d20 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75  .  But if the cu
27d30 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73  rsor advance was
27d40 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20   successful,.** 
27d50 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
27d60 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
27d70 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73  e Next opcode is
27d80 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c   only valid foll
27d90 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 47 54 2c  owing an SeekGT,
27da0 20 53 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a 20 4f   SeekGE, or.** O
27db0 50 5f 52 65 77 69 6e 64 20 6f 70 63 6f 64 65 20  P_Rewind opcode 
27dc0 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e  used to position
27dd0 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 4e 65   the cursor.  Ne
27de0 78 74 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  xt is not allowe
27df0 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53  d.** to follow S
27e00 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f  eekLT, SeekLE, o
27e10 72 20 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a  r OP_Last..**.**
27e20 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   The P1 cursor m
27e30 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61  ust be for a rea
27e40 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
27e50 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 50 31  seudo-table.  P1
27e60 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20 62 65   must have.** be
27e70 65 6e 20 6f 70 65 6e 65 64 20 70 72 69 6f 72 20  en opened prior 
27e80 74 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 6f  to this opcode o
27e90 72 20 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69  r the program wi
27ea0 6c 6c 20 73 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a  ll segfault..**.
27eb0 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20  ** The P3 value 
27ec0 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65  is a hint to the
27ed0 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74   btree implement
27ee0 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c  ation. If P3==1,
27ef0 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50   that.** means P
27f00 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65  1 is an SQL inde
27f10 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73 20  x and that this 
27f20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c  instruction coul
27f30 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f  d have been.** o
27f40 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20 69  mitted if that i
27f50 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e  ndex had been un
27f60 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73 75  ique.  P3 is usu
27f70 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a  ally 0.  P3 is.*
27f80 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 20  * always either 
27f90 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34  0 or 1..**.** P4
27fa0 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79   is always of ty
27fb0 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54  pe P4_ADVANCE. T
27fc0 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e  he function poin
27fd0 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a  ter points to.**
27fe0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78   sqlite3BtreeNex
27ff0 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  t()..**.** If P5
28000 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64   is positive and
28010 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
28020 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63  en, then event c
28030 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  ounter.** number
28040 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65   P5-1 in the pre
28050 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
28060 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
28070 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
28080 50 72 65 76 2c 20 4e 65 78 74 49 66 4f 70 65 6e  Prev, NextIfOpen
28090 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
280a0 65 78 74 49 66 4f 70 65 6e 20 50 31 20 50 32 20  extIfOpen P1 P2 
280b0 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
280c0 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
280d0 20 6a 75 73 74 20 6c 69 6b 65 20 4e 65 78 74 20   just like Next 
280e0 65 78 63 65 70 74 20 74 68 61 74 20 69 66 20 63  except that if c
280f0 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a  ursor P1 is not.
28100 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76  ** open it behav
28110 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f  es a no-op..*/./
28120 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50  * Opcode: Prev P
28130 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
28140 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73  .** Back up curs
28150 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
28160 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70   points to the p
28170 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61  revious key/data
28180 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20   pair in its.** 
28190 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
281a0 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
281b0 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c  previous key/val
281c0 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61  ue pairs then fa
281d0 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
281e0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
281f0 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
28200 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 62   if the cursor b
28210 61 63 6b 75 70 20 77 61 73 20 73 75 63 63 65 73  ackup was succes
28220 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d  sful,.** jump im
28230 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
28240 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 72  .**.**.** The Pr
28250 65 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  ev opcode is onl
28260 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e  y valid followin
28270 67 20 61 6e 20 53 65 65 6b 4c 54 2c 20 53 65 65  g an SeekLT, See
28280 6b 4c 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 4c 61  kLE, or.** OP_La
28290 73 74 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74  st opcode used t
282a0 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63  o position the c
282b0 75 72 73 6f 72 2e 20 20 50 72 65 76 20 69 73 20  ursor.  Prev is 
282c0 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74  not allowed.** t
282d0 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 47 54 2c  o follow SeekGT,
282e0 20 53 65 65 6b 47 45 2c 20 6f 72 20 4f 50 5f 52   SeekGE, or OP_R
282f0 65 77 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ewind..**.** The
28300 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
28310 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61  be for a real ta
28320 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
28330 6f 2d 74 61 62 6c 65 2e 20 20 49 66 20 50 31 20  o-table.  If P1 
28340 69 73 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e 20 74  is.** not open t
28350 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72  hen the behavior
28360 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a   is undefined..*
28370 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75  *.** The P3 valu
28380 65 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74  e is a hint to t
28390 68 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65  he btree impleme
283a0 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d  ntation. If P3==
283b0 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73  1, that.** means
283c0 20 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e   P1 is an SQL in
283d0 64 65 78 20 61 6e 64 20 74 68 61 74 20 74 68 69  dex and that thi
283e0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f  s instruction co
283f0 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a  uld have been.**
28400 20 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61 74   omitted if that
28410 20 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20   index had been 
28420 75 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20 75  unique.  P3 is u
28430 73 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73  sually 0.  P3 is
28440 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65  .** always eithe
28450 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20  r 0 or 1..**.** 
28460 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20  P4 is always of 
28470 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e  type P4_ADVANCE.
28480 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f   The function po
28490 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a  inter points to.
284a0 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 50  ** sqlite3BtreeP
284b0 72 65 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a  revious()..**.**
284c0 20 49 66 20 50 35 20 69 73 20 70 6f 73 69 74 69   If P5 is positi
284d0 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20  ve and the jump 
284e0 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65  is taken, then e
284f0 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20  vent counter.** 
28500 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74  number P5-1 in t
28510 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
28520 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65  ement is increme
28530 6e 74 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  nted..*/./* Opco
28540 64 65 3a 20 50 72 65 76 49 66 4f 70 65 6e 20 50  de: PrevIfOpen P
28550 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
28560 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
28570 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
28580 50 72 65 76 20 65 78 63 65 70 74 20 74 68 61 74  Prev except that
28590 20 69 66 20 63 75 72 73 6f 72 20 50 31 20 69 73   if cursor P1 is
285a0 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20   not.** open it 
285b0 62 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e  behaves a no-op.
285c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
285d0 65 72 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a 75  erNext: {  /* ju
285e0 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
285f0 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
28600 73 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70  s;..  pC = p->ap
28610 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
28620 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
28630 28 70 43 29 20 29 3b 0a 20 20 72 65 73 20 3d 20  (pC) );.  res = 
28640 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  0;.  rc = sqlite
28650 33 56 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28  3VdbeSorterNext(
28660 64 62 2c 20 70 43 2c 20 26 72 65 73 29 3b 0a 20  db, pC, &res);. 
28670 20 67 6f 74 6f 20 6e 65 78 74 5f 74 61 69 6c 3b   goto next_tail;
28680 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 49 66 4f  .case OP_PrevIfO
28690 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20  pen:    /* jump 
286a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 49  */.case OP_NextI
286b0 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d  fOpen:    /* jum
286c0 70 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 61 70  p */.  if( p->ap
286d0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3d 3d 30 20  Csr[pOp->p1]==0 
286e0 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61  ) break;.  /* Fa
286f0 6c 6c 20 74 68 72 6f 75 67 68 20 2a 2f 0a 63 61  ll through */.ca
28700 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20 20 20  se OP_Prev:     
28710 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
28720 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20 20 20  case OP_Next:   
28730 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
28740 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
28750 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
28760 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
28770 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
28780 35 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61  5<ArraySize(p->a
28790 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20 70 43  Counter) );.  pC
287a0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
287b0 3e 70 31 5d 3b 0a 20 20 72 65 73 20 3d 20 70 4f  >p1];.  res = pO
287c0 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
287d0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
287e0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
287f0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61  Moveto==0 );.  a
28800 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
28810 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
28820 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EE );.  assert( 
28830 72 65 73 3d 3d 30 20 7c 7c 20 28 72 65 73 3d 3d  res==0 || (res==
28840 31 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65  1 && pC->isTable
28850 3d 3d 30 29 20 29 3b 0a 20 20 74 65 73 74 63 61  ==0) );.  testca
28860 73 65 28 20 72 65 73 3d 3d 31 20 29 3b 0a 20 20  se( res==1 );.  
28870 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
28880 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20  ode!=OP_Next || 
28890 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65  pOp->p4.xAdvance
288a0 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  ==sqlite3BtreeNe
288b0 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  xt );.  assert( 
288c0 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
288d0 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  Prev || pOp->p4.
288e0 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65  xAdvance==sqlite
288f0 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 20 29  3BtreePrevious )
28900 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
28910 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74  >opcode!=OP_Next
28920 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70  IfOpen || pOp->p
28930 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69  4.xAdvance==sqli
28940 74 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a  te3BtreeNext );.
28950 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
28960 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66  pcode!=OP_PrevIf
28970 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  Open || pOp->p4.
28980 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65  xAdvance==sqlite
28990 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 29 3b  3BtreePrevious);
289a0 0a 0a 20 20 2f 2a 20 54 68 65 20 4e 65 78 74 20  ..  /* The Next 
289b0 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75  opcode is only u
289c0 73 65 64 20 61 66 74 65 72 20 53 65 65 6b 47 54  sed after SeekGT
289d0 2c 20 53 65 65 6b 47 45 2c 20 61 6e 64 20 52 65  , SeekGE, and Re
289e0 77 69 6e 64 2e 0a 20 20 2a 2a 20 54 68 65 20 50  wind..  ** The P
289f0 72 65 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  rev opcode is on
28a00 6c 79 20 75 73 65 64 20 61 66 74 65 72 20 53 65  ly used after Se
28a10 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 61 6e  ekLT, SeekLE, an
28a20 64 20 4c 61 73 74 2e 20 2a 2f 0a 20 20 61 73 73  d Last. */.  ass
28a30 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
28a40 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70  !=OP_Next || pOp
28a50 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78  ->opcode!=OP_Nex
28a60 74 49 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c  tIfOpen.       |
28a70 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
28a80 5f 53 65 65 6b 47 54 20 7c 7c 20 70 43 2d 3e 73  _SeekGT || pC->s
28a90 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 45  eekOp==OP_SeekGE
28aa0 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
28ab0 65 65 6b 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e 64  eekOp==OP_Rewind
28ac0 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
28ad0 4f 50 5f 46 6f 75 6e 64 29 3b 0a 20 20 61 73 73  OP_Found);.  ass
28ae0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
28af0 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70  !=OP_Prev || pOp
28b00 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65  ->opcode!=OP_Pre
28b10 76 49 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c  vIfOpen.       |
28b20 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
28b30 5f 53 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e 73  _SeekLT || pC->s
28b40 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 45  eekOp==OP_SeekLE
28b50 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
28b60 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20 29  eekOp==OP_Last )
28b70 3b 0a 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e 70  ;..  rc = pOp->p
28b80 34 2e 78 41 64 76 61 6e 63 65 28 70 43 2d 3e 75  4.xAdvance(pC->u
28b90 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  c.pCursor, &res)
28ba0 3b 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20 70  ;.next_tail:.  p
28bb0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
28bc0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
28bd0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
28be0 72 65 73 3d 3d 30 2c 32 29 3b 0a 20 20 69 66 28  res==0,2);.  if(
28bf0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
28c00 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
28c10 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20   if( res==0 ){. 
28c20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d     pC->nullRow =
28c30 20 30 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e   0;.    p->aCoun
28c40 74 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a  ter[pOp->p5]++;.
28c50 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
28c60 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ST.    sqlite3_s
28c70 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
28c80 65 6e 64 69 66 0a 20 20 20 20 67 6f 74 6f 20 6a  endif.    goto j
28c90 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68  ump_to_p2_and_ch
28ca0 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
28cb0 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  t;.  }else{.    
28cc0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  pC->nullRow = 1;
28cd0 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63  .  }.  goto chec
28ce0 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b  k_for_interrupt;
28cf0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
28d00 64 78 49 6e 73 65 72 74 20 50 31 20 50 32 20 50  dxInsert P1 P2 P
28d10 33 20 2a 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73  3 * P5.** Synops
28d20 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a  is: key=r[P2].**
28d30 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32 20  .** Register P2 
28d40 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64  holds an SQL ind
28d50 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e  ex key made usin
28d60 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63  g the.** MakeRec
28d70 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ord instructions
28d80 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  .  This opcode w
28d90 72 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a  rites that key.*
28da0 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65 78  * into the index
28db0 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74   P1.  Data for t
28dc0 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e  he entry is nil.
28dd0 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61 20 66  .**.** P3 is a f
28de0 6c 61 67 20 74 68 61 74 20 70 72 6f 76 69 64 65  lag that provide
28df0 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20  s a hint to the 
28e00 62 2d 74 72 65 65 20 6c 61 79 65 72 20 74 68 61  b-tree layer tha
28e10 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65 72 74  t this.** insert
28e20 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65   is likely to be
28e30 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a   an append..**.*
28e40 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20  * If P5 has the 
28e50 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62  OPFLAG_NCHANGE b
28e60 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  it set, then the
28e70 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
28e80 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
28e90 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75  d by this instru
28ea0 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 4f  ction.  If the O
28eb0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69  PFLAG_NCHANGE bi
28ec0 74 20 69 73 20 63 6c 65 61 72 2c 0a 2a 2a 20 74  t is clear,.** t
28ed0 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63  hen the change c
28ee0 6f 75 6e 74 65 72 20 69 73 20 75 6e 63 68 61 6e  ounter is unchan
28ef0 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ged..**.** If P5
28f00 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f   has the OPFLAG_
28f10 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 62 69  USESEEKRESULT bi
28f20 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  t set, then the 
28f30 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65  cursor must have
28f40 0a 2a 2a 20 6a 75 73 74 20 64 6f 6e 65 20 61 20  .** just done a 
28f50 73 65 65 6b 20 74 6f 20 74 68 65 20 73 70 6f 74  seek to the spot
28f60 20 77 68 65 72 65 20 74 68 65 20 6e 65 77 20 65   where the new e
28f70 6e 74 72 79 20 69 73 20 74 6f 20 62 65 20 69 6e  ntry is to be in
28f80 73 65 72 74 65 64 2e 0a 2a 2a 20 54 68 69 73 20  serted..** This 
28f90 66 6c 61 67 20 61 76 6f 69 64 73 20 64 6f 69 6e  flag avoids doin
28fa0 67 20 61 6e 20 65 78 74 72 61 20 73 65 65 6b 2e  g an extra seek.
28fb0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
28fc0 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72  ruction only wor
28fd0 6b 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20  ks for indices. 
28fe0 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20   The equivalent 
28ff0 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66  instruction.** f
29000 6f 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50 5f  or tables is OP_
29010 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20  Insert..*/.case 
29020 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 3a  OP_SorterInsert:
29030 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f         /* in2 */
29040 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65  .case OP_IdxInse
29050 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  rt: {        /* 
29060 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  in2 */.  VdbeCur
29070 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 6e  sor *pC;.  int n
29080 4b 65 79 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  Key;.  const cha
29090 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73 73 65  r *zKey;..  asse
290a0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
290b0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
290c0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
290d0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
290e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
290f0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  0 );.  assert( i
29100 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f  sSorter(pC)==(pO
29110 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f  p->opcode==OP_So
29120 72 74 65 72 49 6e 73 65 72 74 29 20 29 3b 0a 20  rterInsert) );. 
29130 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
29140 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
29150 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  ( pIn2->flags & 
29160 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 69 66  MEM_Blob );.  if
29170 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
29180 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e  AG_NCHANGE ) p->
29190 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73 73  nChange++;.  ass
291a0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
291b0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
291c0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
291d0 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74  =OP_SorterInsert
291e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
291f0 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
29200 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f    rc = ExpandBlo
29210 62 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 72  b(pIn2);.  if( r
29220 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
29230 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
29240 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
29250 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 20  OP_SorterInsert 
29260 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
29270 74 65 33 56 64 62 65 53 6f 72 74 65 72 57 72 69  te3VdbeSorterWri
29280 74 65 28 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20  te(pC, pIn2);.  
29290 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 4b 65 79 20  }else{.    nKey 
292a0 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20 7a  = pIn2->n;.    z
292b0 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20  Key = pIn2->z;. 
292c0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
292d0 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 75  treeInsert(pC->u
292e0 63 2e 70 43 75 72 73 6f 72 2c 20 7a 4b 65 79 2c  c.pCursor, zKey,
292f0 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c   nKey, "", 0, 0,
29300 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20   pOp->p3, .     
29310 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f     ((pOp->p5 & O
29320 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
29330 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52  ULT) ? pC->seekR
29340 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20  esult : 0).     
29350 20 20 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74     );.    assert
29360 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
29370 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70  veto==0 );.    p
29380 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
29390 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
293a0 7d 0a 20 20 69 66 28 20 72 63 29 20 67 6f 74 6f  }.  if( rc) goto
293b0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
293c0 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
293d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44  ./* Opcode: IdxD
293e0 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 2a  elete P1 P2 P3 *
293f0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
29400 6b 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a  key=r[P2@P3].**.
29410 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** The content o
29420 66 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73  f P3 registers s
29430 74 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73  tarting at regis
29440 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61  ter P2 form.** a
29450 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
29460 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64   key. This opcod
29470 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65  e removes that e
29480 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a  ntry from the .*
29490 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62  * index opened b
294a0 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a  y cursor P1..*/.
294b0 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74  case OP_IdxDelet
294c0 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
294d0 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
294e0 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
294f0 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  res;.  UnpackedR
29500 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65  ecord r;..  asse
29510 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
29520 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
29530 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
29540 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
29550 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
29560 29 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  )+1 );.  assert(
29570 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
29580 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
29590 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
295a0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
295b0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
295c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
295d0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
295e0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72  E_BTREE );.  pCr
295f0 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72  sr = pC->uc.pCur
29600 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
29610 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  Crsr!=0 );.  ass
29620 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
29630 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  );.  r.pKeyInfo 
29640 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
29650 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
29660 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 64  6)pOp->p3;.  r.d
29670 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20  efault_rc = 0;. 
29680 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   r.aMem = &aMem[
29690 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 72 63 20 3d  pOp->p2];.  rc =
296a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
296b0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
296c0 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
296d0 73 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  s);.  if( rc ) g
296e0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
296f0 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65  _error;.  if( re
29700 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  s==0 ){.    rc =
29710 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c   sqlite3BtreeDel
29720 65 74 65 28 70 43 72 73 72 2c 20 42 54 52 45 45  ete(pCrsr, BTREE
29730 5f 41 55 58 44 45 4c 45 54 45 29 3b 0a 20 20 20  _AUXDELETE);.   
29740 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
29750 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
29760 72 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  r;.  }.  assert(
29770 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
29780 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e  eto==0 );.  pC->
29790 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
297a0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65  CHE_STALE;.  bre
297b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
297c0 3a 20 53 65 65 6b 20 50 31 20 2a 20 50 33 20 50  : Seek P1 * P3 P
297d0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
297e0 20 20 4d 6f 76 65 20 50 33 20 74 6f 20 50 31 2e    Move P3 to P1.
297f0 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 50 31 20 69  rowid.**.** P1 i
29800 73 20 61 6e 20 6f 70 65 6e 20 69 6e 64 65 78 20  s an open index 
29810 63 75 72 73 6f 72 20 61 6e 64 20 50 33 20 69 73  cursor and P3 is
29820 20 61 20 63 75 72 73 6f 72 20 6f 6e 20 74 68 65   a cursor on the
29830 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a   corresponding.*
29840 2a 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 6f  * table.  This o
29850 70 63 6f 64 65 20 64 6f 65 73 20 61 20 64 65 66  pcode does a def
29860 65 72 72 65 64 20 73 65 65 6b 20 6f 66 20 74 68  erred seek of th
29870 65 20 50 33 20 74 61 62 6c 65 20 63 75 72 73 6f  e P3 table curso
29880 72 0a 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77 20  r.** to the row 
29890 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
298a0 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20   to the current 
298b0 72 6f 77 20 6f 66 20 50 31 2e 0a 2a 2a 0a 2a 2a  row of P1..**.**
298c0 20 54 68 69 73 20 69 73 20 61 20 64 65 66 65 72   This is a defer
298d0 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69  red seek.  Nothi
298e0 6e 67 20 61 63 74 75 61 6c 6c 79 20 68 61 70 70  ng actually happ
298f0 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65  ens until.** the
29900 20 63 75 72 73 6f 72 20 69 73 20 75 73 65 64 20   cursor is used 
29910 74 6f 20 72 65 61 64 20 61 20 72 65 63 6f 72 64  to read a record
29920 2e 20 20 54 68 61 74 20 77 61 79 2c 20 69 66 20  .  That way, if 
29930 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75  no reads.** occu
29940 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72  r, no unnecessar
29950 79 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a  y I/O happens..*
29960 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
29970 6e 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67  n array of integ
29980 65 72 73 20 28 74 79 70 65 20 50 34 5f 49 4e 54  ers (type P4_INT
29990 41 52 52 41 59 29 20 63 6f 6e 74 61 69 6e 69 6e  ARRAY) containin
299a0 67 0a 2a 2a 20 6f 6e 65 20 65 6e 74 72 79 20 66  g.** one entry f
299b0 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  or each column i
299c0 6e 20 74 68 65 20 50 33 20 74 61 62 6c 65 2e 20  n the P3 table. 
299d0 20 49 66 20 61 72 72 61 79 20 65 6e 74 72 79 20   If array entry 
299e0 61 28 69 29 0a 2a 2a 20 69 73 20 6e 6f 6e 2d 7a  a(i).** is non-z
299f0 65 72 6f 2c 20 74 68 65 6e 20 72 65 61 64 69 6e  ero, then readin
29a00 67 20 63 6f 6c 75 6d 6e 20 61 28 69 29 2d 31 20  g column a(i)-1 
29a10 66 72 6f 6d 20 63 75 72 73 6f 72 20 50 33 20 69  from cursor P3 i
29a20 73 20 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74  s .** equivalent
29a30 20 74 6f 20 70 65 72 66 6f 72 6d 69 6e 67 20 74   to performing t
29a40 68 65 20 64 65 66 65 72 72 65 64 20 73 65 65 6b  he deferred seek
29a50 20 61 6e 64 20 74 68 65 6e 20 72 65 61 64 69 6e   and then readin
29a60 67 20 63 6f 6c 75 6d 6e 20 69 20 0a 2a 2a 20 66  g column i .** f
29a70 72 6f 6d 20 50 31 2e 20 20 54 68 69 73 20 69 6e  rom P1.  This in
29a80 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 73 74 6f  formation is sto
29a90 72 65 64 20 69 6e 20 50 33 20 61 6e 64 20 75 73  red in P3 and us
29aa0 65 64 20 74 6f 20 72 65 64 69 72 65 63 74 0a 2a  ed to redirect.*
29ab0 2a 20 72 65 61 64 73 20 61 67 61 69 6e 73 74 20  * reads against 
29ac0 50 33 20 6f 76 65 72 20 74 6f 20 50 31 2c 20 74  P3 over to P1, t
29ad0 68 75 73 20 70 6f 73 73 69 62 6c 79 20 61 76 6f  hus possibly avo
29ae0 69 64 69 6e 67 20 74 68 65 20 6e 65 65 64 20 74  iding the need t
29af0 6f 0a 2a 2a 20 73 65 65 6b 20 61 6e 64 20 72 65  o.** seek and re
29b00 61 64 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2f  ad cursor P3..*/
29b10 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52  ./* Opcode: IdxR
29b20 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  owid P1 P2 * * *
29b30 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
29b40 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20  P2]=rowid.**.** 
29b50 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
29b60 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65  ter P2 an intege
29b70 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c  r which is the l
29b80 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ast entry in the
29b90 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68   record at.** th
29ba0 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64  e end of the ind
29bb0 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20 74  ex key pointed t
29bc0 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 20  o by cursor P1. 
29bd0 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 73 68   This integer sh
29be0 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20 72  ould be.** the r
29bf0 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c  owid of the tabl
29c00 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63 68  e entry to which
29c10 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74 72   this index entr
29c20 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  y points..**.** 
29c30 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c  See also: Rowid,
29c40 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a   MakeRecord..*/.
29c50 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a 0a 63 61  case OP_Seek:.ca
29c60 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20  se OP_IdxRowid: 
29c70 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  {              /
29c80 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65  * out2 */.  Vdbe
29c90 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20  Cursor *pC;     
29ca0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
29cb0 65 20 50 31 20 69 6e 64 65 78 20 63 75 72 73 6f  e P1 index curso
29cc0 72 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  r */.  VdbeCurso
29cd0 72 20 2a 70 54 61 62 43 75 72 3b 20 20 20 20 20  r *pTabCur;     
29ce0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 32 20        /* The P2 
29cf0 74 61 62 6c 65 20 63 75 72 73 6f 72 20 28 4f 50  table cursor (OP
29d00 5f 53 65 65 6b 20 6f 6e 6c 79 29 20 2a 2f 0a 20  _Seek only) */. 
29d10 20 69 36 34 20 72 6f 77 69 64 3b 20 20 20 20 20   i64 rowid;     
29d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d30 2f 2a 20 52 6f 77 69 64 20 74 68 61 74 20 50 31  /* Rowid that P1
29d40 20 63 75 72 72 65 6e 74 20 70 6f 69 6e 74 73 20   current points 
29d50 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  to */..  assert(
29d60 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
29d70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
29d80 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
29d90 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
29da0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
29db0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
29dc0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
29dd0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
29de0 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
29df0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  sor!=0 );.  asse
29e00 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
29e10 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
29e20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
29e30 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
29e40 74 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  t( !pC->nullRow 
29e50 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
29e60 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 0a  OP_IdxRowid );..
29e70 20 20 2f 2a 20 54 68 65 20 49 64 78 52 6f 77 69    /* The IdxRowi
29e80 64 20 61 6e 64 20 53 65 65 6b 20 6f 70 63 6f 64  d and Seek opcod
29e90 65 73 20 61 72 65 20 63 6f 6d 62 69 6e 65 64 20  es are combined 
29ea0 62 65 63 61 75 73 65 20 6f 66 20 74 68 65 20 63  because of the c
29eb0 6f 6d 6d 6f 6e 61 6c 69 74 79 0a 20 20 2a 2a 20  ommonality.  ** 
29ec0 6f 66 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  of sqlite3VdbeCu
29ed0 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 61 6e  rsorRestore() an
29ee0 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  d sqlite3VdbeIdx
29ef0 52 6f 77 69 64 28 29 2e 20 2a 2f 0a 20 20 72 63  Rowid(). */.  rc
29f00 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
29f10 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b  rsorRestore(pC);
29f20 0a 0a 20 20 2f 2a 20 73 71 6c 69 74 65 33 56 62  ..  /* sqlite3Vb
29f30 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29  eCursorRestore()
29f40 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69   can only fail i
29f50 66 20 74 68 65 20 72 65 63 6f 72 64 20 68 61 73  f the record has
29f60 20 62 65 65 6e 20 64 65 6c 65 74 65 64 0a 20 20   been deleted.  
29f70 2a 2a 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ** out from unde
29f80 72 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54  r the cursor.  T
29f90 68 61 74 20 77 69 6c 6c 20 6e 65 76 65 72 20 68  hat will never h
29fa0 61 70 70 65 6e 73 20 66 6f 72 20 61 6e 20 49 64  appens for an Id
29fb0 78 52 6f 77 69 64 0a 20 20 2a 2a 20 6f 72 20 53  xRowid.  ** or S
29fc0 65 65 6b 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20  eek opcode */.  
29fd0 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51  if( NEVER(rc!=SQ
29fe0 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20  LITE_OK) ) goto 
29ff0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2a000 6f 72 3b 0a 0a 20 20 69 66 28 20 21 70 43 2d 3e  or;..  if( !pC->
2a010 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72  nullRow ){.    r
2a020 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  owid = 0;  /* No
2a030 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
2a040 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20  used to silence 
2a050 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
2a060 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
2a070 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70  beIdxRowid(db, p
2a080 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
2a090 72 6f 77 69 64 29 3b 0a 20 20 20 20 69 66 28 20  rowid);.    if( 
2a0a0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
2a0b0 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
2a0c0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2a0d0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 4f      }.    if( pO
2a0e0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65  p->opcode==OP_Se
2a0f0 65 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  ek ){.      asse
2a100 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 26  rt( pOp->p3>=0 &
2a110 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 43 75  & pOp->p3<p->nCu
2a120 72 73 6f 72 20 29 3b 0a 20 20 20 20 20 20 70 54  rsor );.      pT
2a130 61 62 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72  abCur = p->apCsr
2a140 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
2a150 20 61 73 73 65 72 74 28 20 70 54 61 62 43 75 72   assert( pTabCur
2a160 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  !=0 );.      ass
2a170 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e 65 43  ert( pTabCur->eC
2a180 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2a190 42 54 52 45 45 20 29 3b 0a 20 20 20 20 20 20 61  BTREE );.      a
2a1a0 73 73 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e  ssert( pTabCur->
2a1b0 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
2a1c0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
2a1d0 54 61 62 43 75 72 2d 3e 69 73 54 61 62 6c 65 20  TabCur->isTable 
2a1e0 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75 72  );.      pTabCur
2a1f0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
2a200 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 6d 6f       pTabCur->mo
2a210 76 65 74 6f 54 61 72 67 65 74 20 3d 20 72 6f 77  vetoTarget = row
2a220 69 64 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75  id;.      pTabCu
2a230 72 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  r->deferredMovet
2a240 6f 20 3d 20 31 3b 0a 20 20 20 20 20 20 61 73 73  o = 1;.      ass
2a250 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
2a260 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 7c 7c  ==P4_INTARRAY ||
2a270 20 70 4f 70 2d 3e 70 34 2e 61 69 3d 3d 30 20 29   pOp->p4.ai==0 )
2a280 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 2d  ;.      pTabCur-
2a290 3e 61 41 6c 74 4d 61 70 20 3d 20 70 4f 70 2d 3e  >aAltMap = pOp->
2a2a0 70 34 2e 61 69 3b 0a 20 20 20 20 20 20 70 54 61  p4.ai;.      pTa
2a2b0 62 43 75 72 2d 3e 70 41 6c 74 43 75 72 73 6f 72  bCur->pAltCursor
2a2c0 20 3d 20 70 43 3b 0a 20 20 20 20 7d 65 6c 73 65   = pC;.    }else
2a2d0 7b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d 20 6f  {.      pOut = o
2a2e0 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
2a2f0 20 70 4f 70 29 3b 0a 20 20 20 20 20 20 70 4f 75   pOp);.      pOu
2a300 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a  t->u.i = rowid;.
2a310 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67        pOut->flag
2a320 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
2a330 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
2a340 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2a350 6f 64 65 3d 3d 4f 50 5f 49 64 78 52 6f 77 69 64  ode==OP_IdxRowid
2a360 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   );.    sqlite3V
2a370 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 26 61  dbeMemSetNull(&a
2a380 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20  Mem[pOp->p2]);. 
2a390 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
2a3a0 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20  * Opcode: IdxGE 
2a3b0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
2a3c0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
2a3d0 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
2a3e0 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
2a3f0 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
2a400 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
2a410 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
2a420 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
2a430 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
2a440 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  Y.  Compare this
2a450 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
2a460 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  st the index .**
2a470 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
2a480 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
2a490 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
2a4a0 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
2a4b0 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20  OWID .** fields 
2a4c0 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a  at the end..**.*
2a4d0 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65  * If the P1 inde
2a4e0 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74  x entry is great
2a4f0 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
2a500 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
2a510 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74  e.** then jump t
2a520 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65  o P2.  Otherwise
2a530 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
2a540 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
2a550 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ction..*/./* Opc
2a560 6f 64 65 3a 20 49 64 78 47 54 20 50 31 20 50 32  ode: IdxGT P1 P2
2a570 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
2a580 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
2a590 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  P4].**.** The P4
2a5a0 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
2a5b0 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
2a5c0 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
2a5d0 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
2a5e0 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
2a5f0 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43   PRIMARY KEY.  C
2a600 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
2a610 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
2a620 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
2a630 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
2a640 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
2a650 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
2a660 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20  RY KEY or ROWID 
2a670 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68  .** fields at th
2a680 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  e end..**.** If 
2a690 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
2a6a0 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ry is greater th
2a6b0 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
2a6c0 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  .** then jump to
2a6d0 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20   P2.  Otherwise 
2a6e0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
2a6f0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
2a700 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
2a710 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32 20  de: IdxLT P1 P2 
2a720 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
2a730 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
2a740 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  4].**.** The P4 
2a750 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
2a760 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
2a770 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
2a780 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
2a790 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
2a7a0 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
2a7b0 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74  OWID.  Compare t
2a7c0 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
2a7d0 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64  ainst.** the ind
2a7e0 65 78 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ex that P1 is cu
2a7f0 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
2a800 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
2a810 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
2a820 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  .** ROWID on the
2a830 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
2a840 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
2a850 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74   entry is less t
2a860 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
2a870 65 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  e then jump to P
2a880 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20  2..** Otherwise 
2a890 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
2a8a0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
2a8b0 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
2a8c0 64 65 3a 20 49 64 78 4c 45 20 50 31 20 50 32 20  de: IdxLE P1 P2 
2a8d0 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
2a8e0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
2a8f0 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  4].**.** The P4 
2a900 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
2a910 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
2a920 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
2a930 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
2a940 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
2a950 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
2a960 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74  OWID.  Compare t
2a970 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
2a980 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64  ainst.** the ind
2a990 65 78 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ex that P1 is cu
2a9a0 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
2a9b0 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
2a9c0 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
2a9d0 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  .** ROWID on the
2a9e0 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
2a9f0 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
2aa00 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74   entry is less t
2aa10 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
2aa20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68  the key value th
2aa30 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32  en jump.** to P2
2aa40 2e 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c  . Otherwise fall
2aa50 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2aa60 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
2aa70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  ..*/.case OP_Idx
2aa80 4c 45 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  LE:          /* 
2aa90 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
2aaa0 49 64 78 47 54 3a 20 20 20 20 20 20 20 20 20 20  IdxGT:          
2aab0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
2aac0 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20  OP_IdxLT:       
2aad0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
2aae0 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 20 7b 20  se OP_IdxGE:  { 
2aaf0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2ab00 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2ab10 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
2ab20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
2ab30 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
2ab40 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2ab50 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
2ab60 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
2ab70 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2ab80 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
2ab90 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72  assert( pC->isOr
2aba0 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72  dered );.  asser
2abb0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
2abc0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2abd0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2abe0 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 29 3b 0a  uc.pCursor!=0);.
2abf0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
2ac00 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
2ac10 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2ac20 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
2ac30 70 35 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72  p5==1 );.  asser
2ac40 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
2ac50 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 72 2e  P4_INT32 );.  r.
2ac60 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
2ac70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69  KeyInfo;.  r.nFi
2ac80 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e  eld = (u16)pOp->
2ac90 70 34 2e 69 3b 0a 20 20 69 66 28 20 70 4f 70 2d  p4.i;.  if( pOp-
2aca0 3e 6f 70 63 6f 64 65 3c 4f 50 5f 49 64 78 4c 54  >opcode<OP_IdxLT
2acb0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
2acc0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2acd0 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  IdxLE || pOp->op
2ace0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29  code==OP_IdxGT )
2acf0 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  ;.    r.default_
2ad00 72 63 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65  rc = -1;.  }else
2ad10 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
2ad20 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
2ad30 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  xGE || pOp->opco
2ad40 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a  de==OP_IdxLT );.
2ad50 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63      r.default_rc
2ad60 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d   = 0;.  }.  r.aM
2ad70 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
2ad80 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  p3];.#ifdef SQLI
2ad90 54 45 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e 74  TE_DEBUG.  { int
2ada0 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72   i; for(i=0; i<r
2adb0 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73  .nField; i++) as
2adc0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
2add0 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20  (&r.aMem[i]) ); 
2ade0 7d 0a 23 65 6e 64 69 66 0a 20 20 72 65 73 20 3d  }.#endif.  res =
2adf0 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64   0;  /* Not need
2ae00 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74  ed.  Only used t
2ae10 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e  o silence a warn
2ae20 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73  ing. */.  rc = s
2ae30 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79  qlite3VdbeIdxKey
2ae40 43 6f 6d 70 61 72 65 28 64 62 2c 20 70 43 2c 20  Compare(db, pC, 
2ae50 26 72 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73  &r, &res);.  ass
2ae60 65 72 74 28 20 28 4f 50 5f 49 64 78 4c 45 26 31  ert( (OP_IdxLE&1
2ae70 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20  )==(OP_IdxLT&1) 
2ae80 26 26 20 28 4f 50 5f 49 64 78 47 45 26 31 29 3d  && (OP_IdxGE&1)=
2ae90 3d 28 4f 50 5f 49 64 78 47 54 26 31 29 20 29 3b  =(OP_IdxGT&1) );
2aea0 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63  .  if( (pOp->opc
2aeb0 6f 64 65 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c  ode&1)==(OP_IdxL
2aec0 54 26 31 29 20 29 7b 0a 20 20 20 20 61 73 73 65  T&1) ){.    asse
2aed0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
2aee0 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70  =OP_IdxLE || pOp
2aef0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2af00 4c 54 20 29 3b 0a 20 20 20 20 72 65 73 20 3d 20  LT );.    res = 
2af10 2d 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  -res;.  }else{. 
2af20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
2af30 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45  opcode==OP_IdxGE
2af40 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
2af50 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
2af60 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a 20 20 56 64   res++;.  }.  Vd
2af70 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
2af80 73 3e 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 63  s>0,2);.  if( rc
2af90 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2afa0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
2afb0 28 20 72 65 73 3e 30 20 29 20 67 6f 74 6f 20 6a  ( res>0 ) goto j
2afc0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
2afd0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2afe0 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50 32 20  : Destroy P1 P2 
2aff0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c  P3 * *.**.** Del
2b000 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20 64 61  ete an entire da
2b010 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
2b020 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
2b030 20 70 61 67 65 20 69 6e 20 74 68 65 20 64 61 74   page in the dat
2b040 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73  abase.** file is
2b050 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a   given by P1..**
2b060 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65  .** The table be
2b070 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20 69 73  ing destroyed is
2b080 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
2b090 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 33  abase file if P3
2b0a0 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d  ==0.  If.** P3==
2b0b0 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  1 then the table
2b0c0 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20   to be clear is 
2b0d0 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  in the auxiliary
2b0e0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
2b0f0 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  * that is used t
2b100 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63  o store tables c
2b110 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41  reate using CREA
2b120 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42  TE TEMPORARY TAB
2b130 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54  LE..**.** If AUT
2b140 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61 62 6c  OVACUUM is enabl
2b150 65 64 20 74 68 65 6e 20 69 74 20 69 73 20 70 6f  ed then it is po
2b160 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74  ssible that anot
2b170 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  her root page.**
2b180 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65 64 20   might be moved 
2b190 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79 20 64  into the newly d
2b1a0 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61 67 65  eleted root page
2b1b0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
2b1c0 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61  p all.** root pa
2b1d0 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73 20 61  ges contiguous a
2b1e0 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
2b1f0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  of the database.
2b200 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20    The former.** 
2b210 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 6f  value of the roo
2b220 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f 76 65  t page that move
2b230 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20 62 65  d - its value be
2b240 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20 6f 63  fore the move oc
2b250 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73  curred -.** is s
2b260 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
2b270 72 20 50 32 2e 20 20 49 66 20 6e 6f 20 70 61 67  r P2.  If no pag
2b280 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77  e .** movement w
2b290 61 73 20 72 65 71 75 69 72 65 64 20 28 62 65 63  as required (bec
2b2a0 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 62  ause the table b
2b2b0 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77 61 73  eing dropped was
2b2c0 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68 65   already .** the
2b2d0 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65   last one in the
2b2e0 20 64 61 74 61 62 61 73 65 29 20 74 68 65 6e 20   database) then 
2b2f0 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64  a zero is stored
2b300 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
2b310 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55  .** If AUTOVACUU
2b320 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20 74 68  M is disabled th
2b330 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f  en a zero is sto
2b340 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
2b350 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
2b360 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73  so: Clear.*/.cas
2b370 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20  e OP_Destroy: { 
2b380 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
2b390 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69   int iMoved;.  i
2b3a0 6e 74 20 69 44 62 3b 0a 0a 20 20 61 73 73 65 72  nt iDb;..  asser
2b3b0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
2b3c0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2b3d0 4f 70 2d 3e 70 31 3e 31 20 29 3b 0a 20 20 70 4f  Op->p1>1 );.  pO
2b3e0 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
2b3f0 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
2b400 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
2b410 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 64 62 2d  _Null;.  if( db-
2b420 3e 6e 56 64 62 65 52 65 61 64 20 3e 20 64 62 2d  >nVdbeRead > db-
2b430 3e 6e 56 44 65 73 74 72 6f 79 2b 31 20 29 7b 0a  >nVDestroy+1 ){.
2b440 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
2b450 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65  LOCKED;.    p->e
2b460 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f  rrorAction = OE_
2b470 41 62 6f 72 74 3b 0a 20 20 20 20 67 6f 74 6f 20  Abort;.    goto 
2b480 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2b490 6f 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  or;.  }else{.   
2b4a0 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   iDb = pOp->p3;.
2b4b0 20 20 20 20 61 73 73 65 72 74 28 20 44 62 4d 61      assert( DbMa
2b4c0 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
2b4d0 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 20  ask, iDb) );.   
2b4e0 20 69 4d 6f 76 65 64 20 3d 20 30 3b 20 20 2f 2a   iMoved = 0;  /*
2b4f0 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e   Not needed.  On
2b500 6c 79 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ly to silence a 
2b510 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20  warning. */.    
2b520 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2b530 65 44 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61  eDropTable(db->a
2b540 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70  Db[iDb].pBt, pOp
2b550 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a  ->p1, &iMoved);.
2b560 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
2b570 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70  = MEM_Int;.    p
2b580 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65  Out->u.i = iMove
2b590 64 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  d;.    if( rc ) 
2b5a0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2b5b0 6f 5f 65 72 72 6f 72 3b 0a 23 69 66 6e 64 65 66  o_error;.#ifndef
2b5c0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
2b5d0 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20  OVACUUM.    if( 
2b5e0 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20  iMoved!=0 ){.   
2b5f0 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61     sqlite3RootPa
2b600 67 65 4d 6f 76 65 64 28 64 62 2c 20 69 44 62 2c  geMoved(db, iDb,
2b610 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31   iMoved, pOp->p1
2b620 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  );.      /* All 
2b630 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70 65 72 61  OP_Destroy opera
2b640 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74  tions occur on t
2b650 68 65 20 73 61 6d 65 20 62 74 72 65 65 20 2a 2f  he same btree */
2b660 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
2b670 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
2b680 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53 63 68  t==0 || resetSch
2b690 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b  emaOnFault==iDb+
2b6a0 31 20 29 3b 0a 20 20 20 20 20 20 72 65 73 65 74  1 );.      reset
2b6b0 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20  SchemaOnFault = 
2b6c0 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e  iDb+1;.    }.#en
2b6d0 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
2b6e0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
2b6f0 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a  lear P1 P2 P3.**
2b700 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63  .** Delete all c
2b710 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64  ontents of the d
2b720 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
2b730 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
2b740 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65  t page.** in the
2b750 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2b760 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20  s given by P1.  
2b770 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74  But, unlike Dest
2b780 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72  roy, do not.** r
2b790 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20  emove the table 
2b7a0 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68  or index from th
2b7b0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
2b7c0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
2b7d0 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20   being clear is 
2b7e0 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
2b7f0 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d  base file if P2=
2b800 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31  =0.  If.** P2==1
2b810 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
2b820 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69  to be clear is i
2b830 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
2b840 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a  database file.**
2b850 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
2b860 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72   store tables cr
2b870 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54  eate using CREAT
2b880 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c  E TEMPORARY TABL
2b890 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  E..**.** If the 
2b8a0 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d  P3 value is non-
2b8b0 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74  zero, then the t
2b8c0 61 62 6c 65 20 72 65 66 65 72 72 65 64 20 74 6f  able referred to
2b8d0 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69   must be an.** i
2b8e0 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20  ntkey table (an 
2b8f0 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  SQL table, not a
2b900 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69  n index). In thi
2b910 73 20 63 61 73 65 20 74 68 65 20 72 6f 77 20 63  s case the row c
2b920 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20  hange .** count 
2b930 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  is incremented b
2b940 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  y the number of 
2b950 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
2b960 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e  e being cleared.
2b970 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72   .** If P3 is gr
2b980 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c  eater than zero,
2b990 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
2b9a0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
2b9b0 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f  er P3 is.** also
2b9c0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
2b9d0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
2b9e0 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
2b9f0 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a  being cleared..*
2ba00 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44  *.** See also: D
2ba10 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f  estroy.*/.case O
2ba20 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74  P_Clear: {.  int
2ba30 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20 6e 43   nChange;. .  nC
2ba40 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73 73  hange = 0;.  ass
2ba50 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
2ba60 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
2ba70 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
2ba80 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
2ba90 32 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  2) );.  rc = sql
2baa0 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61  ite3BtreeClearTa
2bab0 62 6c 65 28 0a 20 20 20 20 20 20 64 62 2d 3e 61  ble(.      db->a
2bac0 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c  Db[pOp->p2].pBt,
2bad0 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e   pOp->p1, (pOp->
2bae0 70 33 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20  p3 ? &nChange : 
2baf0 30 29 0a 20 20 29 3b 0a 20 20 69 66 28 20 70 4f  0).  );.  if( pO
2bb00 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e  p->p3 ){.    p->
2bb10 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e  nChange += nChan
2bb20 67 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  ge;.    if( pOp-
2bb30 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 20 20 61  >p3>0 ){.      a
2bb40 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
2bb50 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  d(&aMem[pOp->p3]
2bb60 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  ) );.      memAb
2bb70 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
2bb80 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
2bb90 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e        aMem[pOp->
2bba0 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e  p3].u.i += nChan
2bbb0 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ge;.    }.  }.  
2bbc0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2bbd0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2bbe0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2bbf0 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 53 6f   Opcode: ResetSo
2bc00 72 74 65 72 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  rter P1 * * * *.
2bc10 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c  **.** Delete all
2bc20 20 63 6f 6e 74 65 6e 74 73 20 66 72 6f 6d 20 74   contents from t
2bc30 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  he ephemeral tab
2bc40 6c 65 20 6f 72 20 73 6f 72 74 65 72 0a 2a 2a 20  le or sorter.** 
2bc50 74 68 61 74 20 69 73 20 6f 70 65 6e 20 6f 6e 20  that is open on 
2bc60 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  cursor P1..**.**
2bc70 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 6e 6c   This opcode onl
2bc80 79 20 77 6f 72 6b 73 20 66 6f 72 20 63 75 72 73  y works for curs
2bc90 6f 72 73 20 75 73 65 64 20 66 6f 72 20 73 6f 72  ors used for sor
2bca0 74 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f 70 65 6e  ting and.** open
2bcb0 65 64 20 77 69 74 68 20 4f 50 5f 4f 70 65 6e 45  ed with OP_OpenE
2bcc0 70 68 65 6d 65 72 61 6c 20 6f 72 20 4f 50 5f 53  phemeral or OP_S
2bcd0 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f 0a 63 61  orterOpen..*/.ca
2bce0 73 65 20 4f 50 5f 52 65 73 65 74 53 6f 72 74 65  se OP_ResetSorte
2bcf0 72 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  r: {.  VdbeCurso
2bd00 72 20 2a 70 43 3b 0a 20 0a 20 20 61 73 73 65 72  r *pC;. .  asser
2bd10 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2bd20 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
2bd30 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
2bd40 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2bd50 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2bd60 20 29 3b 0a 20 20 69 66 28 20 69 73 53 6f 72 74   );.  if( isSort
2bd70 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 73 71  er(pC) ){.    sq
2bd80 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52  lite3VdbeSorterR
2bd90 65 73 65 74 28 64 62 2c 20 70 43 2d 3e 75 63 2e  eset(db, pC->uc.
2bda0 70 53 6f 72 74 65 72 29 3b 0a 20 20 7d 65 6c 73  pSorter);.  }els
2bdb0 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
2bdc0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
2bdd0 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
2bde0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
2bdf0 45 70 68 65 6d 65 72 61 6c 20 29 3b 0a 20 20 20  Ephemeral );.   
2be00 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2be10 65 65 43 6c 65 61 72 54 61 62 6c 65 4f 66 43 75  eeClearTableOfCu
2be20 72 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43 75 72  rsor(pC->uc.pCur
2be30 73 6f 72 29 3b 0a 20 20 20 20 69 66 28 20 72 63  sor);.    if( rc
2be40 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2be50 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
2be60 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2be70 70 63 6f 64 65 3a 20 43 72 65 61 74 65 54 61 62  pcode: CreateTab
2be80 6c 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  le P1 P2 * * *.*
2be90 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
2bea0 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a  ]=root iDb=P1.**
2beb0 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e  .** Allocate a n
2bec0 65 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20  ew table in the 
2bed0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
2bee0 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69  le if P1==0 or i
2bef0 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61  n the.** auxilia
2bf00 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
2bf10 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20   if P1==1 or in 
2bf20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
2bf30 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e  base if.** P1>1.
2bf40 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74    Write the root
2bf50 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20   page number of 
2bf60 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  the new table in
2bf70 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  to.** register P
2bf80 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66  2.**.** The diff
2bf90 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61  erence between a
2bfa0 20 74 61 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e   table and an in
2bfb0 64 65 78 20 69 73 20 74 68 69 73 3a 20 20 41 20  dex is this:  A 
2bfc0 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61  table must.** ha
2bfd0 76 65 20 61 20 34 2d 62 79 74 65 20 69 6e 74 65  ve a 4-byte inte
2bfe0 67 65 72 20 6b 65 79 20 61 6e 64 20 63 61 6e 20  ger key and can 
2bff0 68 61 76 65 20 61 72 62 69 74 72 61 72 79 20 64  have arbitrary d
2c000 61 74 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a  ata.  An index.*
2c010 2a 20 68 61 73 20 61 6e 20 61 72 62 69 74 72 61  * has an arbitra
2c020 72 79 20 6b 65 79 20 62 75 74 20 6e 6f 20 64 61  ry key but no da
2c030 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ta..**.** See al
2c040 73 6f 3a 20 43 72 65 61 74 65 49 6e 64 65 78 0a  so: CreateIndex.
2c050 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72  */./* Opcode: Cr
2c060 65 61 74 65 49 6e 64 65 78 20 50 31 20 50 32 20  eateIndex P1 P2 
2c070 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2c080 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44  s: r[P2]=root iD
2c090 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63  b=P1.**.** Alloc
2c0a0 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65 78 20  ate a new index 
2c0b0 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
2c0c0 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
2c0d0 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  =0 or in the.** 
2c0e0 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
2c0f0 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31  se file if P1==1
2c100 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68   or in an attach
2c110 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a  ed database if.*
2c120 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74  * P1>1.  Write t
2c130 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
2c140 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74  ber of the new t
2c150 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  able into.** reg
2c160 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
2c170 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  See documentatio
2c180 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54 61  n on OP_CreateTa
2c190 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ble for addition
2c1a0 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
2c1b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74  */.case OP_Creat
2c1c0 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20 20 20  eIndex:         
2c1d0 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 63 61     /* out2 */.ca
2c1e0 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  se OP_CreateTabl
2c1f0 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  e: {          /*
2c200 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 70   out2 */.  int p
2c210 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73  gno;.  int flags
2c220 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20  ;.  Db *pDb;..  
2c230 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
2c240 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
2c250 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73   pgno = 0;.  ass
2c260 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2c270 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
2c280 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
2c290 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
2c2a0 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31  reeMask, pOp->p1
2c2b0 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
2c2c0 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
2c2d0 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
2c2e0 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  b[pOp->p1];.  as
2c2f0 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d  sert( pDb->pBt!=
2c300 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  0 );.  if( pOp->
2c310 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74  opcode==OP_Creat
2c320 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a  eTable ){.    /*
2c330 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49   flags = BTREE_I
2c340 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c  NTKEY; */.    fl
2c350 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b  ags = BTREE_INTK
2c360 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  EY;.  }else{.   
2c370 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 42   flags = BTREE_B
2c380 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63  LOBKEY;.  }.  rc
2c390 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
2c3a0 72 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e  reateTable(pDb->
2c3b0 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67  pBt, &pgno, flag
2c3c0 73 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  s);.  if( rc ) g
2c3d0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2c3e0 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 2d 3e  _error;.  pOut->
2c3f0 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72  u.i = pgno;.  br
2c400 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2c410 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20 50  e: ParseSchema P
2c420 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2c430 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20   Read and parse 
2c440 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d  all entries from
2c450 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54   the SQLITE_MAST
2c460 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61  ER table of data
2c470 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20  base P1.** that 
2c480 6d 61 74 63 68 20 74 68 65 20 57 48 45 52 45 20  match the WHERE 
2c490 63 6c 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a  clause P4. .**.*
2c4a0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
2c4b0 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65 72  vokes the parser
2c4c0 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77   to create a new
2c4d0 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
2c4e0 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74  ,.** then runs t
2c4f0 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d  he new virtual m
2c500 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74  achine.  It is t
2c510 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74  hus a re-entrant
2c520 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65   opcode..*/.case
2c530 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a   OP_ParseSchema:
2c540 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20   {.  int iDb;.  
2c550 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73  const char *zMas
2c560 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71  ter;.  char *zSq
2c570 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e  l;.  InitData in
2c580 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e  itData;..  /* An
2c590 79 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  y prepared state
2c5a0 6d 65 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65  ment that invoke
2c5b0 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69  s this opcode wi
2c5c0 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a  ll hold mutexes.
2c5d0 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74    ** on every bt
2c5e0 72 65 65 2e 20 20 54 68 69 73 20 69 73 20 61 20  ree.  This is a 
2c5f0 70 72 65 72 65 71 75 69 73 69 74 65 20 66 6f 72  prerequisite for
2c600 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20   invoking .  ** 
2c610 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
2c620 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64  ack()..  */.#ifd
2c630 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
2c640 20 20 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62    for(iDb=0; iDb
2c650 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29  <db->nDb; iDb++)
2c660 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44  {.    assert( iD
2c670 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42  b==1 || sqlite3B
2c680 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64  treeHoldsMutex(d
2c690 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29  b->aDb[iDb].pBt)
2c6a0 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a   );.  }.#endif..
2c6b0 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b    iDb = pOp->p1;
2c6c0 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
2c6d0 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
2c6e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
2c6f0 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20  HasProperty(db, 
2c700 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f  iDb, DB_SchemaLo
2c710 61 64 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73  aded) );.  /* Us
2c720 65 64 20 74 6f 20 62 65 20 61 20 63 6f 6e 64 69  ed to be a condi
2c730 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20  tional */ {.    
2c740 7a 4d 61 73 74 65 72 20 3d 20 53 43 48 45 4d 41  zMaster = SCHEMA
2c750 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a 20 20 20  _TABLE(iDb);.   
2c760 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64   initData.db = d
2c770 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  b;.    initData.
2c780 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
2c790 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72     initData.pzEr
2c7a0 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d  rMsg = &p->zErrM
2c7b0 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73  sg;.    zSql = s
2c7c0 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
2c7d0 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54  ,.       "SELECT
2c7e0 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c   name, rootpage,
2c7f0 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25   sql FROM '%q'.%
2c800 73 20 57 48 45 52 45 20 25 73 20 4f 52 44 45 52  s WHERE %s ORDER
2c810 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20   BY rowid",.    
2c820 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e     db->aDb[iDb].
2c830 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20  zName, zMaster, 
2c840 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
2c850 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20  if( zSql==0 ){. 
2c860 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
2c870 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20 20  _NOMEM_BKPT;.   
2c880 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
2c890 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62  sert( db->init.b
2c8a0 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  usy==0 );.      
2c8b0 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20  db->init.busy = 
2c8c0 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74  1;.      initDat
2c8d0 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  a.rc = SQLITE_OK
2c8e0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
2c8f0 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  !db->mallocFaile
2c900 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  d );.      rc = 
2c910 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c  sqlite3_exec(db,
2c920 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e   zSql, sqlite3In
2c930 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69  itCallback, &ini
2c940 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20  tData, 0);.     
2c950 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2c960 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61  OK ) rc = initDa
2c970 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71 6c  ta.rc;.      sql
2c980 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a  ite3DbFree(db, z
2c990 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  Sql);.      db->
2c9a0 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20  init.busy = 0;. 
2c9b0 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72     }.  }.  if( r
2c9c0 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  c ){.    sqlite3
2c9d0 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
2c9e0 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b  fConnection(db);
2c9f0 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
2ca00 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
2ca10 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
2ca20 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 61      }.    goto a
2ca30 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2ca40 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20  r;.  }.  break; 
2ca50 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65   .}..#if !define
2ca60 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e  d(SQLITE_OMIT_AN
2ca70 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65  ALYZE)./* Opcode
2ca80 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50  : LoadAnalysis P
2ca90 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
2caa0 52 65 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f  Read the sqlite_
2cab0 73 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20  stat1 table for 
2cac0 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20  database P1 and 
2cad0 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74  load the content
2cae0 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c  .** of that tabl
2caf0 65 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72  e into the inter
2cb00 6e 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74  nal index hash t
2cb10 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c  able.  This will
2cb20 20 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e   cause.** the an
2cb30 61 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73 65  alysis to be use
2cb40 64 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67  d when preparing
2cb50 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20   all subsequent 
2cb60 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65  queries..*/.case
2cb70 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73   OP_LoadAnalysis
2cb80 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
2cb90 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2cba0 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
2cbb0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61   rc = sqlite3Ana
2cbc0 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f  lysisLoad(db, pO
2cbd0 70 2d 3e 70 31 29 3b 0a 20 20 69 66 28 20 72 63  p->p1);.  if( rc
2cbe0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2cbf0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
2cc00 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20  eak;  .}.#endif 
2cc10 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
2cc20 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29  TE_OMIT_ANALYZE)
2cc30 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
2cc40 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a 20 2a  DropTable P1 * *
2cc50 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f   P4 *.**.** Remo
2cc60 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ve the internal 
2cc70 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61  (in-memory) data
2cc80 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
2cc90 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65   describe.** the
2cca0 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50 34 20   table named P4 
2ccb0 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
2ccc0 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20   This is called 
2ccd0 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a  after a table.**
2cce0 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d   is dropped from
2ccf0 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65   disk (using the
2cd00 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29   Destroy opcode)
2cd10 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
2cd20 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e  p .** the intern
2cd30 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
2cd40 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
2cd50 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
2cd60 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
2cd70 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
2cd80 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71  ropTable: {.  sq
2cd90 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
2cda0 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f  leteTable(db, pO
2cdb0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
2cdc0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
2cdd0 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e  * Opcode: DropIn
2cde0 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  dex P1 * * P4 *.
2cdf0 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
2ce00 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
2ce10 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
2ce20 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
2ce30 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78  ibe.** the index
2ce40 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
2ce50 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
2ce60 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
2ce70 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64  an index.** is d
2ce80 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b  ropped from disk
2ce90 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74   (using the Dest
2cea0 72 6f 79 20 6f 70 63 6f 64 65 29 0a 2a 2a 20 69  roy opcode).** i
2ceb0 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
2cec0 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
2ced0 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2cee0 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
2cef0 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
2cf00 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
2cf10 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64  .case OP_DropInd
2cf20 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55  ex: {.  sqlite3U
2cf30 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
2cf40 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  dex(db, pOp->p1,
2cf50 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
2cf60 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2cf70 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20  de: DropTrigger 
2cf80 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
2cf90 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
2cfa0 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
2cfb0 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
2cfc0 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
2cfd0 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 6e  ** the trigger n
2cfe0 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
2cff0 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
2d000 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20   called after a 
2d010 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72  trigger.** is dr
2d020 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20  opped from disk 
2d030 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72  (using the Destr
2d040 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72  oy opcode) in or
2d050 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20  der to keep .** 
2d060 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
2d070 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2d080 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
2d090 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
2d0a0 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
2d0b0 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69  .case OP_DropTri
2d0c0 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65  gger: {.  sqlite
2d0d0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
2d0e0 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d  Trigger(db, pOp-
2d0f0 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
2d100 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69  .  break;.}...#i
2d110 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2d120 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
2d130 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  K./* Opcode: Int
2d140 65 67 72 69 74 79 43 6b 20 50 31 20 50 32 20 50  egrityCk P1 P2 P
2d150 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f  3 P4 P5.**.** Do
2d160 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20   an analysis of 
2d170 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  the currently op
2d180 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53 74  en database.  St
2d190 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  ore in.** regist
2d1a0 65 72 20 50 31 20 74 68 65 20 74 65 78 74 20 6f  er P1 the text o
2d1b0 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  f an error messa
2d1c0 67 65 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e  ge describing an
2d1d0 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49  y problems..** I
2d1e0 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72  f no problems ar
2d1f0 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61  e found, store a
2d200 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65   NULL in registe
2d210 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  r P1..**.** The 
2d220 72 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74  register P3 cont
2d230 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  ains the maximum
2d240 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77   number of allow
2d250 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74  ed errors..** At
2d260 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65 72   most reg(P3) er
2d270 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70  rors will be rep
2d280 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68  orted..** In oth
2d290 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e  er words, the an
2d2a0 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73 20  alysis stops as 
2d2b0 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20  soon as reg(P1) 
2d2c0 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73  errors are .** s
2d2d0 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73  een.  Reg(P1) is
2d2e0 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68   updated with th
2d2f0 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  e number of erro
2d300 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a  rs remaining..**
2d310 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67  .** The root pag
2d320 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c  e numbers of all
2d330 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64   tables in the d
2d340 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74 65  atabase are inte
2d350 67 65 72 73 0a 2a 2a 20 73 74 6f 72 65 64 20 69  gers.** stored i
2d360 6e 20 50 34 5f 49 4e 54 41 52 52 41 59 20 61 72  n P4_INTARRAY ar
2d370 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  gument..**.** If
2d380 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P5 is not zero,
2d390 20 74 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f   the check is do
2d3a0 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69  ne on the auxili
2d3b0 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ary database.** 
2d3c0 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61  file, not the ma
2d3d0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
2d3e0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
2d3f0 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 69  ode is used to i
2d400 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74  mplement the int
2d410 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61  egrity_check pra
2d420 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  gma..*/.case OP_
2d430 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20  IntegrityCk: {. 
2d440 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20   int nRoot;     
2d450 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61   /* Number of ta
2d460 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20  bles to check.  
2d470 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20  (Number of root 
2d480 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74  pages.) */.  int
2d490 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20   *aRoot;     /* 
2d4a0 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67  Array of rootpag
2d4b0 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61  e numbers for ta
2d4c0 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b  bles to be check
2d4d0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  ed */.  int nErr
2d4e0 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
2d4f0 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f  r of errors repo
2d500 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  rted */.  char *
2d510 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78  z;        /* Tex
2d520 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72  t of the error r
2d530 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a  eport */.  Mem *
2d540 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65  pnErr;     /* Re
2d550 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74  gister keeping t
2d560 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72  rack of errors r
2d570 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61  emaining */..  a
2d580 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
2d590 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d  der );.  nRoot =
2d5a0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 52 6f 6f   pOp->p2;.  aRoo
2d5b0 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a  t = pOp->p4.ai;.
2d5c0 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e    assert( nRoot>
2d5d0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 61  0 );.  assert( a
2d5e0 52 6f 6f 74 5b 6e 52 6f 6f 74 5d 3d 3d 30 20 29  Root[nRoot]==0 )
2d5f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2d600 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
2d610 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
2d620 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
2d630 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f  pnErr = &aMem[pO
2d640 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
2d650 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20  ( (pnErr->flags 
2d660 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
2d670 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72  .  assert( (pnEr
2d680 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  r->flags & (MEM_
2d690 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
2d6a0 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  0 );.  pIn1 = &a
2d6b0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2d6c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c  assert( pOp->p5<
2d6d0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
2d6e0 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
2d6f0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
2d700 70 2d 3e 70 35 29 20 29 3b 0a 20 20 7a 20 3d 20  p->p5) );.  z = 
2d710 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65  sqlite3BtreeInte
2d720 67 72 69 74 79 43 68 65 63 6b 28 64 62 2d 3e 61  grityCheck(db->a
2d730 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c  Db[pOp->p5].pBt,
2d740 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20   aRoot, nRoot,. 
2d750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d770 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2c  (int)pnErr->u.i,
2d780 20 26 6e 45 72 72 29 3b 0a 20 20 70 6e 45 72 72   &nErr);.  pnErr
2d790 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20  ->u.i -= nErr;. 
2d7a0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2d7b0 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20  etNull(pIn1);.  
2d7c0 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20  if( nErr==0 ){. 
2d7d0 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20     assert( z==0 
2d7e0 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a  );.  }else if( z
2d7f0 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ==0 ){.    goto 
2d800 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b  no_mem;.  }else{
2d810 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2d820 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c 20  MemSetStr(pIn1, 
2d830 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54  z, -1, SQLITE_UT
2d840 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65  F8, sqlite3_free
2d850 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f  );.  }.  UPDATE_
2d860 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e  MAX_BLOBSIZE(pIn
2d870 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
2d880 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
2d890 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn1, encoding);
2d8a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2d8b0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2d8c0 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
2d8d0 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  K */../* Opcode:
2d8e0 20 52 6f 77 53 65 74 41 64 64 20 50 31 20 50 32   RowSetAdd P1 P2
2d8f0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2d900 69 73 3a 20 20 72 6f 77 73 65 74 28 50 31 29 3d  is:  rowset(P1)=
2d910 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73 65  r[P2].**.** Inse
2d920 72 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  rt the integer v
2d930 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65 67  alue held by reg
2d940 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20  ister P2 into a 
2d950 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a  boolean index.**
2d960 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65   held in registe
2d970 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61  r P1..**.** An a
2d980 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69  ssertion fails i
2d990 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69  f P2 is not an i
2d9a0 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  nteger..*/.case 
2d9b0 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20  OP_RowSetAdd: { 
2d9c0 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e        /* in1, in
2d9d0 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
2d9e0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2d9f0 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
2da00 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
2da10 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20   (pIn2->flags & 
2da20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
2da30 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2da40 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2da50 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
2da60 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65  3VdbeMemSetRowSe
2da70 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28  t(pIn1);.    if(
2da80 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
2da90 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
2daa0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2dab0 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65  }.  sqlite3RowSe
2dac0 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e  tInsert(pIn1->u.
2dad0 70 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d 3e 75  pRowSet, pIn2->u
2dae0 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .i);.  break;.}.
2daf0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
2db00 65 74 52 65 61 64 20 50 31 20 50 32 20 50 33 20  etRead P1 P2 P3 
2db10 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2db20 20 20 72 5b 50 33 5d 3d 72 6f 77 73 65 74 28 50    r[P3]=rowset(P
2db30 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74  1).**.** Extract
2db40 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61   the smallest va
2db50 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e  lue from boolean
2db60 20 69 6e 64 65 78 20 50 31 20 61 6e 64 20 70 75   index P1 and pu
2db70 74 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  t that value int
2db80 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33  o.** register P3
2db90 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65 61  .  Or, if boolea
2dba0 6e 20 69 6e 64 65 78 20 50 31 20 69 73 20 69 6e  n index P1 is in
2dbb0 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c  itially empty, l
2dbc0 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61  eave P3.** uncha
2dbd0 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f  nged and jump to
2dbe0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
2dbf0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
2dc00 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20  etRead: {       
2dc10 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75  /* jump, in1, ou
2dc20 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b  t3 */.  i64 val;
2dc30 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
2dc40 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
2dc50 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
2dc60 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a  MEM_RowSet)==0 .
2dc70 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77     || sqlite3Row
2dc80 53 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e  SetNext(pIn1->u.
2dc90 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d  pRowSet, &val)==
2dca0 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  0.  ){.    /* Th
2dcb0 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  e boolean index 
2dcc0 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20  is empty */.    
2dcd0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2dce0 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20  tNull(pIn1);.   
2dcf0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2dd00 28 31 2c 32 29 3b 0a 20 20 20 20 67 6f 74 6f 20  (1,2);.    goto 
2dd10 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63  jump_to_p2_and_c
2dd20 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
2dd30 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  pt;.  }else{.   
2dd40 20 2f 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20   /* A value was 
2dd50 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20  pulled from the 
2dd60 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 56 64 62  index */.    Vdb
2dd70 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 32  eBranchTaken(0,2
2dd80 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
2dd90 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
2dda0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61  Mem[pOp->p3], va
2ddb0 6c 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63  l);.  }.  goto c
2ddc0 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
2ddd0 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  pt;.}../* Opcode
2dde0 3a 20 52 6f 77 53 65 74 54 65 73 74 20 50 31 20  : RowSetTest P1 
2ddf0 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f  P2 P3 P4.** Syno
2de00 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 20 69  psis: if r[P3] i
2de10 6e 20 72 6f 77 73 65 74 28 50 31 29 20 67 6f 74  n rowset(P1) got
2de20 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
2de30 74 65 72 20 50 33 20 69 73 20 61 73 73 75 6d 65  ter P3 is assume
2de40 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62  d to hold a 64-b
2de50 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
2de60 2e 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  . If register P1
2de70 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52  .** contains a R
2de80 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64  owSet object and
2de90 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a   that RowSet obj
2dea0 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20  ect contains.** 
2deb0 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69  the value held i
2dec0 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65  n P3, jump to re
2ded0 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72  gister P2. Other
2dee0 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65  wise, insert the
2def0 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50  .** integer in P
2df00 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65  3 into the RowSe
2df10 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f  t and continue o
2df20 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74  n to the.** next
2df30 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54   opcode..**.** T
2df40 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74  he RowSet object
2df50 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f   is optimized fo
2df60 72 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65  r the case where
2df70 20 73 75 63 63 65 73 73 69 76 65 20 73 65 74 73   successive sets
2df80 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 2c  .** of integers,
2df90 20 77 68 65 72 65 20 65 61 63 68 20 73 65 74 20   where each set 
2dfa0 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c  contains no dupl
2dfb0 69 63 61 74 65 73 2e 20 45 61 63 68 20 73 65 74  icates. Each set
2dfc0 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20 69 73  .** of values is
2dfd0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
2dfe0 20 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65   unique P4 value
2dff0 2e 20 54 68 65 20 66 69 72 73 74 20 73 65 74 0a  . The first set.
2e000 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d  ** must have P4=
2e010 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65  =0, the final se
2e020 74 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73  t P4=-1.  P4 mus
2e030 74 20 62 65 20 65 69 74 68 65 72 20 2d 31 20 6f  t be either -1 o
2e040 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76  r.** non-negativ
2e050 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61  e.  For non-nega
2e060 74 69 76 65 20 76 61 6c 75 65 73 20 6f 66 20 50  tive values of P
2e070 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72  4 only the lower
2e080 20 34 0a 2a 2a 20 62 69 74 73 20 61 72 65 20 73   4.** bits are s
2e090 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a  ignificant..**.*
2e0a0 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70  * This allows op
2e0b0 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29  timizations: (a)
2e0c0 20 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72   when P4==0 ther
2e0d0 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
2e0e0 74 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73  test.** the rows
2e0f0 65 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33  et object for P3
2e100 2c 20 61 73 20 69 74 20 69 73 20 67 75 61 72 61  , as it is guara
2e110 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e  nteed not to con
2e120 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20  tain it,.** (b) 
2e130 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72  when P4==-1 ther
2e140 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
2e150 69 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75 65  insert the value
2e160 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20  , as it will.** 
2e170 6e 65 76 65 72 20 62 65 20 74 65 73 74 65 64 20  never be tested 
2e180 66 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65  for, and (c) whe
2e190 6e 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 69  n a value that i
2e1a0 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20  s part of set X 
2e1b0 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20  is.** inserted, 
2e1c0 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64  there is no need
2e1d0 20 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65   to search to se
2e1e0 65 20 69 66 20 74 68 65 20 73 61 6d 65 20 76 61  e if the same va
2e1f0 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69  lue was.** previ
2e200 6f 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61  ously inserted a
2e210 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20  s part of set X 
2e220 28 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20  (only if it was 
2e230 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e  previously.** in
2e240 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f  serted as part o
2e250 66 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74  f some other set
2e260 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  )..*/.case OP_Ro
2e270 77 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20  wSetTest: {     
2e280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e290 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  /* jump, in1, in
2e2a0 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b  3 */.  int iSet;
2e2b0 0a 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a  .  int exists;..
2e2c0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2e2d0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20  Op->p1];.  pIn3 
2e2e0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2e2f0 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e  ;.  iSet = pOp->
2e300 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20  p4.i;.  assert( 
2e310 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn3->flags&MEM_
2e320 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20  Int );..  /* If 
2e330 74 68 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e  there is anythin
2e340 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72  g other than a r
2e350 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20  owset object in 
2e360 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a  memory cell P1,.
2e370 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e    ** delete it n
2e380 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a  ow and initializ
2e390 65 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70  e P1 with an emp
2e3a0 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20  ty rowset.  */. 
2e3b0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2e3c0 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2e3d0 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
2e3e0 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65  3VdbeMemSetRowSe
2e3f0 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28  t(pIn1);.    if(
2e400 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
2e410 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
2e420 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2e430 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  }..  assert( pOp
2e440 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
2e450 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  32 );.  assert( 
2e460 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74  iSet==-1 || iSet
2e470 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65  >=0 );.  if( iSe
2e480 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20  t ){.    exists 
2e490 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54  = sqlite3RowSetT
2e4a0 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77  est(pIn1->u.pRow
2e4b0 53 65 74 2c 20 69 53 65 74 2c 20 70 49 6e 33 2d  Set, iSet, pIn3-
2e4c0 3e 75 2e 69 29 3b 0a 20 20 20 20 56 64 62 65 42  >u.i);.    VdbeB
2e4d0 72 61 6e 63 68 54 61 6b 65 6e 28 65 78 69 73 74  ranchTaken(exist
2e4e0 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28  s!=0,2);.    if(
2e4f0 20 65 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a   exists ) goto j
2e500 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
2e510 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a   if( iSet>=0 ){.
2e520 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65      sqlite3RowSe
2e530 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e  tInsert(pIn1->u.
2e540 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75  pRowSet, pIn3->u
2e550 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  .i);.  }.  break
2e560 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  ;.}...#ifndef SQ
2e570 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
2e580 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72  R../* Opcode: Pr
2e590 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33 20 50  ogram P1 P2 P3 P
2e5a0 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  4 P5.**.** Execu
2e5b0 74 65 20 74 68 65 20 74 72 69 67 67 65 72 20 70  te the trigger p
2e5c0 72 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61 73  rogram passed as
2e5d0 20 50 34 20 28 74 79 70 65 20 50 34 5f 53 55 42   P4 (type P4_SUB
2e5e0 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a  PROGRAM). .**.**
2e5f0 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P1 contains the
2e600 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20   address of the 
2e610 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
2e620 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69   contains the fi
2e630 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63  rst memory .** c
2e640 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79 20  ell in an array 
2e650 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 20 61  of values used a
2e660 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  s arguments to t
2e670 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20  he sub-program. 
2e680 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20  P2 .** contains 
2e690 74 68 65 20 61 64 64 72 65 73 73 20 74 6f 20 6a  the address to j
2e6a0 75 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73 75  ump to if the su
2e6b0 62 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77 73  b-program throws
2e6c0 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65   an IGNORE .** e
2e6d0 78 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20 74  xception using t
2e6e0 68 65 20 52 41 49 53 45 28 29 20 66 75 6e 63 74  he RAISE() funct
2e6f0 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50 33  ion. Register P3
2e700 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
2e710 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d  dress .** of a m
2e720 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68  emory cell in th
2e730 69 73 20 28 74 68 65 20 70 61 72 65 6e 74 29 20  is (the parent) 
2e740 56 4d 20 74 68 61 74 20 69 73 20 75 73 65 64 20  VM that is used 
2e750 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65 20  to allocate the 
2e760 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  .** memory requi
2e770 72 65 64 20 62 79 20 74 68 65 20 73 75 62 2d 76  red by the sub-v
2e780 64 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a  dbe at runtime..
2e790 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
2e7a0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d 20  inter to the VM 
2e7b0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
2e7c0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
2e7d0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
2e7e0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65  on-zero, then re
2e7f0 63 75 72 73 69 76 65 20 70 72 6f 67 72 61 6d 20  cursive program 
2e800 69 6e 76 6f 63 61 74 69 6f 6e 20 69 73 20 65 6e  invocation is en
2e810 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  abled..*/.case O
2e820 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20  P_Program: {    
2e830 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
2e840 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20   int nMem;      
2e850 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
2e860 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67  er of memory reg
2e870 69 73 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70  isters for sub-p
2e880 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20  rogram */.  int 
2e890 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20  nByte;          
2e8a0 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20      /* Bytes of 
2e8b0 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65  runtime space re
2e8c0 71 75 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70  quired for sub-p
2e8d0 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20  rogram */.  Mem 
2e8e0 2a 70 52 74 3b 20 20 20 20 20 20 20 20 20 20 20  *pRt;           
2e8f0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
2e900 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74  to allocate runt
2e910 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d  ime space */.  M
2e920 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20  em *pMem;       
2e930 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74         /* Used t
2e940 6f 20 69 74 65 72 61 74 65 20 74 68 72 6f 75 67  o iterate throug
2e950 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a  h memory cells *
2e960 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20  /.  Mem *pEnd;  
2e970 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
2e980 61 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  ast memory cell 
2e990 69 6e 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a  in new array */.
2e9a0 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
2e9b0 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77  ame;      /* New
2e9c0 20 76 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65   vdbe frame to e
2e9d0 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53  xecute in */.  S
2e9e0 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67  ubProgram *pProg
2e9f0 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72  ram;   /* Sub-pr
2ea00 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65  ogram to execute
2ea10 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20   */.  void *t;  
2ea20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2ea30 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69   Token identifyi
2ea40 6e 67 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20  ng trigger */.. 
2ea50 20 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d   pProgram = pOp-
2ea60 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20  >p4.pProgram;.  
2ea70 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  pRt = &aMem[pOp-
2ea80 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
2ea90 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20  pProgram->nOp>0 
2eaa0 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74 68  );.  .  /* If th
2eab0 65 20 70 35 20 66 6c 61 67 20 69 73 20 63 6c 65  e p5 flag is cle
2eac0 61 72 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69  ar, then recursi
2ead0 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ve invocation of
2eae0 20 74 72 69 67 67 65 72 73 20 69 73 20 0a 20 20   triggers is .  
2eaf0 2a 2a 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20  ** disabled for 
2eb00 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74  backwards compat
2eb10 69 62 69 6c 69 74 79 20 28 70 35 20 69 73 20 73  ibility (p5 is s
2eb20 65 74 20 69 66 20 74 68 69 73 20 73 75 62 2d 70  et if this sub-p
2eb30 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72  rogram.  ** is r
2eb40 65 61 6c 6c 79 20 61 20 74 72 69 67 67 65 72 2c  eally a trigger,
2eb50 20 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e 20 6b   not a foreign k
2eb60 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74  ey action, and t
2eb70 68 65 20 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a  he flag set.  **
2eb80 20 61 6e 64 20 63 6c 65 61 72 65 64 20 62 79 20   and cleared by 
2eb90 74 68 65 20 22 50 52 41 47 4d 41 20 72 65 63 75  the "PRAGMA recu
2eba0 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 22 20  rsive_triggers" 
2ebb0 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61 72  command is clear
2ebc0 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74  )..  ** .  ** It
2ebd0 20 69 73 20 72 65 63 75 72 73 69 76 65 20 69 6e   is recursive in
2ebe0 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67  vocation of trig
2ebf0 67 65 72 73 2c 20 61 74 20 74 68 65 20 53 51 4c  gers, at the SQL
2ec00 20 6c 65 76 65 6c 2c 20 74 68 61 74 20 69 73 20   level, that is 
2ec10 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20  .  ** disabled. 
2ec20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73 20 61 20  In some cases a 
2ec30 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 6d  single trigger m
2ec40 61 79 20 67 65 6e 65 72 61 74 65 20 6d 6f 72 65  ay generate more
2ec50 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20   than one .  ** 
2ec60 53 75 62 50 72 6f 67 72 61 6d 20 28 69 66 20 74  SubProgram (if t
2ec70 68 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 62  he trigger may b
2ec80 65 20 65 78 65 63 75 74 65 64 20 77 69 74 68 20  e executed with 
2ec90 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 64 69  more than one di
2eca0 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e  fferent .  ** ON
2ecb0 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69   CONFLICT algori
2ecc0 74 68 6d 29 2e 20 53 75 62 50 72 6f 67 72 61 6d  thm). SubProgram
2ecd0 20 73 74 72 75 63 74 75 72 65 73 20 61 73 73 6f   structures asso
2ece0 63 69 61 74 65 64 20 77 69 74 68 20 61 0a 20 20  ciated with a.  
2ecf0 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65  ** single trigge
2ed00 72 20 61 6c 6c 20 68 61 76 65 20 74 68 65 20 73  r all have the s
2ed10 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ame value for th
2ed20 65 20 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b  e SubProgram.tok
2ed30 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c  en .  ** variabl
2ed40 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  e.  */.  if( pOp
2ed50 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74 20 3d 20  ->p5 ){.    t = 
2ed60 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b  pProgram->token;
2ed70 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d  .    for(pFrame=
2ed80 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
2ed90 65 20 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b  e && pFrame->tok
2eda0 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46  en!=t; pFrame=pF
2edb0 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a  rame->pParent);.
2edc0 20 20 20 20 69 66 28 20 70 46 72 61 6d 65 20 29      if( pFrame )
2edd0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69   break;.  }..  i
2ede0 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62  f( p->nFrame>=db
2edf0 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
2ee00 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45  LIMIT_TRIGGER_DE
2ee10 50 54 48 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d  PTH] ){.    rc =
2ee20 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
2ee30 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
2ee40 72 6f 72 28 70 2c 20 22 74 6f 6f 20 6d 61 6e 79  ror(p, "too many
2ee50 20 6c 65 76 65 6c 73 20 6f 66 20 74 72 69 67 67   levels of trigg
2ee60 65 72 20 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a  er recursion");.
2ee70 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
2ee80 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
2ee90 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20  ..  /* Register 
2eea0 70 52 74 20 69 73 20 75 73 65 64 20 74 6f 20 73  pRt is used to s
2eeb0 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72 79 20  tore the memory 
2eec0 72 65 71 75 69 72 65 64 20 74 6f 20 73 61 76 65  required to save
2eed0 20 74 68 65 20 73 74 61 74 65 0a 20 20 2a 2a 20   the state.  ** 
2eee0 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  of the current p
2eef0 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68 65 20  rogram, and the 
2ef00 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20  memory required 
2ef10 61 74 20 72 75 6e 74 69 6d 65 20 74 6f 20 65 78  at runtime to ex
2ef20 65 63 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 74  ecute.  ** the t
2ef30 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 20  rigger program. 
2ef40 49 66 20 74 68 69 73 20 74 72 69 67 67 65 72 20  If this trigger 
2ef50 68 61 73 20 62 65 65 6e 20 66 69 72 65 64 20 62  has been fired b
2ef60 65 66 6f 72 65 2c 20 74 68 65 6e 20 70 52 74 20  efore, then pRt 
2ef70 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65 61 64 79  .  ** is already
2ef80 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65   allocated. Othe
2ef90 72 77 69 73 65 2c 20 69 74 20 6d 75 73 74 20 62  rwise, it must b
2efa0 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20  e initialized.  
2efb0 2a 2f 0a 20 20 69 66 28 20 28 70 52 74 2d 3e 66  */.  if( (pRt->f
2efc0 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d  lags&MEM_Frame)=
2efd0 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62  =0 ){.    /* Sub
2efe0 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20  Program.nMem is 
2eff0 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
2f000 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  r of memory cell
2f010 73 20 75 73 65 64 20 62 79 20 74 68 65 20 0a 20  s used by the . 
2f020 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74     ** program st
2f030 6f 72 65 64 20 69 6e 20 53 75 62 50 72 6f 67 72  ored in SubProgr
2f040 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20  am.aOp. As well 
2f050 61 73 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65  as these, one me
2f060 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c  mory.    ** cell
2f070 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
2f080 20 65 61 63 68 20 63 75 72 73 6f 72 20 75 73 65   each cursor use
2f090 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d  d by the program
2f0a0 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20  . Set local.    
2f0b0 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d  ** variable nMem
2f0c0 20 28 61 6e 64 20 6c 61 74 65 72 2c 20 56 64 62   (and later, Vdb
2f0d0 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d  eFrame.nChildMem
2f0e0 29 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65 2e  ) to this value.
2f0f0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d  .    */.    nMem
2f100 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65   = pProgram->nMe
2f110 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  m + pProgram->nC
2f120 73 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  sr;.    assert( 
2f130 6e 4d 65 6d 3e 30 20 29 3b 0a 20 20 20 20 69 66  nMem>0 );.    if
2f140 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  ( pProgram->nCsr
2f150 3d 3d 30 20 29 20 6e 4d 65 6d 2b 2b 3b 0a 20 20  ==0 ) nMem++;.  
2f160 20 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38    nByte = ROUND8
2f170 28 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d  (sizeof(VdbeFram
2f180 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)).            
2f190 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f    + nMem * sizeo
2f1a0 66 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20  f(Mem).         
2f1b0 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d       + pProgram-
2f1c0 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56  >nCsr * sizeof(V
2f1d0 64 62 65 43 75 72 73 6f 72 20 2a 29 0a 20 20 20  dbeCursor *).   
2f1e0 20 20 20 20 20 20 20 20 20 20 20 2b 20 70 50 72             + pPr
2f1f0 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 20 2a 20 73  ogram->nOnce * s
2f200 69 7a 65 6f 66 28 75 38 29 3b 0a 20 20 20 20 70  izeof(u8);.    p
2f210 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 44  Frame = sqlite3D
2f220 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20  bMallocZero(db, 
2f230 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20  nByte);.    if( 
2f240 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20  !pFrame ){.     
2f250 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2f260 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
2f270 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 52  dbeMemRelease(pR
2f280 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61  t);.    pRt->fla
2f290 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a  gs = MEM_Frame;.
2f2a0 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d      pRt->u.pFram
2f2b0 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20  e = pFrame;..   
2f2c0 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a   pFrame->v = p;.
2f2d0 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69      pFrame->nChi
2f2e0 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20  ldMem = nMem;.  
2f2f0 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64    pFrame->nChild
2f300 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  Csr = pProgram->
2f310 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  nCsr;.    pFrame
2f320 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70  ->pc = (int)(pOp
2f330 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 70 46 72   - aOp);.    pFr
2f340 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61  ame->aMem = p->a
2f350 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Mem;.    pFrame-
2f360 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b  >nMem = p->nMem;
2f370 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 70 43  .    pFrame->apC
2f380 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b 0a 20  sr = p->apCsr;. 
2f390 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75 72 73     pFrame->nCurs
2f3a0 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 3b  or = p->nCursor;
2f3b0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 70  .    pFrame->aOp
2f3c0 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 70   = p->aOp;.    p
2f3d0 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e  Frame->nOp = p->
2f3e0 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  nOp;.    pFrame-
2f3f0 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67 72 61  >token = pProgra
2f400 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 70 46  m->token;.    pF
2f410 72 61 6d 65 2d 3e 61 4f 6e 63 65 46 6c 61 67 20  rame->aOnceFlag 
2f420 3d 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 3b 0a  = p->aOnceFlag;.
2f430 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 6e 63      pFrame->nOnc
2f440 65 46 6c 61 67 20 3d 20 70 2d 3e 6e 4f 6e 63 65  eFlag = p->nOnce
2f450 46 6c 61 67 3b 0a 23 69 66 64 65 66 20 53 51 4c  Flag;.#ifdef SQL
2f460 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f  ITE_ENABLE_STMT_
2f470 53 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20 70  SCANSTATUS.    p
2f480 46 72 61 6d 65 2d 3e 61 6e 45 78 65 63 20 3d 20  Frame->anExec = 
2f490 70 2d 3e 61 6e 45 78 65 63 3b 0a 23 65 6e 64 69  p->anExec;.#endi
2f4a0 66 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26 56  f..    pEnd = &V
2f4b0 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
2f4c0 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69  me)[pFrame->nChi
2f4d0 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28  ldMem];.    for(
2f4e0 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65  pMem=VdbeFrameMe
2f4f0 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21  m(pFrame); pMem!
2f500 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a  =pEnd; pMem++){.
2f510 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67        pMem->flag
2f520 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s = MEM_Undefine
2f530 64 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64  d;.      pMem->d
2f540 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20  b = db;.    }.  
2f550 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46 72 61 6d  }else{.    pFram
2f560 65 20 3d 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d  e = pRt->u.pFram
2f570 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e;.    assert( p
2f580 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50  Program->nMem+pP
2f590 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46  rogram->nCsr==pF
2f5a0 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20  rame->nChildMem 
2f5b0 0a 20 20 20 20 20 20 20 20 7c 7c 20 28 70 50 72  .        || (pPr
2f5c0 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 26  ogram->nCsr==0 &
2f5d0 26 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d  & pProgram->nMem
2f5e0 2b 31 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69  +1==pFrame->nChi
2f5f0 6c 64 4d 65 6d 29 20 29 3b 0a 20 20 20 20 61 73  ldMem) );.    as
2f600 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
2f610 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43  nCsr==pFrame->nC
2f620 68 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61  hildCsr );.    a
2f630 73 73 65 72 74 28 20 28 69 6e 74 29 28 70 4f 70  ssert( (int)(pOp
2f640 20 2d 20 61 4f 70 29 3d 3d 70 46 72 61 6d 65 2d   - aOp)==pFrame-
2f650 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d  >pc );.  }..  p-
2f660 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72  >nFrame++;.  pFr
2f670 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70  ame->pParent = p
2f680 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61  ->pFrame;.  pFra
2f690 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  me->lastRowid = 
2f6a0 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46 72  lastRowid;.  pFr
2f6b0 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70  ame->nChange = p
2f6c0 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 46 72  ->nChange;.  pFr
2f6d0 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67 65 20 3d  ame->nDbChange =
2f6e0 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67 65 3b   p->db->nChange;
2f6f0 0a 20 20 61 73 73 65 72 74 28 20 70 46 72 61 6d  .  assert( pFram
2f700 65 2d 3e 70 41 75 78 44 61 74 61 3d 3d 30 20 29  e->pAuxData==0 )
2f710 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 41 75 78  ;.  pFrame->pAux
2f720 44 61 74 61 20 3d 20 70 2d 3e 70 41 75 78 44 61  Data = p->pAuxDa
2f730 74 61 3b 0a 20 20 70 2d 3e 70 41 75 78 44 61 74  ta;.  p->pAuxDat
2f740 61 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e 43 68 61  a = 0;.  p->nCha
2f750 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46  nge = 0;.  p->pF
2f760 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20  rame = pFrame;. 
2f770 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20   p->aMem = aMem 
2f780 3d 20 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70  = VdbeFrameMem(p
2f790 46 72 61 6d 65 29 3b 0a 20 20 70 2d 3e 6e 4d 65  Frame);.  p->nMe
2f7a0 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69  m = pFrame->nChi
2f7b0 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72  ldMem;.  p->nCur
2f7c0 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d  sor = (u16)pFram
2f7d0 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20  e->nChildCsr;.  
2f7e0 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65  p->apCsr = (Vdbe
2f7f0 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b  Cursor **)&aMem[
2f800 70 2d 3e 6e 4d 65 6d 5d 3b 0a 20 20 70 2d 3e 61  p->nMem];.  p->a
2f810 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67  Op = aOp = pProg
2f820 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e  ram->aOp;.  p->n
2f830 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  Op = pProgram->n
2f840 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e 63 65 46 6c  Op;.  p->aOnceFl
2f850 61 67 20 3d 20 28 75 38 20 2a 29 26 70 2d 3e 61  ag = (u8 *)&p->a
2f860 70 43 73 72 5b 70 2d 3e 6e 43 75 72 73 6f 72 5d  pCsr[p->nCursor]
2f870 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67  ;.  p->nOnceFlag
2f880 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e   = pProgram->nOn
2f890 63 65 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  ce;.#ifdef SQLIT
2f8a0 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43  E_ENABLE_STMT_SC
2f8b0 41 4e 53 54 41 54 55 53 0a 20 20 70 2d 3e 61 6e  ANSTATUS.  p->an
2f8c0 45 78 65 63 20 3d 20 30 3b 0a 23 65 6e 64 69 66  Exec = 0;.#endif
2f8d0 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 2d 31  .  pOp = &aOp[-1
2f8e0 5d 3b 0a 20 20 6d 65 6d 73 65 74 28 70 2d 3e 61  ];.  memset(p->a
2f8f0 4f 6e 63 65 46 6c 61 67 2c 20 30 2c 20 70 2d 3e  OnceFlag, 0, p->
2f900 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a 20 20 62  nOnceFlag);..  b
2f910 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2f920 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50 32 20  de: Param P1 P2 
2f930 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73  * * *.**.** This
2f940 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
2f950 65 76 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20  ever present in 
2f960 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c  sub-programs cal
2f970 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a 2a 20  led via the .** 
2f980 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72  OP_Program instr
2f990 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76  uction. Copy a v
2f9a0 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20 73  alue currently s
2f9b0 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72  tored in a memor
2f9c0 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68  y .** cell of th
2f9d0 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e  e calling (paren
2f9e0 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c  t) frame to cell
2f9f0 20 50 32 20 69 6e 20 74 68 65 20 63 75 72 72 65   P2 in the curre
2fa00 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64  nt frames .** ad
2fa10 64 72 65 73 73 20 73 70 61 63 65 2e 20 54 68 69  dress space. Thi
2fa20 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69  s is used by tri
2fa30 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74 6f  gger programs to
2fa40 20 61 63 63 65 73 73 20 74 68 65 20 6e 65 77 2e   access the new.
2fa50 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20  * .** and old.* 
2fa60 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  values..**.** Th
2fa70 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65  e address of the
2fa80 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61 72   cell in the par
2fa90 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64 65 74  ent frame is det
2faa0 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64 69 6e  ermined by addin
2fab0 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f  g.** the value o
2fac0 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e  f the P1 argumen
2fad0 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
2fae0 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e  f the P1 argumen
2faf0 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c  t to the.** call
2fb00 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69  ing OP_Program i
2fb10 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
2fb20 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20  ase OP_Param: { 
2fb30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
2fb40 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  2 */.  VdbeFrame
2fb50 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20   *pFrame;.  Mem 
2fb60 2a 70 49 6e 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  *pIn;.  pOut = o
2fb70 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
2fb80 20 70 4f 70 29 3b 0a 20 20 70 46 72 61 6d 65 20   pOp);.  pFrame 
2fb90 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70  = p->pFrame;.  p
2fba0 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d  In = &pFrame->aM
2fbb0 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72  em[pOp->p1 + pFr
2fbc0 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d  ame->aOp[pFrame-
2fbd0 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73  >pc].p1];   .  s
2fbe0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
2fbf0 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
2fc00 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a  In, MEM_Ephem);.
2fc10 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64    break;.}..#end
2fc20 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51  if /* #ifndef SQ
2fc30 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
2fc40 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  R */..#ifndef SQ
2fc50 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
2fc60 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a  N_KEY./* Opcode:
2fc70 20 46 6b 43 6f 75 6e 74 65 72 20 50 31 20 50 32   FkCounter P1 P2
2fc80 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2fc90 69 73 3a 20 66 6b 63 74 72 5b 50 31 5d 2b 3d 50  is: fkctr[P1]+=P
2fca0 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e  2.**.** Incremen
2fcb0 74 20 61 20 22 63 6f 6e 73 74 72 61 69 6e 74 20  t a "constraint 
2fcc0 63 6f 75 6e 74 65 72 22 20 62 79 20 50 32 20 28  counter" by P2 (
2fcd0 50 32 20 6d 61 79 20 62 65 20 6e 65 67 61 74 69  P2 may be negati
2fce0 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29 2e  ve or positive).
2fcf0 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e  .** If P1 is non
2fd00 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61 74 61 62  -zero, the datab
2fd10 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63  ase constraint c
2fd20 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d  ounter is increm
2fd30 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66 65 72  ented .** (defer
2fd40 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  red foreign key 
2fd50 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f 74  constraints). Ot
2fd60 68 65 72 77 69 73 65 2c 20 69 66 20 50 31 20 69  herwise, if P1 i
2fd70 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a 20  s zero, the .** 
2fd80 73 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74 65  statement counte
2fd90 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  r is incremented
2fda0 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65   (immediate fore
2fdb0 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
2fdc0 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  nts)..*/.case OP
2fdd0 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20 20  _FkCounter: {.  
2fde0 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20  if( db->flags & 
2fdf0 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20  SQLITE_DeferFKs 
2fe00 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65  ){.    db->nDefe
2fe10 72 72 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20 70  rredImmCons += p
2fe20 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 20  Op->p2;.  }else 
2fe30 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  if( pOp->p1 ){. 
2fe40 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
2fe50 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  Cons += pOp->p2;
2fe60 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d  .  }else{.    p-
2fe70 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20 2b  >nFkConstraint +
2fe80 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20  = pOp->p2;.  }. 
2fe90 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2fea0 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20 50  code: FkIfZero P
2feb0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
2fec0 6e 6f 70 73 69 73 3a 20 69 66 20 66 6b 63 74 72  nopsis: if fkctr
2fed0 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32 0a  [P1]==0 goto P2.
2fee0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2fef0 65 20 74 65 73 74 73 20 69 66 20 61 20 66 6f 72  e tests if a for
2ff00 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
2ff10 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 63  int-counter is c
2ff20 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a  urrently zero..*
2ff30 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f  * If so, jump to
2ff40 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
2ff50 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c   Otherwise, fall
2ff60 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2ff70 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63  next .** instruc
2ff80 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tion..**.** If P
2ff90 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  1 is non-zero, t
2ffa0 68 65 6e 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hen the jump is 
2ffb0 74 61 6b 65 6e 20 69 66 20 74 68 65 20 64 61 74  taken if the dat
2ffc0 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74  abase constraint
2ffd0 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a  -counter.** is z
2ffe0 65 72 6f 20 28 74 68 65 20 6f 6e 65 20 74 68 61  ero (the one tha
2fff0 74 20 63 6f 75 6e 74 73 20 64 65 66 65 72 72 65  t counts deferre
30000 64 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  d constraint vio
30010 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20 50 31 20  lations). If P1 
30020 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20  is.** zero, the 
30030 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
30040 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63   the statement c
30050 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65  onstraint-counte
30060 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d  r is zero.** (im
30070 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20  mediate foreign 
30080 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  key constraint v
30090 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63  iolations)..*/.c
300a0 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a  ase OP_FkIfZero:
300b0 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75   {         /* ju
300c0 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d  mp */.  if( pOp-
300d0 3e 70 31 20 29 7b 0a 20 20 20 20 56 64 62 65 42  >p1 ){.    VdbeB
300e0 72 61 6e 63 68 54 61 6b 65 6e 28 64 62 2d 3e 6e  ranchTaken(db->n
300f0 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20  DeferredCons==0 
30100 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  && db->nDeferred
30110 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a  ImmCons==0, 2);.
30120 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 44 65 66      if( db->nDef
30130 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20  erredCons==0 && 
30140 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
30150 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a  Cons==0 ) goto j
30160 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c  ump_to_p2;.  }el
30170 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  se{.    VdbeBran
30180 63 68 54 61 6b 65 6e 28 70 2d 3e 6e 46 6b 43 6f  chTaken(p->nFkCo
30190 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64  nstraint==0 && d
301a0 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
301b0 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20  ons==0, 2);.    
301c0 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72  if( p->nFkConstr
301d0 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e  aint==0 && db->n
301e0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d  DeferredImmCons=
301f0 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  =0 ) goto jump_t
30200 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
30210 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 23  k;.}.#endif /* #
30220 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30230 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 2a  IT_FOREIGN_KEY *
30240 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
30250 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
30260 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  MENT./* Opcode: 
30270 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a 20 2a  MemMax P1 P2 * *
30280 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
30290 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50 31 5d 2c  r[P1]=max(r[P1],
302a0 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 50 31 20  r[P2]).**.** P1 
302b0 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e  is a register in
302c0 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20   the root frame 
302d0 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68 65 20  of this VM (the 
302e0 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a 2a  root frame is.**
302f0 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20   different from 
30300 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d  the current fram
30310 65 20 69 66 20 74 68 69 73 20 69 6e 73 74 72 75  e if this instru
30320 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 65  ction is being e
30330 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68 69  xecuted.** withi
30340 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 29  n a sub-program)
30350 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75 65 20  . Set the value 
30360 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 74  of register P1 t
30370 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66  o the maximum of
30380 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e 74   .** its current
30390 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 76   value and the v
303a0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
303b0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
303c0 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72 6f  instruction thro
303d0 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74  ws an error if t
303e0 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  he memory cell i
303f0 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a  s not initially.
30400 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ** an integer..*
30410 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78  /.case OP_MemMax
30420 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e  : {        /* in
30430 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  2 */.  VdbeFrame
30440 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66 28 20   *pFrame;.  if( 
30450 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  p->pFrame ){.   
30460 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
30470 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70  Frame; pFrame->p
30480 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70  Parent; pFrame=p
30490 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
304a0 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 70 46 72  .    pIn1 = &pFr
304b0 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
304c0 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  1];.  }else{.   
304d0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
304e0 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61 73  p->p1];.  }.  as
304f0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
30500 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69  (pIn1) );.  sqli
30510 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
30520 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49  rify(pIn1);.  pI
30530 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
30540 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
30550 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
30560 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  pIn2);.  if( pIn
30570 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69  1->u.i<pIn2->u.i
30580 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69  ){.    pIn1->u.i
30590 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20   = pIn2->u.i;.  
305a0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
305b0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
305c0 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
305d0 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
305e0 49 66 50 6f 73 20 50 31 20 50 32 20 50 33 20 2a  IfPos P1 P2 P3 *
305f0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
30600 69 66 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e 20  if r[P1]>0 then 
30610 72 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f 20  r[P1]-=P3, goto 
30620 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P2.**.** Registe
30630 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69  r P1 must contai
30640 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a  n an integer..**
30650 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66   If the value of
30660 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
30670 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20 73 75  1 or greater, su
30680 62 74 72 61 63 74 20 50 33 20 66 72 6f 6d 20 74  btract P3 from t
30690 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 50  he.** value in P
306a0 31 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50 32  1 and jump to P2
306b0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 69  ..**.** If the i
306c0 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20  nitial value of 
306d0 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6c  register P1 is l
306e0 65 73 73 20 74 68 61 6e 20 31 2c 20 74 68 65 6e  ess than 1, then
306f0 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73   the.** value is
30700 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 63   unchanged and c
30710 6f 6e 74 72 6f 6c 20 70 61 73 73 65 73 20 74 68  ontrol passes th
30720 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
30730 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
30740 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a  /.case OP_IfPos:
30750 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
30760 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
30770 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
30780 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
30790 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
307a0 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
307b0 54 61 6b 65 6e 28 20 70 49 6e 31 2d 3e 75 2e 69  Taken( pIn1->u.i
307c0 3e 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49  >0, 2);.  if( pI
307d0 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20  n1->u.i>0 ){.   
307e0 20 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d 20 70 4f   pIn1->u.i -= pO
307f0 70 2d 3e 70 33 3b 0a 20 20 20 20 67 6f 74 6f 20  p->p3;.    goto 
30800 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
30810 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
30820 70 63 6f 64 65 3a 20 4f 66 66 73 65 74 4c 69 6d  pcode: OffsetLim
30830 69 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  it P1 P2 P3 * *.
30840 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
30850 72 5b 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b 50  r[P1]>0 then r[P
30860 32 5d 3d 72 5b 50 31 5d 2b 6d 61 78 28 30 2c 72  2]=r[P1]+max(0,r
30870 5b 50 33 5d 29 20 65 6c 73 65 20 72 5b 50 32 5d  [P3]) else r[P2]
30880 3d 28 2d 31 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73  =(-1).**.** This
30890 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73   opcode performs
308a0 20 61 20 63 6f 6d 6d 6f 6e 6c 79 20 75 73 65 64   a commonly used
308b0 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 61 73 73   computation ass
308c0 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a 20  ociated with.** 
308d0 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54  LIMIT and OFFSET
308e0 20 70 72 6f 63 65 73 73 2e 20 20 72 5b 50 31 5d   process.  r[P1]
308f0 20 68 6f 6c 64 73 20 74 68 65 20 6c 69 6d 69 74   holds the limit
30900 20 63 6f 75 6e 74 65 72 2e 20 20 72 5b 50 33 5d   counter.  r[P3]
30910 0a 2a 2a 20 68 6f 6c 64 73 20 74 68 65 20 6f 66  .** holds the of
30920 66 73 65 74 20 63 6f 75 6e 74 65 72 2e 20 20 54  fset counter.  T
30930 68 65 20 6f 70 63 6f 64 65 20 63 6f 6d 70 75 74  he opcode comput
30940 65 73 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 20  es the combined 
30950 76 61 6c 75 65 0a 2a 2a 20 6f 66 20 74 68 65 20  value.** of the 
30960 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54  LIMIT and OFFSET
30970 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74   and stores that
30980 20 76 61 6c 75 65 20 69 6e 20 72 5b 50 32 5d 2e   value in r[P2].
30990 20 20 54 68 65 20 72 5b 50 32 5d 0a 2a 2a 20 76    The r[P2].** v
309a0 61 6c 75 65 20 63 6f 6d 70 75 74 65 64 20 69 73  alue computed is
309b0 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
309c0 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74 20 77  r of rows that w
309d0 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 0a 2a  ill need to be.*
309e0 2a 20 76 69 73 69 74 65 64 20 69 6e 20 6f 72 64  * visited in ord
309f0 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 74  er to complete t
30a00 68 65 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20  he query..**.** 
30a10 49 66 20 72 5b 50 33 5d 20 69 73 20 7a 65 72 6f  If r[P3] is zero
30a20 20 6f 72 20 6e 65 67 61 74 69 76 65 2c 20 74 68   or negative, th
30a30 61 74 20 6d 65 61 6e 73 20 74 68 65 72 65 20 69  at means there i
30a40 73 20 6e 6f 20 4f 46 46 53 45 54 0a 2a 2a 20 61  s no OFFSET.** a
30a50 6e 64 20 72 5b 50 32 5d 20 69 73 20 73 65 74 20  nd r[P2] is set 
30a60 74 6f 20 62 65 20 74 68 65 20 76 61 6c 75 65 20  to be the value 
30a70 6f 66 20 74 68 65 20 4c 49 4d 49 54 2c 20 72 5b  of the LIMIT, r[
30a80 50 31 5d 2e 0a 2a 2a 0a 2a 2a 20 69 66 20 72 5b  P1]..**.** if r[
30a90 50 31 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20 6e  P1] is zero or n
30aa0 65 67 61 74 69 76 65 2c 20 74 68 61 74 20 6d 65  egative, that me
30ab0 61 6e 73 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ans there is no 
30ac0 4c 49 4d 49 54 0a 2a 2a 20 61 6e 64 20 72 5b 50  LIMIT.** and r[P
30ad0 32 5d 20 69 73 20 73 65 74 20 74 6f 20 2d 31 2e  2] is set to -1.
30ae0 20 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 77 69 73   .**.** Otherwis
30af0 65 2c 20 72 5b 50 32 5d 20 69 73 20 73 65 74 20  e, r[P2] is set 
30b00 74 6f 20 74 68 65 20 73 75 6d 20 6f 66 20 72 5b  to the sum of r[
30b10 50 31 5d 20 61 6e 64 20 72 5b 50 33 5d 2e 0a 2a  P1] and r[P3]..*
30b20 2f 0a 63 61 73 65 20 4f 50 5f 4f 66 66 73 65 74  /.case OP_Offset
30b30 4c 69 6d 69 74 3a 20 7b 20 20 20 20 2f 2a 20 69  Limit: {    /* i
30b40 6e 31 2c 20 6f 75 74 32 2c 20 69 6e 33 20 2a 2f  n1, out2, in3 */
30b50 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
30b60 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33  pOp->p1];.  pIn3
30b70 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
30b80 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  ];.  pOut = out2
30b90 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
30ba0 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  p);.  assert( pI
30bb0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
30bc0 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Int );.  assert(
30bd0 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
30be0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 4f 75 74  EM_Int );.  pOut
30bf0 2d 3e 75 2e 69 20 3d 20 70 49 6e 31 2d 3e 75 2e  ->u.i = pIn1->u.
30c00 69 3c 3d 30 20 3f 20 2d 31 20 3a 20 70 49 6e 31  i<=0 ? -1 : pIn1
30c10 2d 3e 75 2e 69 2b 28 70 49 6e 33 2d 3e 75 2e 69  ->u.i+(pIn3->u.i
30c20 3e 30 3f 70 49 6e 33 2d 3e 75 2e 69 3a 30 29 3b  >0?pIn3->u.i:0);
30c30 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
30c40 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 5a 65 72  Opcode: IfNotZer
30c50 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  o P1 P2 P3 * *.*
30c60 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
30c70 5b 50 31 5d 21 3d 30 20 74 68 65 6e 20 72 5b 50  [P1]!=0 then r[P
30c80 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f 20 50 32 0a  1]-=P3, goto P2.
30c90 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
30ca0 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61  1 must contain a
30cb0 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74  n integer.  If t
30cc0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
30cd0 67 69 73 74 65 72 20 50 31 20 69 73 0a 2a 2a 20  gister P1 is.** 
30ce0 69 6e 69 74 69 61 6c 6c 79 20 6e 6f 6e 7a 65 72  initially nonzer
30cf0 6f 2c 20 74 68 65 6e 20 73 75 62 74 72 61 63 74  o, then subtract
30d00 20 50 33 20 66 72 6f 6d 20 74 68 65 20 76 61 6c   P3 from the val
30d10 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
30d20 31 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f  1 and.** jump to
30d30 20 50 32 2e 20 20 49 66 20 72 65 67 69 73 74 65   P2.  If registe
30d40 72 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c  r P1 is initiall
30d50 79 20 7a 65 72 6f 2c 20 6c 65 61 76 65 20 69 74  y zero, leave it
30d60 20 75 6e 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e   unchanged.** an
30d70 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a  d fall through..
30d80 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74  */.case OP_IfNot
30d90 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f  Zero: {        /
30da0 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
30db0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
30dc0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
30dd0 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
30de0 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42  M_Int );.  VdbeB
30df0 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d  ranchTaken(pIn1-
30e00 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20 20 69 66  >u.i<0, 2);.  if
30e10 28 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 0a 20  ( pIn1->u.i ){. 
30e20 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d      pIn1->u.i -=
30e30 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 20 67   pOp->p3;.     g
30e40 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
30e50 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
30e60 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 63 72 4a  /* Opcode: DecrJ
30e70 75 6d 70 5a 65 72 6f 20 50 31 20 50 32 20 2a 20  umpZero P1 P2 * 
30e80 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
30e90 20 69 66 20 28 2d 2d 72 5b 50 31 5d 29 3d 3d 30   if (--r[P1])==0
30ea0 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52   goto P2.**.** R
30eb0 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
30ec0 68 6f 6c 64 20 61 6e 20 69 6e 74 65 67 65 72 2e  hold an integer.
30ed0 20 20 44 65 63 72 65 6d 65 6e 74 20 74 68 65 20    Decrement the 
30ee0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
30ef0 72 20 50 31 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d  r P1.** then jum
30f00 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 6e  p to P2 if the n
30f10 65 77 20 76 61 6c 75 65 20 69 73 20 65 78 61 63  ew value is exac
30f20 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73  tly zero..*/.cas
30f30 65 20 4f 50 5f 44 65 63 72 4a 75 6d 70 5a 65 72  e OP_DecrJumpZer
30f40 6f 3a 20 7b 20 20 20 20 20 20 2f 2a 20 6a 75 6d  o: {      /* jum
30f50 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
30f60 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
30f70 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
30f80 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
30f90 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 2d   );.  pIn1->u.i-
30fa0 2d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  -;.  VdbeBranchT
30fb0 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d  aken(pIn1->u.i==
30fc0 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  0, 2);.  if( pIn
30fd0 31 2d 3e 75 2e 69 3d 3d 30 20 29 20 67 6f 74 6f  1->u.i==0 ) goto
30fe0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62   jump_to_p2;.  b
30ff0 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
31000 6f 64 65 3a 20 4a 75 6d 70 5a 65 72 6f 49 6e 63  ode: JumpZeroInc
31010 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  r P1 P2 * * *.**
31020 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 28 72   Synopsis: if (r
31030 5b 50 31 5d 2b 2b 29 3d 3d 30 20 29 20 67 6f 74  [P1]++)==0 ) got
31040 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  o P2.**.** The r
31050 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
31060 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
31070 65 72 2e 20 20 49 66 20 72 65 67 69 73 74 65 72  er.  If register
31080 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79   P1 is initially
31090 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  .** zero, then j
310a0 75 6d 70 20 74 6f 20 50 32 2e 20 20 49 6e 63 72  ump to P2.  Incr
310b0 65 6d 65 6e 74 20 72 65 67 69 73 74 65 72 20 50  ement register P
310c0 31 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  1 regardless of 
310d0 77 68 65 74 68 65 72 20 6f 72 0a 2a 2a 20 6e 6f  whether or.** no
310e0 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
310f0 6b 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ken..*/.case OP_
31100 4a 75 6d 70 5a 65 72 6f 49 6e 63 72 3a 20 7b 20  JumpZeroIncr: { 
31110 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
31120 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
31130 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
31140 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
31150 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
31160 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
31170 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c  en(pIn1->u.i==0,
31180 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31   2);.  if( (pIn1
31190 2d 3e 75 2e 69 2b 2b 29 3d 3d 30 20 29 20 67 6f  ->u.i++)==0 ) go
311a0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
311b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
311c0 63 6f 64 65 3a 20 41 67 67 53 74 65 70 30 20 2a  code: AggStep0 *
311d0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
311e0 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d  Synopsis: accum=
311f0 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32 40  r[P3] step(r[P2@
31200 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  P5]).**.** Execu
31210 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  te the step func
31220 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72  tion for an aggr
31230 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66  egate.  The.** f
31240 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61  unction has P5 a
31250 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69  rguments.   P4 i
31260 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
31270 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74  he FuncDef.** st
31280 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65  ructure that spe
31290 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74  cifies the funct
312a0 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20 50  ion.  Register P
312b0 33 20 69 73 20 74 68 65 0a 2a 2a 20 61 63 63 75  3 is the.** accu
312c0 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  mulator..**.** T
312d0 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  he P5 arguments 
312e0 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72  are taken from r
312f0 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69  egister P2 and i
31300 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  ts.** successors
31310 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
31320 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20  AggStep * P2 P3 
31330 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
31340 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73  s: accum=r[P3] s
31350 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a  tep(r[P2@P5]).**
31360 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
31370 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f  step function fo
31380 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20  r an aggregate. 
31390 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e   The.** function
313a0 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74   has P5 argument
313b0 73 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69  s.   P4 is a poi
313c0 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74  nter to an sqlit
313d0 65 33 5f 63 6f 6e 74 65 78 74 0a 2a 2a 20 6f 62  e3_context.** ob
313e0 6a 65 63 74 20 74 68 61 74 20 69 73 20 75 73 65  ject that is use
313f0 64 20 74 6f 20 72 75 6e 20 74 68 65 20 66 75 6e  d to run the fun
31400 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72  ction.  Register
31410 20 50 33 20 69 73 0a 2a 2a 20 61 73 20 74 68 65   P3 is.** as the
31420 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a   accumulator..**
31430 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d  .** The P5 argum
31440 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66  ents are taken f
31450 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
31460 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65  and its.** succe
31470 73 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ssors..**.** Thi
31480 73 20 6f 70 63 6f 64 65 20 69 73 20 69 6e 69 74  s opcode is init
31490 69 61 6c 6c 79 20 63 6f 64 65 64 20 61 73 20 4f  ially coded as O
314a0 50 5f 41 67 67 53 74 65 70 30 2e 20 20 4f 6e 20  P_AggStep0.  On 
314b0 66 69 72 73 74 20 65 76 61 6c 75 61 74 69 6f 6e  first evaluation
314c0 2c 0a 2a 2a 20 74 68 65 20 46 75 6e 63 44 65 66  ,.** the FuncDef
314d0 20 73 74 6f 72 65 64 20 69 6e 20 50 34 20 69 73   stored in P4 is
314e0 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
314f0 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  an sqlite3_conte
31500 78 74 20 61 6e 64 0a 2a 2a 20 74 68 65 20 6f 70  xt and.** the op
31510 63 6f 64 65 20 69 73 20 63 68 61 6e 67 65 64 2e  code is changed.
31520 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c 20 74    In this way, t
31530 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
31540 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69  n of the.** sqli
31550 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 6e 6c 79  te3_context only
31560 20 68 61 70 70 65 6e 73 20 6f 6e 63 65 2c 20 69   happens once, i
31570 6e 73 74 65 61 64 20 6f 66 20 6f 6e 20 65 61 63  nstead of on eac
31580 68 20 63 61 6c 6c 20 74 6f 20 74 68 65 0a 2a 2a  h call to the.**
31590 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e 0a   step function..
315a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74  */.case OP_AggSt
315b0 65 70 30 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  ep0: {.  int n;.
315c0 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
315d0 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73 65  t *pCtx;..  asse
315e0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
315f0 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20  =P4_FUNCDEF );. 
31600 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20   n = pOp->p5;.  
31610 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
31620 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
31630 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
31640 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65  ursor) );.  asse
31650 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70  rt( n==0 || (pOp
31660 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
31670 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  2+n<=(p->nMem+1 
31680 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29  - p->nCursor)+1)
31690 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
316a0 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c  p->p3<pOp->p2 ||
316b0 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70   pOp->p3>=pOp->p
316c0 32 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20 3d 20  2+n );.  pCtx = 
316d0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
316e0 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28  awNN(db, sizeof(
316f0 2a 70 43 74 78 29 20 2b 20 28 6e 2d 31 29 2a 73  *pCtx) + (n-1)*s
31700 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f 76 61  izeof(sqlite3_va
31710 6c 75 65 2a 29 29 3b 0a 20 20 69 66 28 20 70 43  lue*));.  if( pC
31720 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  tx==0 ) goto no_
31730 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70 4d 65  mem;.  pCtx->pMe
31740 6d 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70  m = 0;.  pCtx->p
31750 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Func = pOp->p4.p
31760 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f  Func;.  pCtx->iO
31770 70 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  p = (int)(pOp - 
31780 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56  aOp);.  pCtx->pV
31790 64 62 65 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d  dbe = p;.  pCtx-
317a0 3e 61 72 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70  >argc = n;.  pOp
317b0 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 46 55  ->p4type = P4_FU
317c0 4e 43 43 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34  NCCTX;.  pOp->p4
317d0 2e 70 43 74 78 20 3d 20 70 43 74 78 3b 0a 20 20  .pCtx = pCtx;.  
317e0 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50  pOp->opcode = OP
317f0 5f 41 67 67 53 74 65 70 3b 0a 20 20 2f 2a 20 46  _AggStep;.  /* F
31800 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f  all through into
31810 20 4f 50 5f 41 67 67 53 74 65 70 20 2a 2f 0a 7d   OP_AggStep */.}
31820 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70  .case OP_AggStep
31830 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73  : {.  int i;.  s
31840 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
31850 70 43 74 78 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65  pCtx;.  Mem *pMe
31860 6d 3b 0a 20 20 4d 65 6d 20 74 3b 0a 0a 20 20 61  m;.  Mem t;..  a
31870 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
31880 70 65 3d 3d 50 34 5f 46 55 4e 43 43 54 58 20 29  pe==P4_FUNCCTX )
31890 3b 0a 20 20 70 43 74 78 20 3d 20 70 4f 70 2d 3e  ;.  pCtx = pOp->
318a0 70 34 2e 70 43 74 78 3b 0a 20 20 70 4d 65 6d 20  p4.pCtx;.  pMem 
318b0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
318c0 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20  ;..  /* If this 
318d0 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73 69  function is insi
318e0 64 65 20 6f 66 20 61 20 74 72 69 67 67 65 72 2c  de of a trigger,
318f0 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72   the register ar
31900 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20 20  ray in aMem[].  
31910 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  ** might change 
31920 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61 74  from one evaluat
31930 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ion to the next.
31940 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b    The next block
31950 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63 68   of code.  ** ch
31960 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74  ecks to see if t
31970 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72 61  he register arra
31980 79 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 61  y has changed, a
31990 6e 64 20 69 66 20 73 6f 20 69 74 0a 20 20 2a 2a  nd if so it.  **
319a0 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 73 20 74   reinitializes t
319b0 68 65 20 72 65 6c 61 76 61 6e 74 20 70 61 72 74  he relavant part
319c0 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  s of the sqlite3
319d0 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20  _context object 
319e0 2a 2f 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 70  */.  if( pCtx->p
319f0 4d 65 6d 20 21 3d 20 70 4d 65 6d 20 29 7b 0a 20  Mem != pMem ){. 
31a00 20 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20     pCtx->pMem = 
31a10 70 4d 65 6d 3b 0a 20 20 20 20 66 6f 72 28 69 3d  pMem;.    for(i=
31a20 70 43 74 78 2d 3e 61 72 67 63 2d 31 3b 20 69 3e  pCtx->argc-1; i>
31a30 3d 30 3b 20 69 2d 2d 29 20 70 43 74 78 2d 3e 61  =0; i--) pCtx->a
31a40 72 67 76 5b 69 5d 20 3d 20 26 61 4d 65 6d 5b 70  rgv[i] = &aMem[p
31a50 4f 70 2d 3e 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a  Op->p2+i];.  }..
31a60 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
31a70 42 55 47 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  BUG.  for(i=0; i
31a80 3c 70 43 74 78 2d 3e 61 72 67 63 3b 20 69 2b 2b  <pCtx->argc; i++
31a90 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ){.    assert( m
31aa0 65 6d 49 73 56 61 6c 69 64 28 70 43 74 78 2d 3e  emIsValid(pCtx->
31ab0 61 72 67 76 5b 69 5d 29 20 29 3b 0a 20 20 20 20  argv[i]) );.    
31ac0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
31ad0 4f 70 2d 3e 70 32 2b 69 2c 20 70 43 74 78 2d 3e  Op->p2+i, pCtx->
31ae0 61 72 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65  argv[i]);.  }.#e
31af0 6e 64 69 66 0a 0a 20 20 70 4d 65 6d 2d 3e 6e 2b  ndif..  pMem->n+
31b00 2b 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  +;.  sqlite3Vdbe
31b10 4d 65 6d 49 6e 69 74 28 26 74 2c 20 64 62 2c 20  MemInit(&t, db, 
31b20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74  MEM_Null);.  pCt
31b30 78 2d 3e 70 4f 75 74 20 3d 20 26 74 3b 0a 20 20  x->pOut = &t;.  
31b40 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75  pCtx->fErrorOrAu
31b50 78 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 73  x = 0;.  pCtx->s
31b60 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20 28  kipFlag = 0;.  (
31b70 70 43 74 78 2d 3e 70 46 75 6e 63 2d 3e 78 53 46  pCtx->pFunc->xSF
31b80 75 6e 63 29 28 70 43 74 78 2c 70 43 74 78 2d 3e  unc)(pCtx,pCtx->
31b90 61 72 67 63 2c 70 43 74 78 2d 3e 61 72 67 76 29  argc,pCtx->argv)
31ba0 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30  ; /* IMP: R-2450
31bb0 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 69 66 28  5-23230 */.  if(
31bc0 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41   pCtx->fErrorOrA
31bd0 75 78 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43  ux ){.    if( pC
31be0 74 78 2d 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20  tx->isError ){. 
31bf0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
31c00 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73  Error(p, "%s", s
31c10 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
31c20 74 28 26 74 29 29 3b 0a 20 20 20 20 20 20 72 63  t(&t));.      rc
31c30 20 3d 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72   = pCtx->isError
31c40 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
31c50 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
31c60 65 28 26 74 29 3b 0a 20 20 20 20 69 66 28 20 72  e(&t);.    if( r
31c70 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
31c80 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
31c90 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
31ca0 28 20 74 2e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e  ( t.flags==MEM_N
31cb0 75 6c 6c 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28  ull );.  }.  if(
31cc0 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20   pCtx->skipFlag 
31cd0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
31ce0 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  Op[-1].opcode==O
31cf0 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20  P_CollSeq );.   
31d00 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b   i = pOp[-1].p1;
31d10 0a 20 20 20 20 69 66 28 20 69 20 29 20 73 71 6c  .    if( i ) sql
31d20 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
31d30 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31 29  t64(&aMem[i], 1)
31d40 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
31d50 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  ../* Opcode: Agg
31d60 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34  Final P1 P2 * P4
31d70 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
31d80 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50 32  accum=r[P1] N=P2
31d90 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
31da0 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e  he finalizer fun
31db0 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
31dc0 72 65 67 61 74 65 2e 20 20 50 31 20 69 73 0a 2a  regate.  P1 is.*
31dd0 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63  * the memory loc
31de0 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68  ation that is th
31df0 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f  e accumulator fo
31e00 72 20 74 68 65 20 61 67 67 72 65 67 61 74 65 2e  r the aggregate.
31e10 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65  .**.** P2 is the
31e20 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
31e30 65 6e 74 73 20 74 68 61 74 20 74 68 65 20 73 74  ents that the st
31e40 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65  ep function take
31e50 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61  s and.** P4 is a
31e60 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
31e70 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73  FuncDef for this
31e80 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20   function.  The 
31e90 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69  P2.** argument i
31ea0 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68  s not used by th
31eb0 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69  is opcode.  It i
31ec0 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20  s only there to 
31ed0 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20  disambiguate.** 
31ee0 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63  functions that c
31ef0 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20  an take varying 
31f00 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d  numbers of argum
31f10 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34  ents.  The.** P4
31f20 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c   argument is onl
31f30 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65  y needed for the
31f40 20 64 65 67 65 6e 65 72 61 74 65 20 63 61 73 65   degenerate case
31f50 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74   where.** the st
31f60 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20  ep function was 
31f70 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63  not previously c
31f80 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  alled..*/.case O
31f90 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20  P_AggFinal: {.  
31fa0 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73  Mem *pMem;.  ass
31fb0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
31fc0 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e  & pOp->p1<=(p->n
31fd0 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
31fe0 6f 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20  or) );.  pMem = 
31ff0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
32000 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
32010 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e  >flags & ~(MEM_N
32020 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30  ull|MEM_Agg))==0
32030 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
32040 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a  e3VdbeMemFinaliz
32050 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e  e(pMem, pOp->p4.
32060 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63  pFunc);.  if( rc
32070 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
32080 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22  dbeError(p, "%s"
32090 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
320a0 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 20  text(pMem));.   
320b0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
320c0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  to_error;.  }.  
320d0 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
320e0 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20  eEncoding(pMem, 
320f0 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44  encoding);.  UPD
32100 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
32110 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71  (pMem);.  if( sq
32120 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
32130 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20  ig(pMem) ){.    
32140 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
32150 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
32160 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
32170 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T_WAL./* Opcode:
32180 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20 50   Checkpoint P1 P
32190 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  2 P3 * *.**.** C
321a0 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61  heckpoint databa
321b0 73 65 20 50 31 2e 20 54 68 69 73 20 69 73 20 61  se P1. This is a
321c0 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69 73 20   no-op if P1 is 
321d0 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  not currently in
321e0 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61  .** WAL mode. Pa
321f0 72 61 6d 65 74 65 72 20 50 32 20 69 73 20 6f 6e  rameter P2 is on
32200 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45 43  e of SQLITE_CHEC
32210 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 20  KPOINT_PASSIVE, 
32220 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41 52 54  FULL,.** RESTART
32230 2c 20 6f 72 20 54 52 55 4e 43 41 54 45 2e 20 20  , or TRUNCATE.  
32240 57 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74  Write 1 or 0 int
32250 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65  o mem[P3] if the
32260 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75   checkpoint retu
32270 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55  rns.** SQLITE_BU
32280 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65  SY or not, respe
32290 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20  ctively.  Write 
322a0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
322b0 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41  ges in the.** WA
322c0 4c 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63  L after the chec
322d0 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b  kpoint into mem[
322e0 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75  P3+1] and the nu
322f0 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a  mber of pages.**
32300 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74   in the WAL that
32310 20 68 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b   have been check
32320 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74 68  pointed after th
32330 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20  e checkpoint.** 
32340 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d  completes into m
32350 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76  em[P3+2].  Howev
32360 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20  er on an error, 
32370 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a  mem[P3+1] and.**
32380 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69   mem[P3+2] are i
32390 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31  nitialized to -1
323a0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65  ..*/.case OP_Che
323b0 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74  ckpoint: {.  int
323c0 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
323d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
323e0 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
323f0 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20    int aRes[3];  
32400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32410 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a    /* Results */.
32420 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
32430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32440 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c    /* Write resul
32450 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73  ts here */..  as
32460 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
32470 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b 30  y==0 );.  aRes[0
32480 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d  ] = 0;.  aRes[1]
32490 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b   = aRes[2] = -1;
324a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
324b0 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b  p2==SQLITE_CHECK
324c0 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20  POINT_PASSIVE.  
324d0 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d       || pOp->p2=
324e0 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
324f0 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c  NT_FULL.       |
32500 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  | pOp->p2==SQLIT
32510 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53  E_CHECKPOINT_RES
32520 54 41 52 54 0a 20 20 20 20 20 20 20 7c 7c 20 70  TART.       || p
32530 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
32540 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41  HECKPOINT_TRUNCA
32550 54 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73  TE.  );.  rc = s
32560 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74  qlite3Checkpoint
32570 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
32580 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c  p->p2, &aRes[1],
32590 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66   &aRes[2]);.  if
325a0 28 20 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20  ( rc ){.    if( 
325b0 72 63 21 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc!=SQLITE_BUSY 
325c0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
325d0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 72  _to_error;.    r
325e0 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
325f0 20 20 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b 0a     aRes[0] = 1;.
32600 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70    }.  for(i=0, p
32610 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
32620 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20  >p3]; i<3; i++, 
32630 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71 6c  pMem++){.    sql
32640 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
32650 74 36 34 28 70 4d 65 6d 2c 20 28 69 36 34 29 61  t64(pMem, (i64)a
32660 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20 20  Res[i]);.  }    
32670 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23  .  break;.};  .#
32680 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
32690 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d  QLITE_OMIT_PRAGM
326a0 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75  A./* Opcode: Jou
326b0 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32 20 50  rnalMode P1 P2 P
326c0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e  3 * *.**.** Chan
326d0 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d  ge the journal m
326e0 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ode of database 
326f0 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d 75 73  P1 to P3. P3 mus
32700 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a  t be one of the.
32710 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  ** PAGER_JOURNAL
32720 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65 73 2e  MODE_XXX values.
32730 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62 65 74   If changing bet
32740 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f 75 73  ween the various
32750 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64   rollback.** mod
32760 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72 75 6e  es (delete, trun
32770 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c 20 6f  cate, persist, o
32780 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20  ff and memory), 
32790 74 68 69 73 20 69 73 20 61 20 73 69 6d 70 6c 65  this is a simple
327a0 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e  .** operation. N
327b0 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72 65 64  o IO is required
327c0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67  ..**.** If chang
327d0 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20  ing into or out 
327e0 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68 65 20  of WAL mode the 
327f0 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d 6f 72  procedure is mor
32800 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a  e complicated..*
32810 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73 74 72  *.** Write a str
32820 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
32830 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c  he final journal
32840 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73 74 65  -mode to registe
32850 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
32860 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20  _JournalMode: { 
32870 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
32880 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20  Btree *pBt;     
32890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328a0 2f 2a 20 42 74 72 65 65 20 74 6f 20 63 68 61 6e  /* Btree to chan
328b0 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  ge journal mode 
328c0 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70  of */.  Pager *p
328d0 50 61 67 65 72 3b 20 20 20 20 20 20 20 20 20 20  Pager;          
328e0 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 72          /* Pager
328f0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
32900 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e   pBt */.  int eN
32910 65 77 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ew;             
32920 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 77            /* New
32930 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f   journal mode */
32940 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20  .  int eOld;    
32950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32960 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f     /* The old jo
32970 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69  urnal mode */.#i
32980 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
32990 54 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68  T_WAL.  const ch
329a0 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20  ar *zFilename;  
329b0 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
329c0 6f 66 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  of database file
329d0 20 66 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 23   for pPager */.#
329e0 65 6e 64 69 66 0a 0a 20 20 70 4f 75 74 20 3d 20  endif..  pOut = 
329f0 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
32a00 2c 20 70 4f 70 29 3b 0a 20 20 65 4e 65 77 20 3d  , pOp);.  eNew =
32a10 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
32a20 72 74 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f  rt( eNew==PAGER_
32a30 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45  JOURNALMODE_DELE
32a40 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  TE .       || eN
32a50 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
32a60 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 20 0a  LMODE_TRUNCATE .
32a70 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
32a80 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
32a90 45 5f 50 45 52 53 49 53 54 20 0a 20 20 20 20 20  E_PERSIST .     
32aa0 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
32ab0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46  _JOURNALMODE_OFF
32ac0 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
32ad0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
32ae0 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20  DE_MEMORY.      
32af0 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
32b00 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a  JOURNALMODE_WAL.
32b10 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
32b20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
32b30 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20 20 61  E_QUERY.  );.  a
32b40 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
32b50 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
32b60 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
32b70 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
32b80 20 29 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d   );..  pBt = db-
32b90 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
32ba0 74 3b 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71  t;.  pPager = sq
32bb0 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
32bc0 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73  pBt);.  eOld = s
32bd0 71 6c 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f  qlite3PagerGetJo
32be0 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
32bf0 29 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50  );.  if( eNew==P
32c00 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
32c10 5f 51 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20  _QUERY ) eNew = 
32c20 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c  eOld;.  if( !sql
32c30 69 74 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61  ite3PagerOkToCha
32c40 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  ngeJournalMode(p
32c50 50 61 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20  Pager) ) eNew = 
32c60 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53  eOld;..#ifndef S
32c70 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
32c80 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c   zFilename = sql
32c90 69 74 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d  ite3PagerFilenam
32ca0 65 28 70 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20  e(pPager, 1);.. 
32cb0 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77   /* Do not allow
32cc0 20 61 20 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f   a transition to
32cd0 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41   journal_mode=WA
32ce0 4c 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65  L for a database
32cf0 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61  .  ** in tempora
32d00 72 79 20 73 74 6f 72 61 67 65 20 6f 72 20 69 66  ry storage or if
32d10 20 74 68 65 20 56 46 53 20 64 6f 65 73 20 6e 6f   the VFS does no
32d20 74 20 73 75 70 70 6f 72 74 20 73 68 61 72 65 64  t support shared
32d30 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20   memory .  */.  
32d40 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f  if( eNew==PAGER_
32d50 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a  JOURNALMODE_WAL.
32d60 20 20 20 26 26 20 28 73 71 6c 69 74 65 33 53 74     && (sqlite3St
32d70 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65  rlen30(zFilename
32d80 29 3d 3d 30 20 20 20 20 20 20 20 20 20 20 20 2f  )==0           /
32d90 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20  * Temp file */. 
32da0 20 20 20 20 20 20 7c 7c 20 21 73 71 6c 69 74 65        || !sqlite
32db0 33 50 61 67 65 72 57 61 6c 53 75 70 70 6f 72 74  3PagerWalSupport
32dc0 65 64 28 70 50 61 67 65 72 29 29 20 20 20 2f 2a  ed(pPager))   /*
32dd0 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72   No shared-memor
32de0 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29  y support */.  )
32df0 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c  {.    eNew = eOl
32e00 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28 65  d;.  }..  if( (e
32e10 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26  New!=eOld).   &&
32e20 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f   (eOld==PAGER_JO
32e30 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c  URNALMODE_WAL ||
32e40 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
32e50 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20  RNALMODE_WAL).  
32e60 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62 2d 3e  ){.    if( !db->
32e70 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62  autoCommit || db
32e80 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 20 29 7b  ->nVdbeRead>1 ){
32e90 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
32ea0 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20  TE_ERROR;.      
32eb0 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
32ec0 28 70 2c 0a 20 20 20 20 20 20 20 20 20 20 22 63  (p,.          "c
32ed0 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25 73 20  annot change %s 
32ee0 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69  wal mode from wi
32ef0 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  thin a transacti
32f00 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 28  on",.          (
32f10 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
32f20 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69  NALMODE_WAL ? "i
32f30 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22 29  nto" : "out of")
32f40 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20  .      );.      
32f50 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
32f60 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c  o_error;.    }el
32f70 73 65 7b 0a 20 0a 20 20 20 20 20 20 69 66 28 20  se{. .      if( 
32f80 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eOld==PAGER_JOUR
32f90 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20  NALMODE_WAL ){. 
32fa0 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6c 65 61         /* If lea
32fb0 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63  ving WAL mode, c
32fc0 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20 66 69 6c  lose the log fil
32fd0 65 2e 20 49 66 20 73 75 63 63 65 73 73 66 75 6c  e. If successful
32fe0 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20 20 20 20  , the call.     
32ff0 20 20 20 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c     ** to PagerCl
33000 6f 73 65 57 61 6c 28 29 20 63 68 65 63 6b 70 6f  oseWal() checkpo
33010 69 6e 74 73 20 61 6e 64 20 64 65 6c 65 74 65 73  ints and deletes
33020 20 74 68 65 20 77 72 69 74 65 2d 61 68 65 61 64   the write-ahead
33030 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20 20 2a 2a  -log .        **
33040 20 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53   file. An EXCLUS
33050 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69  IVE lock may sti
33060 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20 74 68  ll be held on th
33070 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
33080 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 66 74 65  .        ** afte
33090 72 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 72  r a successful r
330a0 65 74 75 72 6e 2e 20 0a 20 20 20 20 20 20 20 20  eturn. .        
330b0 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  */.        rc = 
330c0 73 71 6c 69 74 65 33 50 61 67 65 72 43 6c 6f 73  sqlite3PagerClos
330d0 65 57 61 6c 28 70 50 61 67 65 72 29 3b 0a 20 20  eWal(pPager);.  
330e0 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
330f0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
33100 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65       sqlite3Page
33110 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  rSetJournalMode(
33120 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20  pPager, eNew);. 
33130 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
33140 65 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50  else if( eOld==P
33150 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
33160 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20  _MEMORY ){.     
33170 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61     /* Cannot tra
33180 6e 73 69 74 69 6f 6e 20 64 69 72 65 63 74 6c 79  nsition directly
33190 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20   from MEMORY to 
331a0 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f  WAL.  Use mode O
331b0 46 46 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 73  FF.        ** as
331c0 20 61 6e 20 69 6e 74 65 72 6d 65 64 69 61 74 65   an intermediate
331d0 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69   */.        sqli
331e0 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e  te3PagerSetJourn
331f0 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 50  alMode(pPager, P
33200 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
33210 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20  _OFF);.      }. 
33220 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20   .      /* Open 
33230 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  a transaction on
33240 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
33250 6c 65 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f  le. Regardless o
33260 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20  f the journal.  
33270 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69      ** mode, thi
33280 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c  s transaction al
33290 77 61 79 73 20 75 73 65 73 20 61 20 72 6f 6c 6c  ways uses a roll
332a0 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20  back journal..  
332b0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73      */.      ass
332c0 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
332d0 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 3d  eIsInTrans(pBt)=
332e0 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  =0 );.      if( 
332f0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
33300 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
33310 6c 69 74 65 33 42 74 72 65 65 53 65 74 56 65 72  lite3BtreeSetVer
33320 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d  sion(pBt, (eNew=
33330 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
33340 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29 29  DE_WAL ? 2 : 1))
33350 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
33360 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66    }.#endif /* if
33370 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
33380 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72  _WAL */..  if( r
33390 63 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b  c ) eNew = eOld;
333a0 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74 65  .  eNew = sqlite
333b0 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c  3PagerSetJournal
333c0 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65  Mode(pPager, eNe
333d0 77 29 3b 0a 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  w);..  pOut->fla
333e0 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d  gs = MEM_Str|MEM
333f0 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d  _Static|MEM_Term
33400 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63  ;.  pOut->z = (c
33410 68 61 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75  har *)sqlite3Jou
33420 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65  rnalModename(eNe
33430 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20  w);.  pOut->n = 
33440 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
33450 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74  pOut->z);.  pOut
33460 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55  ->enc = SQLITE_U
33470 54 46 38 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  TF8;.  sqlite3Vd
33480 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
33490 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29  (pOut, encoding)
334a0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
334b0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
334c0 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
334d0 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
334e0 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a  TE_OMIT_PRAGMA *
334f0 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  /..#if !defined(
33500 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55  SQLITE_OMIT_VACU
33510 55 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  UM) && !defined(
33520 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41  SQLITE_OMIT_ATTA
33530 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  CH)./* Opcode: V
33540 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a  acuum * * * * *.
33550 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65  **.** Vacuum the
33560 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
33570 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  .  This opcode w
33580 69 6c 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20  ill cause other 
33590 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69  virtual.** machi
335a0 6e 65 73 20 74 6f 20 62 65 20 63 72 65 61 74 65  nes to be create
335b0 64 20 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d  d and run.  It m
335c0 61 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64  ay not be called
335d0 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20   from within.** 
335e0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a  a transaction..*
335f0 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d  /.case OP_Vacuum
33600 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 2d  : {.  assert( p-
33610 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
33620 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75    rc = sqlite3Ru
33630 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72  nVacuum(&p->zErr
33640 4d 73 67 2c 20 64 62 29 3b 0a 20 20 69 66 28 20  Msg, db);.  if( 
33650 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
33660 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
33670 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
33680 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
33690 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
336a0 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  CUUM)./* Opcode:
336b0 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50   IncrVacuum P1 P
336c0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65  2 * * *.**.** Pe
336d0 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73  rform a single s
336e0 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65  tep of the incre
336f0 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72  mental vacuum pr
33700 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68  ocedure on.** th
33710 65 20 50 31 20 64 61 74 61 62 61 73 65 2e 20 49  e P1 database. I
33720 66 20 74 68 65 20 76 61 63 75 75 6d 20 68 61 73  f the vacuum has
33730 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20   finished, jump 
33740 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  to instruction.*
33750 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  * P2. Otherwise,
33760 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
33770 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
33780 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
33790 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20  P_IncrVacuum: { 
337a0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
337b0 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  /.  Btree *pBt;.
337c0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
337d0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
337e0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
337f0 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
33800 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
33810 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73  Op->p1) );.  ass
33820 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
33830 3d 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64  ==0 );.  pBt = d
33840 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
33850 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  pBt;.  rc = sqli
33860 74 65 33 42 74 72 65 65 49 6e 63 72 56 61 63 75  te3BtreeIncrVacu
33870 75 6d 28 70 42 74 29 3b 0a 20 20 56 64 62 65 42  um(pBt);.  VdbeB
33880 72 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53  ranchTaken(rc==S
33890 51 4c 49 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20  QLITE_DONE,2);. 
338a0 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 69   if( rc ){.    i
338b0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f  f( rc!=SQLITE_DO
338c0 4e 45 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  NE ) goto abort_
338d0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
338e0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
338f0 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  ;.    goto jump_
33900 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
33910 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
33920 20 4f 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20   Opcode: Expire 
33930 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
33940 20 43 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c   Cause precompil
33950 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  ed statements to
33960 20 65 78 70 69 72 65 2e 20 20 57 68 65 6e 20 61   expire.  When a
33970 6e 20 65 78 70 69 72 65 64 20 73 74 61 74 65 6d  n expired statem
33980 65 6e 74 0a 2a 2a 20 69 73 20 65 78 65 63 75 74  ent.** is execut
33990 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  ed using sqlite3
339a0 5f 73 74 65 70 28 29 20 69 74 20 77 69 6c 6c 20  _step() it will 
339b0 65 69 74 68 65 72 20 61 75 74 6f 6d 61 74 69 63  either automatic
339c0 61 6c 6c 79 0a 2a 2a 20 72 65 70 72 65 70 61 72  ally.** reprepar
339d0 65 20 69 74 73 65 6c 66 20 28 69 66 20 69 74 20  e itself (if it 
339e0 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 63  was originally c
339f0 72 65 61 74 65 64 20 75 73 69 6e 67 20 73 71 6c  reated using sql
33a00 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
33a10 29 29 0a 2a 2a 20 6f 72 20 69 74 20 77 69 6c 6c  )).** or it will
33a20 20 66 61 69 6c 20 77 69 74 68 20 53 51 4c 49 54   fail with SQLIT
33a30 45 5f 53 43 48 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a  E_SCHEMA..** .**
33a40 20 49 66 20 50 31 20 69 73 20 30 2c 20 74 68 65   If P1 is 0, the
33a50 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d  n all SQL statem
33a60 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69  ents become expi
33a70 72 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f  red. If P1 is no
33a80 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20  n-zero,.** then 
33a90 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74  only the current
33aa0 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73 74 61  ly executing sta
33ab0 74 65 6d 65 6e 74 20 69 73 20 65 78 70 69 72 65  tement is expire
33ac0 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78  d..*/.case OP_Ex
33ad0 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20 21 70  pire: {.  if( !p
33ae0 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71  Op->p1 ){.    sq
33af0 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
33b00 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
33b10 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
33b20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a  p->expired = 1;.
33b30 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
33b40 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
33b50 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
33b60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c  ./* Opcode: Tabl
33b70 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33 20 50  eLock P1 P2 P3 P
33b80 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
33b90 20 69 44 62 3d 50 31 20 72 6f 6f 74 3d 50 32 20   iDb=P1 root=P2 
33ba0 77 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f  write=P3.**.** O
33bb0 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20  btain a lock on 
33bc0 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62  a particular tab
33bd0 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63  le. This instruc
33be0 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65  tion is only use
33bf0 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68  d when.** the sh
33c00 61 72 65 64 2d 63 61 63 68 65 20 66 65 61 74 75  ared-cache featu
33c10 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a  re is enabled. .
33c20 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
33c30 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
33c40 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33  abase in sqlite3
33c50 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61  .aDb[] of the da
33c60 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69  tabase.** on whi
33c70 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61  ch the lock is a
33c80 63 71 75 69 72 65 64 2e 20 20 41 20 72 65 61 64  cquired.  A read
33c90 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64  lock is obtained
33ca0 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20   if P3==0 or.** 
33cb0 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20  a write lock if 
33cc0 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  P3==1..**.** P2 
33cd0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f  contains the roo
33ce0 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74 61  t-page of the ta
33cf0 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a  ble to lock..**.
33d00 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61  ** P4 contains a
33d10 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
33d20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
33d30 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20  e being locked. 
33d40 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20  This is only.** 
33d50 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  used to generate
33d60 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
33d70 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61  e if the lock ca
33d80 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64  nnot be obtained
33d90 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62  ..*/.case OP_Tab
33da0 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69  leLock: {.  u8 i
33db0 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38  sWriteLock = (u8
33dc0 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20  )pOp->p3;.  if( 
33dd0 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30  isWriteLock || 0
33de0 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  ==(db->flags&SQL
33df0 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74  ITE_ReadUncommit
33e00 74 65 64 29 20 29 7b 0a 20 20 20 20 69 6e 74 20  ted) ){.    int 
33e10 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20  p1 = pOp->p1; . 
33e20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30     assert( p1>=0
33e30 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29   && p1<db->nDb )
33e40 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 44 62  ;.    assert( Db
33e50 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
33e60 65 4d 61 73 6b 2c 20 70 31 29 20 29 3b 0a 20 20  eMask, p1) );.  
33e70 20 20 61 73 73 65 72 74 28 20 69 73 57 72 69 74    assert( isWrit
33e80 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72  eLock==0 || isWr
33e90 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20  iteLock==1 );.  
33ea0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
33eb0 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d  reeLockTable(db-
33ec0 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f  >aDb[p1].pBt, pO
33ed0 70 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f  p->p2, isWriteLo
33ee0 63 6b 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  ck);.    if( rc 
33ef0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 72 63  ){.      if( (rc
33f00 26 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c  &0xFF)==SQLITE_L
33f10 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 20  OCKED ){.       
33f20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d   const char *z =
33f30 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20   pOp->p4.z;.    
33f40 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
33f50 72 72 6f 72 28 70 2c 20 22 64 61 74 61 62 61 73  rror(p, "databas
33f60 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65  e table is locke
33f70 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20  d: %s", z);.    
33f80 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 61    }.      goto a
33f90 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
33fa0 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  r;.    }.  }.  b
33fb0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
33fc0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  * SQLITE_OMIT_SH
33fd0 41 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23  ARED_CACHE */..#
33fe0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
33ff0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
34000 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69  /* Opcode: VBegi
34010 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a  n * * * P4 *.**.
34020 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 70  ** P4 may be a p
34030 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c  ointer to an sql
34040 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
34050 75 72 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c  ure. If so, call
34060 20 74 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20   the .** xBegin 
34070 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20  method for that 
34080 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73  table..**.** Als
34090 6f 2c 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  o, whether or no
340a0 74 20 50 34 20 69 73 20 73 65 74 2c 20 63 68 65  t P4 is set, che
340b0 63 6b 20 74 68 61 74 20 74 68 69 73 20 69 73 20  ck that this is 
340c0 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64  not being called
340d0 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20   from.** within 
340e0 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20  a callback to a 
340f0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53  virtual table xS
34100 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66  ync() method. If
34110 20 69 74 20 69 73 2c 20 74 68 65 20 65 72 72 6f   it is, the erro
34120 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62  r.** code will b
34130 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f  e set to SQLITE_
34140 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20  LOCKED..*/.case 
34150 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56  OP_VBegin: {.  V
34160 54 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20  Table *pVTab;.  
34170 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVTab = pOp->p4.
34180 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71  pVtab;.  rc = sq
34190 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 64  lite3VtabBegin(d
341a0 62 2c 20 70 56 54 61 62 29 3b 0a 20 20 69 66 28  b, pVTab);.  if(
341b0 20 70 56 54 61 62 20 29 20 73 71 6c 69 74 65 33   pVTab ) sqlite3
341c0 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
341d0 28 70 2c 20 70 56 54 61 62 2d 3e 70 56 74 61 62  (p, pVTab->pVtab
341e0 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
341f0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
34200 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
34210 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
34220 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
34230 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
34240 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
34250 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
34260 6f 64 65 3a 20 56 43 72 65 61 74 65 20 50 31 20  ode: VCreate P1 
34270 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50  P2 * * *.**.** P
34280 32 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  2 is a register 
34290 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e  that holds the n
342a0 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ame of a virtual
342b0 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61   table in databa
342c0 73 65 20 0a 2a 2a 20 50 31 2e 20 43 61 6c 6c 20  se .** P1. Call 
342d0 74 68 65 20 78 43 72 65 61 74 65 20 6d 65 74 68  the xCreate meth
342e0 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c  od for that tabl
342f0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43  e..*/.case OP_VC
34300 72 65 61 74 65 3a 20 7b 0a 20 20 4d 65 6d 20 73  reate: {.  Mem s
34310 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Mem;          /*
34320 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65   For storing the
34330 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65   record being de
34340 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74  coded */.  const
34350 20 63 68 61 72 20 2a 7a 54 61 62 3b 20 20 2f 2a   char *zTab;  /*
34360 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 76 69 72   Name of the vir
34370 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 20  tual table */.. 
34380 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30   memset(&sMem, 0
34390 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b  , sizeof(sMem));
343a0 0a 20 20 73 4d 65 6d 2e 64 62 20 3d 20 64 62 3b  .  sMem.db = db;
343b0 0a 20 20 2f 2a 20 42 65 63 61 75 73 65 20 50 32  .  /* Because P2
343c0 20 69 73 20 61 6c 77 61 79 73 20 61 20 73 74 61   is always a sta
343d0 74 69 63 20 73 74 72 69 6e 67 2c 20 69 74 20 69  tic string, it i
343e0 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72  s impossible for
343f0 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65   the.  ** sqlite
34400 33 56 64 62 65 4d 65 6d 43 6f 70 79 28 29 20 74  3VdbeMemCopy() t
34410 6f 20 66 61 69 6c 20 2a 2f 0a 20 20 61 73 73 65  o fail */.  asse
34420 72 74 28 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70  rt( (aMem[pOp->p
34430 32 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  2].flags & MEM_S
34440 74 72 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  tr)!=0 );.  asse
34450 72 74 28 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70  rt( (aMem[pOp->p
34460 32 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  2].flags & MEM_S
34470 74 61 74 69 63 29 21 3d 30 20 29 3b 0a 20 20 72  tatic)!=0 );.  r
34480 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
34490 65 6d 43 6f 70 79 28 26 73 4d 65 6d 2c 20 26 61  emCopy(&sMem, &a
344a0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20  Mem[pOp->p2]);. 
344b0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
344c0 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 7a 54 61 62  ITE_OK );.  zTab
344d0 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29   = (const char*)
344e0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
344f0 78 74 28 26 73 4d 65 6d 29 3b 0a 20 20 61 73 73  xt(&sMem);.  ass
34500 65 72 74 28 20 7a 54 61 62 20 7c 7c 20 64 62 2d  ert( zTab || db-
34510 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
34520 0a 20 20 69 66 28 20 7a 54 61 62 20 29 7b 0a 20  .  if( zTab ){. 
34530 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
34540 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62  tabCallCreate(db
34550 2c 20 70 4f 70 2d 3e 70 31 2c 20 7a 54 61 62 2c  , pOp->p1, zTab,
34560 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20   &p->zErrMsg);. 
34570 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   }.  sqlite3Vdbe
34580 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d  MemRelease(&sMem
34590 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
345a0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
345b0 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
345c0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
345d0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
345e0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
345f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
34600 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
34610 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20 50 31  ode: VDestroy P1
34620 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
34630 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  P4 is the name o
34640 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  f a virtual tabl
34650 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  e in database P1
34660 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44 65 73  .  Call the xDes
34670 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f  troy method.** o
34680 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f  f that table..*/
34690 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74 72 6f  .case OP_VDestro
346a0 79 3a 20 7b 0a 20 20 64 62 2d 3e 6e 56 44 65 73  y: {.  db->nVDes
346b0 74 72 6f 79 2b 2b 3b 0a 20 20 72 63 20 3d 20 73  troy++;.  rc = s
346c0 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65  qlite3VtabCallDe
346d0 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70  stroy(db, pOp->p
346e0 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
346f0 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2d 2d   db->nVDestroy--
34700 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
34710 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
34720 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
34730 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
34740 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
34750 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
34760 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
34770 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
34780 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a  de: VOpen P1 * *
34790 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
347a0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
347b0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f   virtual table o
347c0 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65  bject, an sqlite
347d0 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
347e0 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72  ..** P1 is a cur
347f0 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68 69  sor number.  Thi
34800 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20 61  s opcode opens a
34810 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 76   cursor to the v
34820 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20  irtual.** table 
34830 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74 20  and stores that 
34840 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f  cursor in P1..*/
34850 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20  .case OP_VOpen: 
34860 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
34870 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f  pCur;.  sqlite3_
34880 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 43  vtab_cursor *pVC
34890 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  ur;.  sqlite3_vt
348a0 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e  ab *pVtab;.  con
348b0 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
348c0 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61  e *pModule;..  a
348d0 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
348e0 64 65 72 20 29 3b 0a 20 20 70 43 75 72 20 3d 20  der );.  pCur = 
348f0 30 3b 0a 20 20 70 56 43 75 72 20 3d 20 30 3b 0a  0;.  pVCur = 0;.
34900 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70    pVtab = pOp->p
34910 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a  4.pVtab->pVtab;.
34920 20 20 69 66 28 20 70 56 74 61 62 3d 3d 30 20 7c    if( pVtab==0 |
34930 7c 20 4e 45 56 45 52 28 70 56 74 61 62 2d 3e 70  | NEVER(pVtab->p
34940 4d 6f 64 75 6c 65 3d 3d 30 29 20 29 7b 0a 20 20  Module==0) ){.  
34950 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f    rc = SQLITE_LO
34960 43 4b 45 44 3b 0a 20 20 20 20 67 6f 74 6f 20 61  CKED;.    goto a
34970 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
34980 72 3b 0a 20 20 7d 0a 20 20 70 4d 6f 64 75 6c 65  r;.  }.  pModule
34990 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
349a0 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  e;.  rc = pModul
349b0 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20  e->xOpen(pVtab, 
349c0 26 70 56 43 75 72 29 3b 0a 20 20 73 71 6c 69 74  &pVCur);.  sqlit
349d0 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
349e0 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
349f0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
34a00 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
34a10 3b 0a 0a 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69  ;..  /* Initiali
34a20 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  ze sqlite3_vtab_
34a30 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73  cursor base clas
34a40 73 20 2a 2f 0a 20 20 70 56 43 75 72 2d 3e 70 56  s */.  pVCur->pV
34a50 74 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20  tab = pVtab;..  
34a60 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 76 64  /* Initialize vd
34a70 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63 74  be cursor object
34a80 20 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c   */.  pCur = all
34a90 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
34aa0 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 43  Op->p1, 0, -1, C
34ab0 55 52 54 59 50 45 5f 56 54 41 42 29 3b 0a 20 20  URTYPE_VTAB);.  
34ac0 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20 20  if( pCur ){.    
34ad0 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 20 3d  pCur->uc.pVCur =
34ae0 20 70 56 43 75 72 3b 0a 20 20 20 20 70 56 74 61   pVCur;.    pVta
34af0 62 2d 3e 6e 52 65 66 2b 2b 3b 0a 20 20 7d 65 6c  b->nRef++;.  }el
34b00 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
34b10 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
34b20 20 29 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 2d   );.    pModule-
34b30 3e 78 43 6c 6f 73 65 28 70 56 43 75 72 29 3b 0a  >xClose(pVCur);.
34b40 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
34b50 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
34b60 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
34b70 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
34b80 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
34b90 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
34ba0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
34bb0 65 3a 20 56 46 69 6c 74 65 72 20 50 31 20 50 32  e: VFilter P1 P2
34bc0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
34bd0 70 73 69 73 3a 20 69 70 6c 61 6e 3d 72 5b 50 33  psis: iplan=r[P3
34be0 5d 20 7a 70 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a  ] zplan='P4'.**.
34bf0 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f  ** P1 is a curso
34c00 72 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 56  r opened using V
34c10 4f 70 65 6e 2e 20 20 50 32 20 69 73 20 61 6e 20  Open.  P2 is an 
34c20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20  address to jump 
34c30 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c  to if.** the fil
34c40 74 65 72 65 64 20 72 65 73 75 6c 74 20 73 65 74  tered result set
34c50 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a   is empty..**.**
34c60 20 50 34 20 69 73 20 65 69 74 68 65 72 20 4e 55   P4 is either NU
34c70 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74  LL or a string t
34c80 68 61 74 20 77 61 73 20 67 65 6e 65 72 61 74 65  hat was generate
34c90 64 20 62 79 20 74 68 65 20 78 42 65 73 74 49 6e  d by the xBestIn
34ca0 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66  dex.** method of
34cb0 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68   the module.  Th
34cc0 65 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  e interpretation
34cd0 20 6f 66 20 74 68 65 20 50 34 20 73 74 72 69 6e   of the P4 strin
34ce0 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20  g is left.** to 
34cf0 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65  the module imple
34d00 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  mentation..**.**
34d10 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76   This opcode inv
34d20 6f 6b 65 73 20 74 68 65 20 78 46 69 6c 74 65 72  okes the xFilter
34d30 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65 20 76   method on the v
34d40 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 70 65  irtual table spe
34d50 63 69 66 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e  cified.** by P1.
34d60 20 20 54 68 65 20 69 6e 74 65 67 65 72 20 71 75    The integer qu
34d70 65 72 79 20 70 6c 61 6e 20 70 61 72 61 6d 65 74  ery plan paramet
34d80 65 72 20 74 6f 20 78 46 69 6c 74 65 72 20 69 73  er to xFilter is
34d90 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
34da0 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73  ter.** P3. Regis
34db0 74 65 72 20 50 33 2b 31 20 73 74 6f 72 65 73 20  ter P3+1 stores 
34dc0 74 68 65 20 61 72 67 63 20 70 61 72 61 6d 65 74  the argc paramet
34dd0 65 72 20 74 6f 20 62 65 20 70 61 73 73 65 64 20  er to be passed 
34de0 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65  to the.** xFilte
34df0 72 20 6d 65 74 68 6f 64 2e 20 52 65 67 69 73 74  r method. Regist
34e00 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61  ers P3+2..P3+1+a
34e10 72 67 63 20 61 72 65 20 74 68 65 20 61 72 67 63  rgc are the argc
34e20 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 70  .** additional p
34e30 61 72 61 6d 65 74 65 72 73 20 77 68 69 63 68 20  arameters which 
34e40 61 72 65 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a  are passed to.**
34e50 20 78 46 69 6c 74 65 72 20 61 73 20 61 72 67 76   xFilter as argv
34e60 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 32 20  . Register P3+2 
34e70 62 65 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20  becomes argv[0] 
34e80 77 68 65 6e 20 70 61 73 73 65 64 20 74 6f 20 78  when passed to x
34e90 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20  Filter..**.** A 
34ea0 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20  jump is made to 
34eb0 50 32 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  P2 if the result
34ec0 20 73 65 74 20 61 66 74 65 72 20 66 69 6c 74 65   set after filte
34ed0 72 69 6e 67 20 77 6f 75 6c 64 20 62 65 20 65 6d  ring would be em
34ee0 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  pty..*/.case OP_
34ef0 56 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20  VFilter: {   /* 
34f00 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  jump */.  int nA
34f10 72 67 3b 0a 20 20 69 6e 74 20 69 51 75 65 72 79  rg;.  int iQuery
34f20 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
34f30 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
34f40 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72 79  e;.  Mem *pQuery
34f50 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a  ;.  Mem *pArgc;.
34f60 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63    sqlite3_vtab_c
34f70 75 72 73 6f 72 20 2a 70 56 43 75 72 3b 0a 20 20  ursor *pVCur;.  
34f80 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
34f90 74 61 62 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  tab;.  VdbeCurso
34fa0 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20 72  r *pCur;.  int r
34fb0 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d  es;.  int i;.  M
34fc0 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70  em **apArg;..  p
34fd0 51 75 65 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f  Query = &aMem[pO
34fe0 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63 20  p->p3];.  pArgc 
34ff0 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20  = &pQuery[1];.  
35000 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
35010 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
35020 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
35030 51 75 65 72 79 29 20 29 3b 0a 20 20 52 45 47 49  Query) );.  REGI
35040 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
35050 70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20 61  p3, pQuery);.  a
35060 73 73 65 72 74 28 20 70 43 75 72 2d 3e 65 43 75  ssert( pCur->eCu
35070 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56  rType==CURTYPE_V
35080 54 41 42 20 29 3b 0a 20 20 70 56 43 75 72 20 3d  TAB );.  pVCur =
35090 20 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 3b   pCur->uc.pVCur;
350a0 0a 20 20 70 56 74 61 62 20 3d 20 70 56 43 75 72  .  pVtab = pVCur
350b0 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
350c0 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
350d0 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20  ule;..  /* Grab 
350e0 74 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72  the index number
350f0 20 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65   and argc parame
35100 74 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74  ters */.  assert
35110 28 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73  ( (pQuery->flags
35120 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20  &MEM_Int)!=0 && 
35130 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45  pArgc->flags==ME
35140 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20  M_Int );.  nArg 
35150 3d 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e  = (int)pArgc->u.
35160 69 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69  i;.  iQuery = (i
35170 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a  nt)pQuery->u.i;.
35180 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
35190 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20   xFilter method 
351a0 2a 2f 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  */.  res = 0;.  
351b0 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67  apArg = p->apArg
351c0 3b 0a 20 20 66 6f 72 28 69 20 3d 20 30 3b 20 69  ;.  for(i = 0; i
351d0 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
351e0 20 61 70 41 72 67 5b 69 5d 20 3d 20 26 70 41 72   apArg[i] = &pAr
351f0 67 63 5b 69 2b 31 5d 3b 0a 20 20 7d 0a 20 20 72  gc[i+1];.  }.  r
35200 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69  c = pModule->xFi
35210 6c 74 65 72 28 70 56 43 75 72 2c 20 69 51 75 65  lter(pVCur, iQue
35220 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e  ry, pOp->p4.z, n
35230 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 73  Arg, apArg);.  s
35240 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
35250 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
35260 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
35270 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
35280 72 72 6f 72 3b 0a 20 20 72 65 73 20 3d 20 70 4d  rror;.  res = pM
35290 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56 43 75  odule->xEof(pVCu
352a0 72 29 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c  r);.  pCur->null
352b0 52 6f 77 20 3d 20 30 3b 0a 20 20 56 64 62 65 42  Row = 0;.  VdbeB
352c0 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
352d0 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20  0,2);.  if( res 
352e0 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
352f0 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  2;.  break;.}.#e
35300 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
35310 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
35320 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
35330 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
35340 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
35350 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50   VColumn P1 P2 P
35360 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
35370 73 3a 20 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e  s: r[P3]=vcolumn
35380 28 50 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65  (P2).**.** Store
35390 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
353a0 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f  e P2-th column o
353b0 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66 20  f.** the row of 
353c0 74 68 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c  the virtual-tabl
353d0 65 20 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 50  e that the .** P
353e0 31 20 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e  1 cursor is poin
353f0 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65 67  ting to into reg
35400 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73  ister P3..*/.cas
35410 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a  e OP_VColumn: {.
35420 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
35430 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
35440 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
35450 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70  Module;.  Mem *p
35460 44 65 73 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Dest;.  sqlite3_
35470 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65 78 74  context sContext
35480 3b 0a 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  ;..  VdbeCursor 
35490 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72  *pCur = p->apCsr
354a0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
354b0 65 72 74 28 20 70 43 75 72 2d 3e 65 43 75 72 54  ert( pCur->eCurT
354c0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41  ype==CURTYPE_VTA
354d0 42 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  B );.  assert( p
354e0 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
354f0 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p3<=(p->nMem+1 
35500 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
35510 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d  .  pDest = &aMem
35520 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d  [pOp->p3];.  mem
35530 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
35540 20 70 44 65 73 74 29 3b 0a 20 20 69 66 28 20 70   pDest);.  if( p
35550 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a  Cur->nullRow ){.
35560 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
35570 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29  emSetNull(pDest)
35580 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
35590 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d  .  pVtab = pCur-
355a0 3e 75 63 2e 70 56 43 75 72 2d 3e 70 56 74 61 62  >uc.pVCur->pVtab
355b0 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ;.  pModule = pV
355c0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
355d0 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
355e0 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65  >xColumn );.  me
355f0 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c 20  mset(&sContext, 
35600 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65  0, sizeof(sConte
35610 78 74 29 29 3b 0a 20 20 73 43 6f 6e 74 65 78 74  xt));.  sContext
35620 2e 70 4f 75 74 20 3d 20 70 44 65 73 74 3b 0a 20  .pOut = pDest;. 
35630 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
35640 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  pDest, MEM_Null)
35650 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ;.  rc = pModule
35660 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e  ->xColumn(pCur->
35670 75 63 2e 70 56 43 75 72 2c 20 26 73 43 6f 6e 74  uc.pVCur, &sCont
35680 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20  ext, pOp->p2);. 
35690 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
356a0 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
356b0 62 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74 65  b);.  if( sConte
356c0 78 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20  xt.isError ){.  
356d0 20 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e    rc = sContext.
356e0 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73  isError;.  }.  s
356f0 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
35700 45 6e 63 6f 64 69 6e 67 28 70 44 65 73 74 2c 20  Encoding(pDest, 
35710 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47  encoding);.  REG
35720 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
35730 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55  >p3, pDest);.  U
35740 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
35750 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66  ZE(pDest);..  if
35760 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
35770 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b  TooBig(pDest) ){
35780 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
35790 67 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20  g;.  }.  if( rc 
357a0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
357b0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
357c0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
357d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
357e0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
357f0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
35800 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
35810 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74 20 50   Opcode: VNext P
35820 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
35830 20 41 64 76 61 6e 63 65 20 76 69 72 74 75 61 6c   Advance virtual
35840 20 74 61 62 6c 65 20 50 31 20 74 6f 20 74 68 65   table P1 to the
35850 20 6e 65 78 74 20 72 6f 77 20 69 6e 20 69 74 73   next row in its
35860 20 72 65 73 75 6c 74 20 73 65 74 20 61 6e 64 0a   result set and.
35870 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  ** jump to instr
35880 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20  uction P2.  Or, 
35890 69 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  if the virtual t
358a0 61 62 6c 65 20 68 61 73 20 72 65 61 63 68 65 64  able has reached
358b0 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 69  .** the end of i
358c0 74 73 20 72 65 73 75 6c 74 20 73 65 74 2c 20 74  ts result set, t
358d0 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
358e0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
358f0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
35900 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20  e OP_VNext: {   
35910 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c  /* jump */.  sql
35920 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
35930 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
35940 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
35950 65 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  e;.  int res;.  
35960 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
35970 3b 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  ;..  res = 0;.  
35980 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
35990 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
359a0 72 74 28 20 70 43 75 72 2d 3e 65 43 75 72 54 79  rt( pCur->eCurTy
359b0 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42  pe==CURTYPE_VTAB
359c0 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e   );.  if( pCur->
359d0 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62  nullRow ){.    b
359e0 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61  reak;.  }.  pVta
359f0 62 20 3d 20 70 43 75 72 2d 3e 75 63 2e 70 56 43  b = pCur->uc.pVC
35a00 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f  ur->pVtab;.  pMo
35a10 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
35a20 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28  odule;.  assert(
35a30 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20   pModule->xNext 
35a40 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  );..  /* Invoke 
35a50 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65 74 68  the xNext() meth
35a60 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65  od of the module
35a70 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61  . There is no wa
35a80 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75  y for the.  ** u
35a90 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d  nderlying implem
35aa0 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65 74 75  entation to retu
35ab0 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66 20 6f  rn an error if o
35ac0 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69 6e 67  ne occurs during
35ad0 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49  .  ** xNext(). I
35ae0 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20 65 72  nstead, if an er
35af0 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72 75 65  ror occurs, true
35b00 20 69 73 20 72 65 74 75 72 6e 65 64 20 28 69 6e   is returned (in
35b10 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 0a 20  dicating that . 
35b20 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76 61 69   ** data is avai
35b30 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65 20 65  lable) and the e
35b40 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75 72 6e  rror code return
35b50 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20  ed when xColumn 
35b60 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68  or.  ** some oth
35b70 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e 65 78  er method is nex
35b80 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65  t invoked on the
35b90 20 73 61 76 65 20 76 69 72 74 75 61 6c 20 74 61   save virtual ta
35ba0 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f  ble cursor..  */
35bb0 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
35bc0 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e 75 63 2e  >xNext(pCur->uc.
35bd0 70 56 43 75 72 29 3b 0a 20 20 73 71 6c 69 74 65  pVCur);.  sqlite
35be0 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
35bf0 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69  g(p, pVtab);.  i
35c00 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
35c10 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
35c20 0a 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65  .  res = pModule
35c30 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 75 63 2e  ->xEof(pCur->uc.
35c40 70 56 43 75 72 29 3b 0a 20 20 56 64 62 65 42 72  pVCur);.  VdbeBr
35c50 61 6e 63 68 54 61 6b 65 6e 28 21 72 65 73 2c 32  anchTaken(!res,2
35c60 29 3b 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b  );.  if( !res ){
35c70 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65  .    /* If there
35c80 20 69 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74   is data, jump t
35c90 6f 20 50 32 20 2a 2f 0a 20 20 20 20 67 6f 74 6f  o P2 */.    goto
35ca0 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f   jump_to_p2_and_
35cb0 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
35cc0 75 70 74 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  upt;.  }.  goto 
35cd0 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
35ce0 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  upt;.}.#endif /*
35cf0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
35d00 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
35d10 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
35d20 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
35d30 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d  * Opcode: VRenam
35d40 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  e P1 * * P4 *.**
35d50 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
35d60 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ter to a virtual
35d70 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61   table object, a
35d80 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
35d90 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69  tructure..** Thi
35da0 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
35db0 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
35dc0 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f  ng xRename metho
35dd0 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  d. The value.** 
35de0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
35df0 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20  s passed as the 
35e00 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74  zName argument t
35e10 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65  o the xRename me
35e20 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  thod..*/.case OP
35e30 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71  _VRename: {.  sq
35e40 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
35e50 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b  b;.  Mem *pName;
35e60 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d  ..  pVtab = pOp-
35e70 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62  >p4.pVtab->pVtab
35e80 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d 65  ;.  pName = &aMe
35e90 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
35ea0 73 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f  sert( pVtab->pMo
35eb0 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b  dule->xRename );
35ec0 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  .  assert( memIs
35ed0 56 61 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b 0a  Valid(pName) );.
35ee0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
35ef0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 52 45  dOnly==0 );.  RE
35f00 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
35f10 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20  ->p1, pName);.  
35f20 61 73 73 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66  assert( pName->f
35f30 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29  lags & MEM_Str )
35f40 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e  ;.  testcase( pN
35f50 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45  ame->enc==SQLITE
35f60 5f 55 54 46 38 20 29 3b 0a 20 20 74 65 73 74 63  _UTF8 );.  testc
35f70 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d  ase( pName->enc=
35f80 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20  =SQLITE_UTF16BE 
35f90 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
35fa0 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54  Name->enc==SQLIT
35fb0 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20 72  E_UTF16LE );.  r
35fc0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
35fd0 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4e  hangeEncoding(pN
35fe0 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  ame, SQLITE_UTF8
35ff0 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
36000 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
36010 65 72 72 6f 72 3b 0a 20 20 72 63 20 3d 20 70 56  error;.  rc = pV
36020 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52  tab->pModule->xR
36030 65 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61  ename(pVtab, pNa
36040 6d 65 2d 3e 7a 29 3b 0a 20 20 73 71 6c 69 74 65  me->z);.  sqlite
36050 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
36060 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 70  g(p, pVtab);.  p
36070 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20  ->expired = 0;. 
36080 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
36090 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
360a0 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  r;.  break;.}.#e
360b0 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
360c0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
360d0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
360e0 3a 20 56 55 70 64 61 74 65 20 50 31 20 50 32 20  : VUpdate P1 P2 
360f0 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
36100 70 73 69 73 3a 20 64 61 74 61 3d 72 5b 50 33 40  psis: data=r[P3@
36110 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  P2].**.** P4 is 
36120 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
36130 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
36140 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
36150 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
36160 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
36170 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65  nvokes the corre
36180 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74 65  sponding xUpdate
36190 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c 75   method. P2 valu
361a0 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67  es.** are contig
361b0 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  uous memory cell
361c0 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 50 33  s starting at P3
361d0 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20   to pass to the 
361e0 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f  xUpdate .** invo
361f0 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75  cation. The valu
36200 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 28 50  e in register (P
36210 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70 6f  3+P2-1) correspo
36220 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70  nds to the .** p
36230 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  2th element of t
36240 68 65 20 61 72 67 76 20 61 72 72 61 79 20 70 61  he argv array pa
36250 73 73 65 64 20 74 6f 20 78 55 70 64 61 74 65 2e  ssed to xUpdate.
36260 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64 61  .**.** The xUpda
36270 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64  te method will d
36280 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61 6e  o a DELETE or an
36290 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68 2e   INSERT or both.
362a0 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d 20  .** The argv[0] 
362b0 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20 63  element (which c
362c0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65  orresponds to me
362d0 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a  mory cell P3).**
362e0 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
362f0 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65   a row to delete
36300 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69 73  .  If argv[0] is
36310 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a   NULL then no .*
36320 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72  * deletion occur
36330 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d 20  s.  The argv[1] 
36340 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20 72  element is the r
36350 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77 20  owid of the new 
36360 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20 63  .** row.  This c
36370 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61  an be NULL to ha
36380 76 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  ve the virtual t
36390 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65 20  able select the 
363a0 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f  new .** rowid fo
363b0 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20 73  r itself.  The s
363c0 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e  ubsequent elemen
363d0 74 73 20 69 6e 20 74 68 65 20 61 72 72 61 79 20  ts in the array 
363e0 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75  are .** the valu
363f0 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  es of columns in
36400 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a   the new row..**
36410 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68 65  .** If P2==1 the
36420 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20 70  n no insert is p
36430 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b  erformed.  argv[
36440 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  0] is the rowid 
36450 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64  of.** a row to d
36460 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  elete..**.** P1 
36470 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61  is a boolean fla
36480 67 2e 20 49 66 20 69 74 20 69 73 20 73 65 74 20  g. If it is set 
36490 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65 20  to true and the 
364a0 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20  xUpdate call.** 
364b0 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74  is successful, t
364c0 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72 65  hen the value re
364d0 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
364e0 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
364f0 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65 74  wid() .** is set
36500 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
36510 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 74   the rowid for t
36520 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73 65  he row just inse
36530 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69  rted..**.** P5 i
36540 73 20 74 68 65 20 65 72 72 6f 72 20 61 63 74 69  s the error acti
36550 6f 6e 73 20 28 4f 45 5f 52 65 70 6c 61 63 65 2c  ons (OE_Replace,
36560 20 4f 45 5f 46 61 69 6c 2c 20 4f 45 5f 49 67 6e   OE_Fail, OE_Ign
36570 6f 72 65 2c 20 65 74 63 29 20 74 6f 0a 2a 2a 20  ore, etc) to.** 
36580 61 70 70 6c 79 20 69 6e 20 74 68 65 20 63 61 73  apply in the cas
36590 65 20 6f 66 20 61 20 63 6f 6e 73 74 72 61 69 6e  e of a constrain
365a0 74 20 66 61 69 6c 75 72 65 20 6f 6e 20 61 6e 20  t failure on an 
365b0 69 6e 73 65 72 74 20 6f 72 20 75 70 64 61 74 65  insert or update
365c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70  ..*/.case OP_VUp
365d0 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  date: {.  sqlite
365e0 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
365f0 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
36600 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
36610 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e    int nArg;.  in
36620 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e  t i;.  sqlite_in
36630 74 36 34 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d  t64 rowid;.  Mem
36640 20 2a 2a 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20   **apArg;.  Mem 
36650 2a 70 58 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pX;..  assert( 
36660 70 4f 70 2d 3e 70 32 3d 3d 31 20 20 20 20 20 20  pOp->p2==1      
36670 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45    || pOp->p5==OE
36680 5f 46 61 69 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e  _Fail   || pOp->
36690 70 35 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20  p5==OE_Rollback 
366a0 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e  .       || pOp->
366b0 70 35 3d 3d 4f 45 5f 41 62 6f 72 74 20 7c 7c 20  p5==OE_Abort || 
366c0 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f  pOp->p5==OE_Igno
366d0 72 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f  re || pOp->p5==O
366e0 45 5f 52 65 70 6c 61 63 65 0a 20 20 29 3b 0a 20  E_Replace.  );. 
366f0 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
36700 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 56 74  Only==0 );.  pVt
36710 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
36720 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 69 66 28  ab->pVtab;.  if(
36730 20 70 56 74 61 62 3d 3d 30 20 7c 7c 20 4e 45 56   pVtab==0 || NEV
36740 45 52 28 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c  ER(pVtab->pModul
36750 65 3d 3d 30 29 20 29 7b 0a 20 20 20 20 72 63 20  e==0) ){.    rc 
36760 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b  = SQLITE_LOCKED;
36770 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
36780 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
36790 7d 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  }.  pModule = pV
367a0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
367b0 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  nArg = pOp->p2;.
367c0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
367d0 34 74 79 70 65 3d 3d 50 34 5f 56 54 41 42 20 29  4type==P4_VTAB )
367e0 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
367f0 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 29  Module->xUpdate)
36800 20 29 7b 0a 20 20 20 20 75 38 20 76 74 61 62 4f   ){.    u8 vtabO
36810 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 64 62 2d 3e  nConflict = db->
36820 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a  vtabOnConflict;.
36830 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61      apArg = p->a
36840 70 41 72 67 3b 0a 20 20 20 20 70 58 20 3d 20 26  pArg;.    pX = &
36850 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
36860 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41     for(i=0; i<nA
36870 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; i++){.      
36880 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
36890 69 64 28 70 58 29 20 29 3b 0a 20 20 20 20 20 20  id(pX) );.      
368a0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
368b0 28 70 2c 20 70 58 29 3b 0a 20 20 20 20 20 20 61  (p, pX);.      a
368c0 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20  pArg[i] = pX;.  
368d0 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a      pX++;.    }.
368e0 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f      db->vtabOnCo
368f0 6e 66 6c 69 63 74 20 3d 20 70 4f 70 2d 3e 70 35  nflict = pOp->p5
36900 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75  ;.    rc = pModu
36910 6c 65 2d 3e 78 55 70 64 61 74 65 28 70 56 74 61  le->xUpdate(pVta
36920 62 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 2c 20  b, nArg, apArg, 
36930 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 64 62 2d  &rowid);.    db-
36940 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20  >vtabOnConflict 
36950 3d 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  = vtabOnConflict
36960 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61  ;.    sqlite3Vta
36970 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
36980 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28   pVtab);.    if(
36990 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
369a0 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  & pOp->p1 ){.   
369b0 20 20 20 61 73 73 65 72 74 28 20 6e 41 72 67 3e     assert( nArg>
369c0 31 20 26 26 20 61 70 41 72 67 5b 30 5d 20 26 26  1 && apArg[0] &&
369d0 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61 67   (apArg[0]->flag
369e0 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20  s&MEM_Null) );. 
369f0 20 20 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77       db->lastRow
36a00 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d  id = lastRowid =
36a10 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20   rowid;.    }.  
36a20 20 20 69 66 28 20 28 72 63 26 30 78 66 66 29 3d    if( (rc&0xff)=
36a30 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49  =SQLITE_CONSTRAI
36a40 4e 54 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 56  NT && pOp->p4.pV
36a50 74 61 62 2d 3e 62 43 6f 6e 73 74 72 61 69 6e 74  tab->bConstraint
36a60 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f   ){.      if( pO
36a70 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65  p->p5==OE_Ignore
36a80 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
36a90 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
36aa0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
36ab0 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20   p->errorAction 
36ac0 3d 20 28 28 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f  = ((pOp->p5==OE_
36ad0 52 65 70 6c 61 63 65 29 20 3f 20 4f 45 5f 41 62  Replace) ? OE_Ab
36ae0 6f 72 74 20 3a 20 70 4f 70 2d 3e 70 35 29 3b 0a  ort : pOp->p5);.
36af0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
36b00 65 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 43 68 61  e{.      p->nCha
36b10 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20  nge++;.    }.   
36b20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
36b30 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
36b40 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  r;.  }.  break;.
36b50 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
36b60 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
36b70 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
36b80 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41    SQLITE_OMIT_PA
36b90 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f  GER_PRAGMAS./* O
36ba0 70 63 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74  pcode: Pagecount
36bb0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
36bc0 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72  ** Write the cur
36bd0 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70  rent number of p
36be0 61 67 65 73 20 69 6e 20 64 61 74 61 62 61 73 65  ages in database
36bf0 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65   P1 to memory ce
36c00 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ll P2..*/.case O
36c10 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20  P_Pagecount: {  
36c20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
36c30 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75  2 */.  pOut = ou
36c40 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
36c50 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  pOp);.  pOut->u.
36c60 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  i = sqlite3Btree
36c70 4c 61 73 74 50 61 67 65 28 64 62 2d 3e 61 44 62  LastPage(db->aDb
36c80 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 29 3b 0a  [pOp->p1].pBt);.
36c90 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
36ca0 66 0a 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c  f...#ifndef  SQL
36cb0 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
36cc0 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65  RAGMAS./* Opcode
36cd0 3a 20 4d 61 78 50 67 63 6e 74 20 50 31 20 50 32  : MaxPgcnt P1 P2
36ce0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 72   P3 * *.**.** Tr
36cf0 79 20 74 6f 20 73 65 74 20 74 68 65 20 6d 61 78  y to set the max
36d00 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20  imum page count 
36d10 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20  for database P1 
36d20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  to the value in 
36d30 50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74 20 6c 65  P3..** Do not le
36d40 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61  t the maximum pa
36d50 67 65 20 63 6f 75 6e 74 20 66 61 6c 6c 20 62 65  ge count fall be
36d60 6c 6f 77 20 74 68 65 20 63 75 72 72 65 6e 74 20  low the current 
36d70 70 61 67 65 20 63 6f 75 6e 74 20 61 6e 64 0a 2a  page count and.*
36d80 2a 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65 20  * do not change 
36d90 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65  the maximum page
36da0 20 63 6f 75 6e 74 20 76 61 6c 75 65 20 69 66 20   count value if 
36db0 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f  P3==0..**.** Sto
36dc0 72 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70  re the maximum p
36dd0 61 67 65 20 63 6f 75 6e 74 20 61 66 74 65 72 20  age count after 
36de0 74 68 65 20 63 68 61 6e 67 65 20 69 6e 20 72 65  the change in re
36df0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
36e00 73 65 20 4f 50 5f 4d 61 78 50 67 63 6e 74 3a 20  se OP_MaxPgcnt: 
36e10 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
36e20 6f 75 74 32 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  out2 */.  unsign
36e30 65 64 20 69 6e 74 20 6e 65 77 4d 61 78 3b 0a 20  ed int newMax;. 
36e40 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20   Btree *pBt;..  
36e50 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
36e60 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
36e70 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
36e80 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 6e  Op->p1].pBt;.  n
36e90 65 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69 66 28  ewMax = 0;.  if(
36ea0 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20   pOp->p3 ){.    
36eb0 6e 65 77 4d 61 78 20 3d 20 73 71 6c 69 74 65 33  newMax = sqlite3
36ec0 42 74 72 65 65 4c 61 73 74 50 61 67 65 28 70 42  BtreeLastPage(pB
36ed0 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 77 4d  t);.    if( newM
36ee0 61 78 20 3c 20 28 75 6e 73 69 67 6e 65 64 29 70  ax < (unsigned)p
36ef0 4f 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61 78 20  Op->p3 ) newMax 
36f00 3d 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d  = (unsigned)pOp-
36f10 3e 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  >p3;.  }.  pOut-
36f20 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74  >u.i = sqlite3Bt
36f30 72 65 65 4d 61 78 50 61 67 65 43 6f 75 6e 74 28  reeMaxPageCount(
36f40 70 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a 20 20  pBt, newMax);.  
36f50 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
36f60 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69  ../* Opcode: Ini
36f70 74 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a  t * P2 * P4 *.**
36f80 20 53 79 6e 6f 70 73 69 73 3a 20 20 53 74 61 72   Synopsis:  Star
36f90 74 20 61 74 20 50 32 0a 2a 2a 0a 2a 2a 20 50 72  t at P2.**.** Pr
36fa0 6f 67 72 61 6d 73 20 63 6f 6e 74 61 69 6e 20 61  ograms contain a
36fb0 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e 63 65   single instance
36fc0 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20   of this opcode 
36fd0 61 73 20 74 68 65 20 76 65 72 79 20 66 69 72 73  as the very firs
36fe0 74 0a 2a 2a 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  t.** opcode..**.
36ff0 2a 2a 20 49 66 20 74 72 61 63 69 6e 67 20 69 73  ** If tracing is
37000 20 65 6e 61 62 6c 65 64 20 28 62 79 20 74 68 65   enabled (by the
37010 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29   sqlite3_trace()
37020 29 20 69 6e 74 65 72 66 61 63 65 2c 20 74 68 65  ) interface, the
37030 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38 20 73  n.** the UTF-8 s
37040 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20  tring contained 
37050 69 6e 20 50 34 20 69 73 20 65 6d 69 74 74 65 64  in P4 is emitted
37060 20 6f 6e 20 74 68 65 20 74 72 61 63 65 20 63 61   on the trace ca
37070 6c 6c 62 61 63 6b 2e 0a 2a 2a 20 4f 72 20 69 66  llback..** Or if
37080 20 50 34 20 69 73 20 62 6c 61 6e 6b 2c 20 75 73   P4 is blank, us
37090 65 20 74 68 65 20 73 74 72 69 6e 67 20 72 65 74  e the string ret
370a0 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
370b0 5f 73 71 6c 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66  _sql()..**.** If
370c0 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
370d0 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
370e0 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  tion P2..*/.case
370f0 20 4f 50 5f 49 6e 69 74 3a 20 7b 20 20 20 20 20   OP_Init: {     
37100 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
37110 20 20 63 68 61 72 20 2a 7a 54 72 61 63 65 3b 0a    char *zTrace;.
37120 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 23 69 66 6e    char *z;..#ifn
37130 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
37140 54 52 41 43 45 0a 20 20 69 66 28 20 64 62 2d 3e  TRACE.  if( db->
37150 78 54 72 61 63 65 0a 20 20 20 26 26 20 21 70 2d  xTrace.   && !p-
37160 3e 64 6f 69 6e 67 52 65 72 75 6e 0a 20 20 20 26  >doingRerun.   &
37170 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f 70  & (zTrace = (pOp
37180 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34  ->p4.z ? pOp->p4
37190 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d  .z : p->zSql))!=
371a0 30 0a 20 20 29 7b 0a 20 20 20 20 7a 20 3d 20 73  0.  ){.    z = s
371b0 71 6c 69 74 65 33 56 64 62 65 45 78 70 61 6e 64  qlite3VdbeExpand
371c0 53 71 6c 28 70 2c 20 7a 54 72 61 63 65 29 3b 0a  Sql(p, zTrace);.
371d0 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64      db->xTrace(d
371e0 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a 29  b->pTraceArg, z)
371f0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  ;.    sqlite3DbF
37200 72 65 65 28 64 62 2c 20 7a 29 3b 0a 20 20 7d 0a  ree(db, z);.  }.
37210 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
37220 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 0a 20 20  E_FCNTL_TRACE.  
37230 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70  zTrace = (pOp->p
37240 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20  4.z ? pOp->p4.z 
37250 3a 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 69 66  : p->zSql);.  if
37260 28 20 7a 54 72 61 63 65 20 29 7b 0a 20 20 20 20  ( zTrace ){.    
37270 69 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72 28 69  int i;.    for(i
37280 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
37290 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 44  ++){.      if( D
372a0 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
372b0 65 65 4d 61 73 6b 2c 20 69 29 3d 3d 30 20 29 20  eeMask, i)==0 ) 
372c0 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
372d0 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e  sqlite3_file_con
372e0 74 72 6f 6c 28 64 62 2c 20 64 62 2d 3e 61 44 62  trol(db, db->aDb
372f0 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 53 51 4c 49 54  [i].zName, SQLIT
37300 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 2c 20 7a  E_FCNTL_TRACE, z
37310 54 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a 20 20  Trace);.    }.  
37320 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
37330 54 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41  TE_USE_FCNTL_TRA
37340 43 45 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  CE */.#ifdef SQL
37350 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
37360 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  (db->flags & SQL
37370 49 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d 30  ITE_SqlTrace)!=0
37380 0a 20 20 20 26 26 20 28 7a 54 72 61 63 65 20 3d  .   && (zTrace =
37390 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f   (pOp->p4.z ? pO
373a0 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71  p->p4.z : p->zSq
373b0 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20  l))!=0.  ){.    
373c0 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
373d0 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20 25  tf("SQL-trace: %
373e0 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20  s\n", zTrace);. 
373f0 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
37400 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e  ITE_DEBUG */.#en
37410 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
37420 49 54 5f 54 52 41 43 45 20 2a 2f 0a 20 20 69 66  IT_TRACE */.  if
37430 28 20 70 4f 70 2d 3e 70 32 20 29 20 67 6f 74 6f  ( pOp->p2 ) goto
37440 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62   jump_to_p2;.  b
37450 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66 20  reak;.}..#ifdef 
37460 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55  SQLITE_ENABLE_CU
37470 52 53 4f 52 5f 48 49 4e 54 53 0a 2f 2a 20 4f 70  RSOR_HINTS./* Op
37480 63 6f 64 65 3a 20 43 75 72 73 6f 72 48 69 6e 74  code: CursorHint
37490 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
374a0 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 68 69 6e  ** Provide a hin
374b0 74 20 74 6f 20 63 75 72 73 6f 72 20 50 31 20 74  t to cursor P1 t
374c0 68 61 74 20 69 74 20 6f 6e 6c 79 20 6e 65 65 64  hat it only need
374d0 73 20 74 6f 20 72 65 74 75 72 6e 20 72 6f 77 73  s to return rows
374e0 20 74 68 61 74 0a 2a 2a 20 73 61 74 69 73 66 79   that.** satisfy
374f0 20 74 68 65 20 45 78 70 72 20 69 6e 20 50 34 2e   the Expr in P4.
37500 20 20 54 4b 5f 52 45 47 49 53 54 45 52 20 74 65    TK_REGISTER te
37510 72 6d 73 20 69 6e 20 74 68 65 20 50 34 20 65 78  rms in the P4 ex
37520 70 72 65 73 73 69 6f 6e 20 72 65 66 65 72 0a 2a  pression refer.*
37530 2a 20 74 6f 20 76 61 6c 75 65 73 20 63 75 72 72  * to values curr
37540 65 6e 74 6c 79 20 68 65 6c 64 20 69 6e 20 72 65  ently held in re
37550 67 69 73 74 65 72 73 2e 20 20 54 4b 5f 43 4f 4c  gisters.  TK_COL
37560 55 4d 4e 20 74 65 72 6d 73 20 69 6e 20 74 68 65  UMN terms in the
37570 20 50 34 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f   P4.** expressio
37580 6e 20 72 65 66 65 72 20 74 6f 20 63 6f 6c 75 6d  n refer to colum
37590 6e 73 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65  ns in the b-tree
375a0 20 74 6f 20 77 68 69 63 68 20 63 75 72 73 6f 72   to which cursor
375b0 20 50 31 20 69 73 20 70 6f 69 6e 74 69 6e 67 2e   P1 is pointing.
375c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 75 72 73  .*/.case OP_Curs
375d0 6f 72 48 69 6e 74 3a 20 7b 0a 20 20 56 64 62 65  orHint: {.  Vdbe
375e0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61  Cursor *pC;..  a
375f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
37600 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
37610 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
37620 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
37630 3d 3d 50 34 5f 45 58 50 52 20 29 3b 0a 20 20 70  ==P4_EXPR );.  p
37640 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
37650 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 20  ->p1];.  if( pC 
37660 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
37670 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
37680 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
37690 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75    sqlite3BtreeCu
376a0 72 73 6f 72 48 69 6e 74 28 70 43 2d 3e 75 63 2e  rsorHint(pC->uc.
376b0 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 48  pCursor, BTREE_H
376c0 49 4e 54 5f 52 41 4e 47 45 2c 0a 20 20 20 20 20  INT_RANGE,.     
376d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
376e0 20 20 20 20 20 20 70 4f 70 2d 3e 70 34 2e 70 45        pOp->p4.pE
376f0 78 70 72 2c 20 61 4d 65 6d 29 3b 0a 20 20 7d 0a  xpr, aMem);.  }.
37700 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
37710 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  f /* SQLITE_ENAB
37720 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 20  LE_CURSOR_HINTS 
37730 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  */../* Opcode: N
37740 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  oop * * * * *.**
37750 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 20  .** Do nothing. 
37760 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
37770 6e 20 69 73 20 6f 66 74 65 6e 20 75 73 65 66 75  n is often usefu
37780 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a 2a 20 64  l as a jump.** d
37790 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  estination..*/./
377a0 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69 63 20 45  *.** The magic E
377b0 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20 61 72  xplain opcode ar
377c0 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74 65 64 20  e only inserted 
377d0 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d 3d 32 20  when explain==2 
377e0 28 77 68 69 63 68 0a 2a 2a 20 69 73 20 74 6f 20  (which.** is to 
377f0 73 61 79 20 77 68 65 6e 20 74 68 65 20 45 58 50  say when the EXP
37800 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
37810 73 79 6e 74 61 78 20 69 73 20 75 73 65 64 2e 29  syntax is used.)
37820 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
37830 72 65 63 6f 72 64 73 20 69 6e 66 6f 72 6d 61 74  records informat
37840 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 6f 70 74  ion from the opt
37850 69 6d 69 7a 65 72 2e 20 20 49 74 20 69 73 20 74  imizer.  It is t
37860 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 61  he.** the same a
37870 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54 68 69 73  s a no-op.  This
37880 20 6f 70 63 6f 64 65 73 6e 65 76 65 72 20 61 70   opcodesnever ap
37890 70 65 61 72 73 20 69 6e 20 61 20 72 65 61 6c 20  pears in a real 
378a0 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64  VM program..*/.d
378b0 65 66 61 75 6c 74 3a 20 7b 20 20 20 20 20 20 20  efault: {       
378c0 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 72 65     /* This is re
378d0 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64  ally OP_Noop and
378e0 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20   OP_Explain */. 
378f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
37900 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c  code==OP_Noop ||
37910 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
37920 5f 45 78 70 6c 61 69 6e 20 29 3b 0a 20 20 62 72  _Explain );.  br
37930 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a  eak;.}../*******
37940 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37950 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37960 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37970 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37980 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 61  ******.** The ca
37990 73 65 73 20 6f 66 20 74 68 65 20 73 77 69 74 63  ses of the switc
379a0 68 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76  h statement abov
379b0 65 20 74 68 69 73 20 6c 69 6e 65 20 73 68 6f 75  e this line shou
379c0 6c 64 20 61 6c 6c 20 62 65 20 69 6e 64 65 6e 74  ld all be indent
379d0 65 64 0a 2a 2a 20 62 79 20 36 20 73 70 61 63 65  ed.** by 6 space
379e0 73 2e 20 20 42 75 74 20 74 68 65 20 6c 65 66 74  s.  But the left
379f0 2d 6d 6f 73 74 20 36 20 73 70 61 63 65 73 20 68  -most 6 spaces h
37a00 61 76 65 20 62 65 65 6e 20 72 65 6d 6f 76 65 64  ave been removed
37a10 20 74 6f 20 69 6d 70 72 6f 76 65 20 74 68 65 0a   to improve the.
37a20 2a 2a 20 72 65 61 64 61 62 69 6c 69 74 79 2e 20  ** readability. 
37a30 20 46 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74   From this point
37a40 20 6f 6e 20 64 6f 77 6e 2c 20 74 68 65 20 6e 6f   on down, the no
37a50 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e  rmal indentation
37a60 20 72 75 6c 65 73 20 61 72 65 0a 2a 2a 20 72 65   rules are.** re
37a70 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a  stored..********
37a80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37a90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37aa0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37ab0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
37ac0 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69  *****/.    }..#i
37ad0 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
37ae0 45 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 75 36  E.    {.      u6
37af0 34 20 65 6e 64 54 69 6d 65 20 3d 20 73 71 6c 69  4 endTime = sqli
37b00 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 20 20 20  te3Hwtime();.   
37b10 20 20 20 69 66 28 20 65 6e 64 54 69 6d 65 3e 73     if( endTime>s
37b20 74 61 72 74 20 29 20 70 4f 72 69 67 4f 70 2d 3e  tart ) pOrigOp->
37b30 63 79 63 6c 65 73 20 2b 3d 20 65 6e 64 54 69 6d  cycles += endTim
37b40 65 20 2d 20 73 74 61 72 74 3b 0a 20 20 20 20 20  e - start;.     
37b50 20 70 4f 72 69 67 4f 70 2d 3e 63 6e 74 2b 2b 3b   pOrigOp->cnt++;
37b60 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  .    }.#endif.. 
37b70 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77     /* The follow
37b80 69 6e 67 20 63 6f 64 65 20 61 64 64 73 20 6e 6f  ing code adds no
37b90 74 68 69 6e 67 20 74 6f 20 74 68 65 20 61 63 74  thing to the act
37ba0 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  ual functionalit
37bb0 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20  y.    ** of the 
37bc0 70 72 6f 67 72 61 6d 2e 20 20 49 74 20 69 73 20  program.  It is 
37bd0 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72 20 74 65  only here for te
37be0 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67 67  sting and debugg
37bf0 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 74  ing..    ** On t
37c00 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20 69  he other hand, i
37c10 74 20 64 6f 65 73 20 62 75 72 6e 20 43 50 55 20  t does burn CPU 
37c20 63 79 63 6c 65 73 20 65 76 65 72 79 20 74 69 6d  cycles every tim
37c30 65 20 74 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a  e through.    **
37c40 20 74 68 65 20 65 76 61 6c 75 61 74 6f 72 20 6c   the evaluator l
37c50 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63 61 6e 20  oop.  So we can 
37c60 6c 65 61 76 65 20 69 74 20 6f 75 74 20 77 68 65  leave it out whe
37c70 6e 20 4e 44 45 42 55 47 20 69 73 20 64 65 66 69  n NDEBUG is defi
37c80 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 6e  ned..    */.#ifn
37c90 64 65 66 20 4e 44 45 42 55 47 0a 20 20 20 20 61  def NDEBUG.    a
37ca0 73 73 65 72 74 28 20 70 4f 70 3e 3d 26 61 4f 70  ssert( pOp>=&aOp
37cb0 5b 2d 31 5d 20 26 26 20 70 4f 70 3c 26 61 4f 70  [-1] && pOp<&aOp
37cc0 5b 70 2d 3e 6e 4f 70 2d 31 5d 20 29 3b 0a 0a 23  [p->nOp-1] );..#
37cd0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
37ce0 55 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66  UG.    if( db->f
37cf0 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
37d00 62 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20  beTrace ){.     
37d10 20 69 66 28 20 72 63 21 3d 30 20 29 20 70 72 69   if( rc!=0 ) pri
37d20 6e 74 66 28 22 72 63 3d 25 64 5c 6e 22 2c 72 63  ntf("rc=%d\n",rc
37d30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 72  );.      if( pOr
37d40 69 67 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  igOp->opflags & 
37d50 28 4f 50 46 4c 47 5f 4f 55 54 32 29 20 29 7b 0a  (OPFLG_OUT2) ){.
37d60 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72          register
37d70 54 72 61 63 65 28 70 4f 72 69 67 4f 70 2d 3e 70  Trace(pOrigOp->p
37d80 32 2c 20 26 61 4d 65 6d 5b 70 4f 72 69 67 4f 70  2, &aMem[pOrigOp
37d90 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  ->p2]);.      }.
37da0 20 20 20 20 20 20 69 66 28 20 70 4f 72 69 67 4f        if( pOrigO
37db0 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
37dc0 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20 20  LG_OUT3 ){.     
37dd0 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65     registerTrace
37de0 28 70 4f 72 69 67 4f 70 2d 3e 70 33 2c 20 26 61  (pOrigOp->p3, &a
37df0 4d 65 6d 5b 70 4f 72 69 67 4f 70 2d 3e 70 33 5d  Mem[pOrigOp->p3]
37e00 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
37e10 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49  .#endif  /* SQLI
37e20 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64  TE_DEBUG */.#end
37e30 69 66 20 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f  if  /* NDEBUG */
37e40 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64  .  }  /* The end
37e50 20 6f 66 20 74 68 65 20 66 6f 72 28 3b 3b 29 20   of the for(;;) 
37e60 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70 73 20 74  loop the loops t
37e70 68 72 6f 75 67 68 20 6f 70 63 6f 64 65 73 20 2a  hrough opcodes *
37e80 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 72 65  /..  /* If we re
37e90 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c 20  ach this point, 
37ea0 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 65 78  it means that ex
37eb0 65 63 75 74 69 6f 6e 20 69 73 20 66 69 6e 69 73  ecution is finis
37ec0 68 65 64 20 77 69 74 68 0a 20 20 2a 2a 20 61 6e  hed with.  ** an
37ed0 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b   error of some k
37ee0 69 6e 64 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f  ind..  */.abort_
37ef0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20  due_to_error:.  
37f00 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
37f10 69 6c 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49  iled ) rc = SQLI
37f20 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20  TE_NOMEM_BKPT;. 
37f30 20 61 73 73 65 72 74 28 20 72 63 20 29 3b 0a 20   assert( rc );. 
37f40 20 69 66 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d   if( p->zErrMsg=
37f50 3d 30 20 26 26 20 72 63 21 3d 53 51 4c 49 54 45  =0 && rc!=SQLITE
37f60 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a  _IOERR_NOMEM ){.
37f70 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
37f80 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71  rror(p, "%s", sq
37f90 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29  lite3ErrStr(rc))
37fa0 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72 63 20 3d 20  ;.  }.  p->rc = 
37fb0 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 53 79 73  rc;.  sqlite3Sys
37fc0 74 65 6d 45 72 72 6f 72 28 64 62 2c 20 72 63 29  temError(db, rc)
37fd0 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 73 71  ;.  testcase( sq
37fe0 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
37ff0 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 73  g.xLog!=0 );.  s
38000 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20 22  qlite3_log(rc, "
38010 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 72 74 73  statement aborts
38020 20 61 74 20 25 64 3a 20 5b 25 73 5d 20 25 73 22   at %d: [%s] %s"
38030 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
38040 20 20 20 20 20 20 28 69 6e 74 29 28 70 4f 70 20        (int)(pOp 
38050 2d 20 61 4f 70 29 2c 20 70 2d 3e 7a 53 71 6c 2c  - aOp), p->zSql,
38060 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
38070 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
38080 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  p);.  if( rc==SQ
38090 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
380a0 20 29 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75   ) sqlite3OomFau
380b0 6c 74 28 64 62 29 3b 0a 20 20 72 63 20 3d 20 53  lt(db);.  rc = S
380c0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 69  QLITE_ERROR;.  i
380d0 66 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  f( resetSchemaOn
380e0 46 61 75 6c 74 3e 30 20 29 7b 0a 20 20 20 20 73  Fault>0 ){.    s
380f0 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63  qlite3ResetOneSc
38100 68 65 6d 61 28 64 62 2c 20 72 65 73 65 74 53 63  hema(db, resetSc
38110 68 65 6d 61 4f 6e 46 61 75 6c 74 2d 31 29 3b 0a  hemaOnFault-1);.
38120 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 69 73 20 69    }..  /* This i
38130 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 6f  s the only way o
38140 75 74 20 6f 66 20 74 68 69 73 20 70 72 6f 63 65  ut of this proce
38150 64 75 72 65 2e 20 20 57 65 20 68 61 76 65 20 74  dure.  We have t
38160 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65 20 74  o.  ** release t
38170 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 62 74  he mutexes on bt
38180 72 65 65 73 20 74 68 61 74 20 77 65 72 65 20 61  rees that were a
38190 63 71 75 69 72 65 64 20 61 74 20 74 68 65 0a 20  cquired at the. 
381a0 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64 62 65   ** top. */.vdbe
381b0 5f 72 65 74 75 72 6e 3a 0a 20 20 64 62 2d 3e 6c  _return:.  db->l
381c0 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
381d0 6f 77 69 64 3b 0a 20 20 74 65 73 74 63 61 73 65  owid;.  testcase
381e0 28 20 6e 56 6d 53 74 65 70 3e 30 20 29 3b 0a 20  ( nVmStep>0 );. 
381f0 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c   p->aCounter[SQL
38200 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 56  ITE_STMTSTATUS_V
38210 4d 5f 53 54 45 50 5d 20 2b 3d 20 28 69 6e 74 29  M_STEP] += (int)
38220 6e 56 6d 53 74 65 70 3b 0a 20 20 73 71 6c 69 74  nVmStep;.  sqlit
38230 65 33 56 64 62 65 4c 65 61 76 65 28 70 29 3b 0a  e3VdbeLeave(p);.
38240 20 20 61 73 73 65 72 74 28 20 72 63 21 3d 53 51    assert( rc!=SQ
38250 4c 49 54 45 5f 4f 4b 20 7c 7c 20 6e 45 78 74 72  LITE_OK || nExtr
38260 61 44 65 6c 65 74 65 3d 3d 30 20 0a 20 20 20 20  aDelete==0 .    
38270 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 5f 73 74     || sqlite3_st
38280 72 6c 69 6b 65 28 22 44 45 4c 45 54 45 25 22 2c  rlike("DELETE%",
38290 70 2d 3e 7a 53 71 6c 2c 30 29 21