/ Hex Artifact Content
Login

Artifact 991e9b2c38cdc987ed214249b3c72ea73a06fb2e:


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 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76  he next global v
0c70: 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65  ariable is incre
0c80: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d 65  mented each time
0c90: 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70   the OP_Found op
0ca0: 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75  code.** is execu
0cb0: 74 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ted. This is use
0cc0: 64 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65  d to test whethe
0cd0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72  r or not the for
0ce0: 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72  eign key.** oper
0cf0: 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ation implemente
0d00: 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a  d using OP_FkIsZ
0d10: 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20  ero is working. 
0d20: 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a  This variable.**
0d30: 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e   has no function
0d40: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68   other than to h
0d50: 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63  elp verify the c
0d60: 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e  orrect operation
0d70: 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61   of the.** libra
0d80: 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
0d90: 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71  LITE_TEST.int sq
0da0: 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e  lite3_found_coun
0db0: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0dc0: 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69  *.** Test a regi
0dd0: 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69  ster to see if i
0de0: 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75  t exceeds the cu
0df0: 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c  rrent maximum bl
0e00: 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69  ob size..** If i
0e10: 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74  t does, record t
0e20: 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62  he new maximum b
0e30: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  lob size..*/.#if
0e40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
0e50: 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  TEST) && !define
0e60: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  d(SQLITE_OMIT_BU
0e70: 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65  ILTIN_TEST).# de
0e80: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
0e90: 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64  BLOBSIZE(P)  upd
0ea0: 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50  ateMaxBlobsize(P
0eb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
0ec0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
0ed0: 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a  SIZE(P).#endif..
0ee0: 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  /*.** Invoke the
0ef0: 20 56 44 42 45 20 63 6f 76 65 72 61 67 65 20 63   VDBE coverage c
0f00: 61 6c 6c 62 61 63 6b 2c 20 69 66 20 74 68 61 74  allback, if that
0f10: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 64 65 66   callback is def
0f20: 69 6e 65 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66  ined.  This.** f
0f30: 65 61 74 75 72 65 20 69 73 20 75 73 65 64 20 66  eature is used f
0f40: 6f 72 20 74 65 73 74 20 73 75 69 74 65 20 76 61  or test suite va
0f50: 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e  lidation only an
0f60: 64 20 64 6f 65 73 20 6e 6f 74 20 61 70 70 65 61  d does not appea
0f70: 72 20 61 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69  r an.** producti
0f80: 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a  on builds..**.**
0f90: 20 4d 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72   M is an integer
0fa0: 2c 20 32 20 6f 72 20 33 2c 20 74 68 61 74 20 69  , 2 or 3, that i
0fb0: 6e 64 69 63 65 73 20 68 6f 77 20 6d 61 6e 79 20  ndices how many 
0fc0: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
0fd0: 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e  he.** branch can
0fe0: 20 67 6f 2e 20 20 49 74 20 69 73 20 75 73 75 61   go.  It is usua
0ff0: 6c 6c 79 20 32 2e 20 20 22 49 22 20 69 73 20 74  lly 2.  "I" is t
1000: 68 65 20 64 69 72 65 63 74 69 6f 6e 20 74 68 65  he direction the
1010: 20 62 72 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e   branch.** goes.
1020: 20 20 30 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20    0 means falls 
1030: 74 68 72 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e  through.  1 mean
1040: 73 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b 65  s branch is take
1050: 6e 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 0a  n.  2 means the.
1060: 2a 2a 20 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e  ** second altern
1070: 61 74 69 76 65 20 62 72 61 6e 63 68 20 69 73 20  ative branch is 
1080: 74 61 6b 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72  taken..**.** iSr
1090: 63 4c 69 6e 65 20 69 73 20 74 68 65 20 73 6f 75  cLine is the sou
10a0: 72 63 65 20 63 6f 64 65 20 6c 69 6e 65 20 28 66  rce code line (f
10b0: 72 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f  rom the __LINE__
10c0: 20 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20   macro) that.** 
10d0: 67 65 6e 65 72 61 74 65 64 20 74 68 65 20 56 44  generated the VD
10e0: 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  BE instruction. 
10f0: 20 54 68 69 73 20 69 6e 73 74 72 75 6d 65 6e 74   This instrument
1100: 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68  ation assumes th
1110: 61 74 20 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65  at all.** source
1120: 20 63 6f 64 65 20 69 73 20 69 6e 20 61 20 73 69   code is in a si
1130: 6e 67 6c 65 20 66 69 6c 65 20 28 74 68 65 20 61  ngle file (the a
1140: 6d 61 6c 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53  malgamation).  S
1150: 70 65 63 69 61 6c 20 76 61 6c 75 65 73 20 31 0a  pecial values 1.
1160: 2a 2a 20 61 6e 64 20 32 20 66 6f 72 20 74 68 65  ** and 2 for the
1170: 20 69 53 72 63 4c 69 6e 65 20 70 61 72 61 6d 65   iSrcLine parame
1180: 74 65 72 20 6d 65 61 6e 20 74 68 61 74 20 74 68  ter mean that th
1190: 69 73 20 70 61 72 74 69 63 75 6c 61 72 20 62 72  is particular br
11a0: 61 6e 63 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79  anch is.** alway
11b0: 73 20 74 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72  s taken or never
11c0: 20 74 61 6b 65 6e 2c 20 72 65 73 70 65 63 74 69   taken, respecti
11d0: 76 65 6c 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  vely..*/.#if !de
11e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44 42  fined(SQLITE_VDB
11f0: 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64 65  E_COVERAGE).# de
1200: 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54  fine VdbeBranchT
1210: 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a  aken(I,M).#else.
1220: 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72 61  # define VdbeBra
1230: 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64  nchTaken(I,M) vd
1240: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f 70  beTakeBranch(pOp
1250: 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a  ->iSrcLine,I,M).
1260: 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76 64    static void vd
1270: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 69 6e 74  beTakeBranch(int
1280: 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c   iSrcLine, u8 I,
1290: 20 75 38 20 4d 29 7b 0a 20 20 20 20 69 66 28 20   u8 M){.    if( 
12a0: 69 53 72 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41  iSrcLine<=2 && A
12b0: 4c 57 41 59 53 28 69 53 72 63 4c 69 6e 65 3e 30  LWAYS(iSrcLine>0
12c0: 29 20 29 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69  ) ){.      M = i
12d0: 53 72 63 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f  SrcLine;.      /
12e0: 2a 20 41 73 73 65 72 74 20 74 68 65 20 74 72 75  * Assert the tru
12f0: 74 68 20 6f 66 20 56 64 62 65 43 6f 76 65 72 61  th of VdbeCovera
1300: 67 65 41 6c 77 61 79 73 54 61 6b 65 6e 28 29 20  geAlwaysTaken() 
1310: 61 6e 64 20 0a 20 20 20 20 20 20 2a 2a 20 56 64  and .      ** Vd
1320: 62 65 43 6f 76 65 72 61 67 65 4e 65 76 65 72 54  beCoverageNeverT
1330: 61 6b 65 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20  aken() */.      
1340: 61 73 73 65 72 74 28 20 28 4d 20 26 20 49 29 3d  assert( (M & I)=
1350: 3d 49 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =I );.    }else{
1360: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
1370: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1380: 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29 20  VdbeBranch==0 ) 
1390: 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45  return;  /*NO_TE
13a0: 53 54 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  ST*/.      sqlit
13b0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
13c0: 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69 74  VdbeBranch(sqlit
13d0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
13e0: 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a 20  VdbeBranchArg,. 
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1410: 20 20 20 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c       iSrcLine,I,
1420: 4d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  M);.    }.  }.#e
1430: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  ndif../*.** Conv
1440: 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72 65  ert the given re
1450: 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74  gister into a st
1460: 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74  ring if it isn't
1470: 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e   one.** already.
1480: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
1490: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
14a0: 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
14b0: 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e   Stringify(P, en
14c0: 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d  c) \.   if(((P)-
14d0: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c  >flags&(MEM_Str|
14e0: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26  MEM_Blob))==0 &&
14f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
1500: 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30  tringify(P,enc,0
1510: 29 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f  )) \.     { goto
1520: 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a   no_mem; }../*.*
1530: 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73  * An ephemeral s
1540: 74 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67  tring value (sig
1550: 6e 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45  nified by the ME
1560: 4d 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f  M_Ephem flag) co
1570: 6e 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e  ntains.** a poin
1580: 74 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63  ter to a dynamic
1590: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
15a0: 74 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65  tring where some
15b0: 20 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a   other entity.**
15c0: 20 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   is responsible 
15d0: 66 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  for deallocating
15e0: 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42   that string.  B
15f0: 65 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73  ecause the regis
1600: 74 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20  ter.** does not 
1610: 63 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69  control the stri
1620: 6e 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20  ng, it might be 
1630: 64 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20  deleted without 
1640: 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  the register.** 
1650: 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a  knowing it..**.*
1660: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63  * This routine c
1670: 6f 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d  onverts an ephem
1680: 65 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f  eral string into
1690: 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61   a dynamically a
16a0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69  llocated.** stri
16b0: 6e 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69  ng that the regi
16c0: 73 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74  ster itself cont
16d0: 72 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20  rols.  In other 
16e0: 77 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e  words, it.** con
16f0: 76 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68  verts an MEM_Eph
1700: 65 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  em string into a
1710: 20 73 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a   string with P.z
1720: 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a  ==P.zMalloc..*/.
1730: 23 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65  #define Deepheme
1740: 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69  ralize(P) \.   i
1750: 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  f( ((P)->flags&M
1760: 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20  EM_Ephem)!=0 \. 
1770: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
1780: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
1790: 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20  able(P) ){ goto 
17a0: 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74  no_mem;}../* Ret
17b0: 75 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20  urn true if the 
17c0: 63 75 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65  cursor was opene
17d0: 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f  d using the OP_O
17e0: 70 65 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65  penSorter opcode
17f0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53  . */.#define isS
1800: 6f 72 74 65 72 28 78 29 20 28 28 78 29 2d 3e 70  orter(x) ((x)->p
1810: 53 6f 72 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a  Sorter!=0)../*.*
1820: 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43  * Allocate VdbeC
1830: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75  ursor number iCu
1840: 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69  r.  Return a poi
1850: 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74  nter to it.  Ret
1860: 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77  urn NULL.** if w
1870: 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d  e run out of mem
1880: 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56  ory..*/.static V
1890: 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63  dbeCursor *alloc
18a0: 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62  ateCursor(.  Vdb
18b0: 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20  e *p,           
18c0: 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61     /* The virtua
18d0: 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69  l machine */.  i
18e0: 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20 20 20  nt iCur,        
18f0: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
1900: 20 74 68 65 20 6e 65 77 20 56 64 62 65 43 75 72   the new VdbeCur
1910: 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  sor */.  int nFi
1920: 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f  eld,           /
1930: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  * Number of fiel
1940: 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ds in the table 
1950: 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  or index */.  in
1960: 74 20 69 44 62 2c 20 20 20 20 20 20 20 20 20 20  t iDb,          
1970: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
1980: 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e  the cursor belon
1990: 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a  gs to, or -1 */.
19a0: 20 20 69 6e 74 20 69 73 42 74 72 65 65 43 75 72    int isBtreeCur
19b0: 73 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65 20  sor     /* True 
19c0: 66 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61 6c  for B-Tree.  Fal
19d0: 73 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61  se for pseudo-ta
19e0: 62 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a 29  ble or vtab */.)
19f0: 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20  {.  /* Find the 
1a00: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
1a10: 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f   will be used to
1a20: 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20   store the blob 
1a30: 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72  of memory.  ** r
1a40: 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
1a50: 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75   VdbeCursor stru
1a60: 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e  cture. It is con
1a70: 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61  venient to use a
1a80: 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f   .  ** vdbe memo
1a90: 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67  ry cell to manag
1aa0: 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  e the memory all
1ab0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64  ocation required
1ac0: 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65   for a.  ** Vdbe
1ad0: 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65  Cursor structure
1ae0: 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69   for the followi
1af0: 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a  ng reasons:.  **
1b00: 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69  .  **   * Someti
1b10: 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  mes cursor numbe
1b20: 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20  rs are used for 
1b30: 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66  a couple of diff
1b40: 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70  erent.  **     p
1b50: 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62  urposes in a vdb
1b60: 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64  e program. The d
1b70: 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69  ifferent uses mi
1b80: 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a  ght require.  **
1b90: 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20 73       different s
1ba0: 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ized allocations
1bb0: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70  . Memory cells p
1bc0: 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a  rovide growable.
1bd0: 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74    **     allocat
1be0: 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ions..  **.  ** 
1bf0: 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45    * When using E
1c00: 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e  NABLE_MEMORY_MAN
1c10: 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20  AGEMENT, memory 
1c20: 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e  cell buffers can
1c30: 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65  .  **     be fre
1c40: 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68  ed lazily via th
1c50: 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73  e sqlite3_releas
1c60: 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20  e_memory() API. 
1c70: 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69  This.  **     mi
1c80: 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62  nimizes the numb
1c90: 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c  er of malloc cal
1ca0: 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20 73  ls made by the s
1cb0: 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ystem..  **.  **
1cc0: 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f   Memory cells fo
1cd0: 72 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c  r cursors are al
1ce0: 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65 20 74  located at the t
1cf0: 6f 70 20 6f 66 20 74 68 65 20 61 64 64 72 65 73  op of the addres
1d00: 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65  s.  ** space. Me
1d10: 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d  mory cell (p->nM
1d20: 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  em) corresponds 
1d30: 74 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61  to cursor 0. Spa
1d40: 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73  ce for.  ** curs
1d50: 6f 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20  or 1 is managed 
1d60: 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28  by memory cell (
1d70: 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e  p->nMem-1), etc.
1d80: 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  .  */.  Mem *pMe
1d90: 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e  m = &p->aMem[p->
1da0: 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69  nMem-iCur];..  i
1db0: 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65  nt nByte;.  Vdbe
1dc0: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
1dd0: 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20  .  nByte = .    
1de0: 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28    ROUND8(sizeof(
1df0: 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32  VdbeCursor)) + 2
1e00: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
1e10: 65 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 69 73  eld + .      (is
1e20: 42 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69  BtreeCursor?sqli
1e30: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1e40: 7a 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65  ze():0);..  asse
1e50: 72 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72  rt( iCur<p->nCur
1e60: 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  sor );.  if( p->
1e70: 61 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20  apCsr[iCur] ){. 
1e80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72     sqlite3VdbeFr
1e90: 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
1ea0: 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20  pCsr[iCur]);.   
1eb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1ec0: 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53  = 0;.  }.  if( S
1ed0: 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65  QLITE_OK==sqlite
1ee0: 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
1ef0: 52 65 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79  Resize(pMem, nBy
1f00: 74 65 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70  te) ){.    p->ap
1f10: 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20  Csr[iCur] = pCx 
1f20: 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70  = (VdbeCursor*)p
1f30: 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73  Mem->z;.    mems
1f40: 65 74 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f  et(pCx, 0, sizeo
1f50: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a  f(VdbeCursor));.
1f60: 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69      pCx->iDb = i
1f70: 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69  Db;.    pCx->nFi
1f80: 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20  eld = nField;.  
1f90: 20 20 70 43 78 2d 3e 61 4f 66 66 73 65 74 20 3d    pCx->aOffset =
1fa0: 20 26 70 43 78 2d 3e 61 54 79 70 65 5b 6e 46 69   &pCx->aType[nFi
1fb0: 65 6c 64 5d 3b 0a 20 20 20 20 69 66 28 20 69 73  eld];.    if( is
1fc0: 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a 20  BtreeCursor ){. 
1fd0: 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73 6f       pCx->pCurso
1fe0: 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a  r = (BtCursor*).
1ff0: 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d            &pMem-
2000: 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  >z[ROUND8(sizeof
2010: 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a  (VdbeCursor))+2*
2020: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
2030: 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ld];.      sqlit
2040: 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72  e3BtreeCursorZer
2050: 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  o(pCx->pCursor);
2060: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
2070: 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a  urn pCx;.}../*.*
2080: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
2090: 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20   a value into a 
20a0: 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e  numeric represen
20b0: 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e  tation if we can
20c0: 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75  .** do so withou
20d0: 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  t loss of inform
20e0: 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ation.  In other
20f0: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73   words, if the s
2100: 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c  tring.** looks l
2110: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f  ike a number, co
2120: 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20  nvert it into a 
2130: 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64  number.  If it d
2140: 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20  oes not.** look 
2150: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c  like a number, l
2160: 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a  eave it alone..*
2170: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62 54 72 79  *.** If the bTry
2180: 46 6f 72 49 6e 74 20 66 6c 61 67 20 69 73 20 74  ForInt flag is t
2190: 72 75 65 2c 20 74 68 65 6e 20 65 78 74 72 61 20  rue, then extra 
21a0: 65 66 66 6f 72 74 20 69 73 20 6d 61 64 65 20 74  effort is made t
21b0: 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20 69 6e 74  o give.** an int
21c0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
21d0: 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73 20 74 68  ion.  Strings th
21e0: 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f  at look like flo
21f0: 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 76  ating point.** v
2200: 61 6c 75 65 73 20 62 75 74 20 77 68 69 63 68 20  alues but which 
2210: 68 61 76 65 20 6e 6f 20 66 72 61 63 74 69 6f 6e  have no fraction
2220: 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20 28 65 78  al component (ex
2230: 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30 27 29 0a  ample: '48.00').
2240: 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20 61 20 4d  ** will have a M
2250: 45 4d 5f 49 6e 74 20 72 65 70 72 65 73 65 6e 74  EM_Int represent
2260: 61 74 69 6f 6e 20 77 68 65 6e 20 62 54 72 79 46  ation when bTryF
2270: 6f 72 49 6e 74 20 69 73 20 74 72 75 65 2e 0a 2a  orInt is true..*
2280: 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46 6f 72 49  *.** If bTryForI
2290: 6e 74 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65  nt is false, the
22a0: 6e 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 73  n if the input s
22b0: 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20 61  tring contains a
22c0: 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e   decimal.** poin
22d0: 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74 69 61 6c  t or exponential
22e0: 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68 65 20 72   notation, the r
22f0: 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79 20 4d 45  esult is only ME
2300: 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20  M_Real, even.** 
2310: 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 65  if there is an e
2320: 78 61 63 74 20 69 6e 74 65 67 65 72 20 72 65 70  xact integer rep
2330: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2340: 68 65 20 71 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a  he quantity..*/.
2350: 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c  static void appl
2360: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
2370: 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69 6e 74 20  (Mem *pRec, int 
2380: 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a 20 20 64  bTryForInt){.  d
2390: 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a 20 20  ouble rValue;.  
23a0: 69 36 34 20 69 56 61 6c 75 65 3b 0a 20 20 75 38  i64 iValue;.  u8
23b0: 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63   enc = pRec->enc
23c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 52 65  ;.  assert( (pRe
23d0: 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  c->flags & (MEM_
23e0: 53 74 72 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  Str|MEM_Int|MEM_
23f0: 52 65 61 6c 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  Real))==MEM_Str 
2400: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
2410: 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c 20 26 72  AtoF(pRec->z, &r
2420: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
2430: 65 6e 63 29 3d 3d 30 20 29 20 72 65 74 75 72 6e  enc)==0 ) return
2440: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
2450: 65 33 41 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a  e3Atoi64(pRec->z
2460: 2c 20 26 69 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &iValue, pRec-
2470: 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20 20 20 20  >n, enc) ){.    
2480: 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c  pRec->u.i = iVal
2490: 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c  ue;.    pRec->fl
24a0: 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  ags |= MEM_Int;.
24b0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 52 65    }else{.    pRe
24c0: 63 2d 3e 75 2e 72 20 3d 20 72 56 61 6c 75 65 3b  c->u.r = rValue;
24d0: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
24e0: 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20   |= MEM_Real;.  
24f0: 20 20 69 66 28 20 62 54 72 79 46 6f 72 49 6e 74    if( bTryForInt
2500: 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   ) sqlite3VdbeIn
2510: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
2520: 65 63 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  ec);.  }.}../*.*
2530: 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20  * Processing is 
2540: 64 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65  determine by the
2550: 20 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65   affinity parame
2560: 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54  ter:.**.** SQLIT
2570: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a  E_AFF_INTEGER:.*
2580: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  * SQLITE_AFF_REA
2590: 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  L:.** SQLITE_AFF
25a0: 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20  _NUMERIC:.**    
25b0: 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70  Try to convert p
25c0: 52 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  Rec to an intege
25d0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
25e0: 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f   or a .**    flo
25f0: 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72  ating-point repr
2600: 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e  esentation if an
2610: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2620: 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73  ntation.**    is
2630: 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20   not possible.  
2640: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 69 6e  Note that the in
2650: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2660: 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c  tion is.**    al
2670: 77 61 79 73 20 70 72 65 66 65 72 72 65 64 2c 20  ways preferred, 
2680: 65 76 65 6e 20 69 66 20 74 68 65 20 61 66 66 69  even if the affi
2690: 6e 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65  nity is REAL, be
26a0: 63 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69  cause.**    an i
26b0: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
26c0: 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70  ation is more sp
26d0: 61 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e  ace efficient on
26e0: 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c   disk..**.** SQL
26f0: 49 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a  ITE_AFF_TEXT:.**
2700: 20 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63      Convert pRec
2710: 20 74 6f 20 61 20 74 65 78 74 20 72 65 70 72 65   to a text repre
2720: 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  sentation..**.**
2730: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45   SQLITE_AFF_NONE
2740: 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20  :.**    No-op.  
2750: 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65  pRec is unchange
2760: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  d..*/.static voi
2770: 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28  d applyAffinity(
2780: 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20  .  Mem *pRec,   
2790: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61         /* The va
27a0: 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66  lue to apply aff
27b0: 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68  inity to */.  ch
27c0: 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20  ar affinity,    
27d0: 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
27e0: 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
27f0: 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20  */.  u8 enc     
2800: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
2810: 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69  this text encodi
2820: 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61  ng */.){.  if( a
2830: 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f  ffinity>=SQLITE_
2840: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20  AFF_NUMERIC ){. 
2850: 20 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e     assert( affin
2860: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2870: 49 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e  INTEGER || affin
2880: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2890: 52 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20  REAL.           
28a0: 20 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53    || affinity==S
28b0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
28c0: 43 20 29 3b 0a 20 20 20 20 69 66 28 20 28 70 52  C );.    if( (pR
28d0: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
28e0: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
28f0: 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67   if( (pRec->flag
2900: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  s & MEM_Real)==0
2910: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
2920: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
2930: 4d 5f 53 74 72 20 29 20 61 70 70 6c 79 4e 75 6d  M_Str ) applyNum
2940: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 52 65  ericAffinity(pRe
2950: 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  c,1);.      }els
2960: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
2970: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
2980: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20  inity(pRec);.   
2990: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
29a0: 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d  se if( affinity=
29b0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
29c0: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20   ){.    /* Only 
29d0: 61 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76  attempt the conv
29e0: 65 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69  ersion to TEXT i
29f0: 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e  f there is an in
2a00: 74 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20  teger or real.  
2a10: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2a20: 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55  ion (blob and NU
2a30: 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f  LL do not get co
2a40: 6e 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20  nverted) but no 
2a50: 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65  string.    ** re
2a60: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20  presentation..  
2a70: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d    */.    if( 0==
2a80: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pRec->flags&MEM
2a90: 5f 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e  _Str) && (pRec->
2aa0: 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c  flags&(MEM_Real|
2ab0: 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20  MEM_Int)) ){.   
2ac0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2ad0: 6d 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c  mStringify(pRec,
2ae0: 20 65 6e 63 2c 20 31 29 3b 0a 20 20 20 20 7d 0a   enc, 1);.    }.
2af0: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79    }.}../*.** Try
2b00: 20 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20   to convert the 
2b10: 74 79 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69  type of a functi
2b20: 6f 6e 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61  on argument or a
2b30: 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a   result column.*
2b40: 2a 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63  * into a numeric
2b50: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2b60: 20 20 55 73 65 20 65 69 74 68 65 72 20 49 4e 54    Use either INT
2b70: 45 47 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69  EGER or REAL whi
2b80: 63 68 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70  chever.** is app
2b90: 72 6f 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f  ropriate.  But o
2ba0: 6e 6c 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65  nly do the conve
2bb0: 72 73 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70  rsion if it is p
2bc0: 6f 73 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a  ossible without.
2bd0: 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ** loss of infor
2be0: 6d 61 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72  mation and retur
2bf0: 6e 20 74 68 65 20 72 65 76 69 73 65 64 20 74 79  n the revised ty
2c00: 70 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65  pe of the argume
2c10: 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nt..*/.int sqlit
2c20: 65 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63  e3_value_numeric
2c30: 5f 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61  _type(sqlite3_va
2c40: 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 69 6e  lue *pVal){.  in
2c50: 74 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65  t eType = sqlite
2c60: 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61  3_value_type(pVa
2c70: 6c 29 3b 0a 20 20 69 66 28 20 65 54 79 70 65 3d  l);.  if( eType=
2c80: 3d 53 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a  =SQLITE_TEXT ){.
2c90: 20 20 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20      Mem *pMem = 
2ca0: 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 20 20  (Mem*)pVal;.    
2cb0: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
2cc0: 6e 69 74 79 28 70 4d 65 6d 2c 20 30 29 3b 0a 20  nity(pMem, 0);. 
2cd0: 20 20 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74     eType = sqlit
2ce0: 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56  e3_value_type(pV
2cf0: 61 6c 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  al);.  }.  retur
2d00: 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a  n eType;.}../*.*
2d10: 2a 20 45 78 70 6f 72 74 65 64 20 76 65 72 73 69  * Exported versi
2d20: 6f 6e 20 6f 66 20 61 70 70 6c 79 41 66 66 69 6e  on of applyAffin
2d30: 69 74 79 28 29 2e 20 54 68 69 73 20 6f 6e 65 20  ity(). This one 
2d40: 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33  works on sqlite3
2d50: 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74  _value*, .** not
2d60: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65   the internal Me
2d70: 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64  m* type..*/.void
2d80: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70   sqlite3ValueApp
2d90: 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 73 71  lyAffinity(.  sq
2da0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
2db0: 6c 2c 20 0a 20 20 75 38 20 61 66 66 69 6e 69 74  l, .  u8 affinit
2dc0: 79 2c 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a  y, .  u8 enc.){.
2dd0: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
2de0: 28 4d 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66  (Mem *)pVal, aff
2df0: 69 6e 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a  inity, enc);.}..
2e00: 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63 75 72 72 65  /*.** pMem curre
2e10: 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f 6c 64 73 20  ntly only holds 
2e20: 61 20 73 74 72 69 6e 67 20 74 79 70 65 20 28 6f  a string type (o
2e30: 72 20 6d 61 79 62 65 20 61 20 42 4c 4f 42 20 74  r maybe a BLOB t
2e40: 68 61 74 20 77 65 20 63 61 6e 0a 2a 2a 20 69 6e  hat we can.** in
2e50: 74 65 72 70 72 65 74 20 61 73 20 61 20 73 74 72  terpret as a str
2e60: 69 6e 67 20 69 66 20 77 65 20 77 61 6e 74 20 74  ing if we want t
2e70: 6f 29 2e 20 20 43 6f 6d 70 75 74 65 20 69 74 73  o).  Compute its
2e80: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a   corresponding.*
2e90: 2a 20 6e 75 6d 65 72 69 63 20 74 79 70 65 2c 20  * numeric type, 
2ea0: 69 66 20 68 61 73 20 6f 6e 65 2e 20 20 53 65 74  if has one.  Set
2eb0: 20 74 68 65 20 70 4d 65 6d 2d 3e 75 2e 72 20 61   the pMem->u.r a
2ec0: 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69 20 66 69 65  nd pMem->u.i fie
2ed0: 6c 64 73 0a 2a 2a 20 61 63 63 6f 72 64 69 6e 67  lds.** according
2ee0: 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31  ly..*/.static u1
2ef0: 36 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e  6 SQLITE_NOINLIN
2f00: 45 20 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63  E computeNumeric
2f10: 54 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b  Type(Mem *pMem){
2f20: 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d  .  assert( (pMem
2f30: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
2f40: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30  nt|MEM_Real))==0
2f50: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
2f60: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Mem->flags & (ME
2f70: 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29  M_Str|MEM_Blob))
2f80: 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c  !=0 );.  if( sql
2f90: 69 74 65 33 41 74 6f 46 28 70 4d 65 6d 2d 3e 7a  ite3AtoF(pMem->z
2fa0: 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72 2c 20 70 4d  , &pMem->u.r, pM
2fb0: 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63  em->n, pMem->enc
2fc0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75  )==0 ){.    retu
2fd0: 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20  rn 0;.  }.  if( 
2fe0: 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 4d  sqlite3Atoi64(pM
2ff0: 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e  em->z, &pMem->u.
3000: 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d  i, pMem->n, pMem
3010: 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49 54 45 5f 4f  ->enc)==SQLITE_O
3020: 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  K ){.    return 
3030: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 72  MEM_Int;.  }.  r
3040: 65 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a  eturn MEM_Real;.
3050: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
3060: 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65  the numeric type
3070: 20 66 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65   for pMem, eithe
3080: 72 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d  r MEM_Int or MEM
3090: 5f 52 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72  _Real or both or
30a0: 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a  .** none.  .**.*
30b0: 2a 20 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75  * Unlike applyNu
30c0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c  mericAffinity(),
30d0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f   this routine do
30e0: 65 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d  es not modify pM
30f0: 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75  em->flags..** Bu
3100: 74 20 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d  t it does set pM
3110: 65 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d  em->u.r and pMem
3120: 2d 3e 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74  ->u.i appropriat
3130: 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75  ely..*/.static u
3140: 31 36 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d  16 numericType(M
3150: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28  em *pMem){.  if(
3160: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28   pMem->flags & (
3170: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
3180: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
3190: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
31a0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
31b0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d  ;.  }.  if( pMem
31c0: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
31d0: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a  tr|MEM_Blob) ){.
31e0: 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 75      return compu
31f0: 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 70 4d  teNumericType(pM
3200: 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  em);.  }.  retur
3210: 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  n 0;.}..#ifdef S
3220: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
3230: 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73  * Write a nice s
3240: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
3250: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74  tion of the cont
3260: 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65  ents of cell pMe
3270: 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72  m.** into buffer
3280: 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42   zBuf, length nB
3290: 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  uf..*/.void sqli
32a0: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
32b0: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c  Print(Mem *pMem,
32c0: 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20   char *zBuf){.  
32d0: 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75  char *zCsr = zBu
32e0: 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65  f;.  int f = pMe
32f0: 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61  m->flags;..  sta
3300: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
3310: 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d  const encnames[]
3320: 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22   = {"(X)", "(8)"
3330: 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36  , "(16LE)", "(16
3340: 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26  BE)"};..  if( f&
3350: 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20  MEM_Blob ){.    
3360: 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20  int i;.    char 
3370: 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  c;.    if( f & M
3380: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
3390: 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  c = 'z';.      a
33a0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
33b0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
33c0: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
33d0: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
33e0: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
33f0: 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  c = 't';.      a
3400: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3410: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
3420: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
3430: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
3440: 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  em ){.      c = 
3450: 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'e';.      asser
3460: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
3470: 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30  tic|MEM_Dyn))==0
3480: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
3490: 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20       c = 's';.  
34a0: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
34b0: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
34c0: 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20  Csr, "%c", c);. 
34d0: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
34e0: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
34f0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3500: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3510: 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e  , "%d[", pMem->n
3520: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3530: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3540: 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Csr);.    for(i=
3550: 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65  0; i<16 && i<pMe
3560: 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  m->n; i++){.    
3570: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3580: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
3590: 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d  02X", ((int)pMem
35a0: 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b  ->z[i] & 0xFF));
35b0: 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  .      zCsr += s
35c0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
35d0: 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Csr);.    }.    
35e0: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
35f0: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
3600: 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d  {.      char z =
3610: 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20   pMem->z[i];.   
3620: 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a     if( z<32 || z
3630: 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d  >126 ) *zCsr++ =
3640: 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65   '.';.      else
3650: 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20   *zCsr++ = z;.  
3660: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
3670: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
3680: 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e  Csr, "]%s", encn
3690: 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29  ames[pMem->enc])
36a0: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
36b0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
36c0: 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26  sr);.    if( f &
36d0: 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
36e0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
36f0: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b  ntf(100, zCsr,"+
3700: 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65  %dz",pMem->u.nZe
3710: 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  ro);.      zCsr 
3720: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3730: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
3740: 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27      *zCsr = '\0'
3750: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20  ;.  }else if( f 
3760: 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  & MEM_Str ){.   
3770: 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a   int j, k;.    z
3780: 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20  Buf[0] = ' ';.  
3790: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
37a0: 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  n ){.      zBuf[
37b0: 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20  1] = 'z';.      
37c0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
37d0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
37e0: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
37f0: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3800: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
3810: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a   zBuf[1] = 't';.
3820: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3830: 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f   & (MEM_Dyn|MEM_
3840: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3850: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3860: 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20  MEM_Ephem ){.   
3870: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27     zBuf[1] = 'e'
3880: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
3890: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
38a0: 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b  |MEM_Dyn))==0 );
38b0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
38c0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b    zBuf[1] = 's';
38d0: 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32  .    }.    k = 2
38e0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
38f0: 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75  printf(100, &zBu
3900: 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d  f[k], "%d", pMem
3910: 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  ->n);.    k += s
3920: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
3930: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3940: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20  uf[k++] = '[';. 
3950: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35     for(j=0; j<15
3960: 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a   && j<pMem->n; j
3970: 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20  ++){.      u8 c 
3980: 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20  = pMem->z[j];.  
3990: 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20      if( c>=0x20 
39a0: 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20  && c<0x7f ){.   
39b0: 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d       zBuf[k++] =
39c0: 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   c;.      }else{
39d0: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
39e0: 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  +] = '.';.      
39f0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66  }.    }.    zBuf
3a00: 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20  [k++] = ']';.   
3a10: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3a20: 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20  f(100,&zBuf[k], 
3a30: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
3a40: 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  nc]);.    k += s
3a50: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
3a60: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3a70: 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d  uf[k++] = 0;.  }
3a80: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  .}.#endif..#ifde
3a90: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
3aa0: 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76  *.** Print the v
3ab0: 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74  alue of a regist
3ac0: 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70  er for tracing p
3ad0: 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74  urposes:.*/.stat
3ae0: 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65  ic void memTrace
3af0: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20  Print(Mem *p){. 
3b00: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3b10: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b  MEM_Undefined ){
3b20: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 75 6e  .    printf(" un
3b30: 64 65 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c  defined");.  }el
3b40: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
3b50: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
3b60: 20 20 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22    printf(" NULL"
3b70: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  );.  }else if( (
3b80: 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  p->flags & (MEM_
3b90: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28  Int|MEM_Str))==(
3ba0: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3bb0: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3bc0: 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e   si:%lld", p->u.
3bd0: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
3be0: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  p->flags & MEM_I
3bf0: 6e 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  nt ){.    printf
3c00: 28 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75  (" i:%lld", p->u
3c10: 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  .i);.#ifndef SQL
3c20: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
3c30: 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20  G_POINT.  }else 
3c40: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3c50: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70  EM_Real ){.    p
3c60: 72 69 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70  rintf(" r:%g", p
3c70: 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20  ->u.r);.#endif. 
3c80: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3c90: 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
3ca0: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3cb0: 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d   (rowset)");.  }
3cc0: 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a  else{.    char z
3cd0: 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71  Buf[200];.    sq
3ce0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
3cf0: 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29  tyPrint(p, zBuf)
3d00: 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 25  ;.    printf(" %
3d10: 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d  s", zBuf);.  }.}
3d20: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 67  .static void reg
3d30: 69 73 74 65 72 54 72 61 63 65 28 69 6e 74 20 69  isterTrace(int i
3d40: 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20  Reg, Mem *p){.  
3d50: 70 72 69 6e 74 66 28 22 52 45 47 5b 25 64 5d 20  printf("REG[%d] 
3d60: 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65  = ", iReg);.  me
3d70: 6d 54 72 61 63 65 50 72 69 6e 74 28 70 29 3b 0a  mTracePrint(p);.
3d80: 20 20 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a    printf("\n");.
3d90: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
3da0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
3db0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
3dc0: 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 64  _TRACE(R,M) if(d
3dd0: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
3de0: 56 64 62 65 54 72 61 63 65 29 72 65 67 69 73 74  VdbeTrace)regist
3df0: 65 72 54 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c  erTrace(R,M).#el
3e00: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  se.#  define REG
3e10: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
3e20: 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66  .#endif...#ifdef
3e30: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f   VDBE_PROFILE../
3e40: 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63  * .** hwtime.h c
3e50: 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61  ontains inline a
3e60: 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f  ssembler code fo
3e70: 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a  r implementing .
3e80: 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61  ** high-performa
3e90: 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69  nce timing routi
3ea0: 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  nes..*/.#include
3eb0: 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e   "hwtime.h"..#en
3ec0: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45  dif..#ifndef NDE
3ed0: 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  BUG./*.** This f
3ee0: 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  unction is only 
3ef0: 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
3f00: 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20 65  in an assert() e
3f10: 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a  xpression. It.**
3f20: 20 63 68 65 63 6b 73 20 74 68 61 74 20 74 68 65   checks that the
3f30: 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61   sqlite3.nTransa
3f40: 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69  ction variable i
3f50: 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20  s correctly set 
3f60: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
3f70: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
3f80: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63  ion savepoints c
3f90: 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20  urrently in the 
3fa0: 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  .** linked list 
3fb0: 73 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69  starting at sqli
3fc0: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a  te3.pSavepoint..
3fd0: 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a  ** .** Usage:.**
3fe0: 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
3ff0: 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
4000: 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74  unt(db) );.*/.st
4010: 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61  atic int checkSa
4020: 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c  vepointCount(sql
4030: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74  ite3 *db){.  int
4040: 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f   n = 0;.  Savepo
4050: 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d  int *p;.  for(p=
4060: 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
4070: 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e  p; p=p->pNext) n
4080: 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d  ++;.  assert( n=
4090: 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  =(db->nSavepoint
40a0: 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63   + db->isTransac
40b0: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29  tionSavepoint) )
40c0: 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a  ;.  return 1;.}.
40d0: 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45  #endif.../*.** E
40e0: 78 65 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f  xecute as much o
40f0: 66 20 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d  f a VDBE program
4100: 20 61 73 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54   as we can..** T
4110: 68 69 73 20 69 73 20 74 68 65 20 63 6f 72 65 20  his is the core 
4120: 6f 66 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  of sqlite3_step(
4130: 29 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ).  .*/.int sqli
4140: 74 65 33 56 64 62 65 45 78 65 63 28 0a 20 20 56  te3VdbeExec(.  V
4150: 64 62 65 20 2a 70 20 20 20 20 20 20 20 20 20 20  dbe *p          
4160: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
4170: 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e   VDBE */.){.  in
4180: 74 20 70 63 3d 30 3b 20 20 20 20 20 20 20 20 20  t pc=0;         
4190: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
41a0: 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20  program counter 
41b0: 2a 2f 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70  */.  Op *aOp = p
41c0: 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20  ->aOp;          
41d0: 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f  /* Copy of p->aO
41e0: 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20  p */.  Op *pOp; 
41f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4200: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65    /* Current ope
4210: 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20  ration */.  int 
4220: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20  rc = SQLITE_OK; 
4230: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
4240: 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73  to return */.  s
4250: 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e  qlite3 *db = p->
4260: 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  db;       /* The
4270: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75   database */.  u
4280: 38 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  8 resetSchemaOnF
4290: 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73  ault = 0; /* Res
42a0: 65 74 20 73 63 68 65 6d 61 20 61 66 74 65 72 20  et schema after 
42b0: 61 6e 20 65 72 72 6f 72 20 69 66 20 70 6f 73 69  an error if posi
42c0: 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63  tive */.  u8 enc
42d0: 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b  oding = ENC(db);
42e0: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
42f0: 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f  base encoding */
4300: 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20  .  int iCompare 
4310: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  = 0;          /*
4320: 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20   Result of last 
4330: 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61  OP_Compare opera
4340: 74 69 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  tion */.  unsign
4350: 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20  ed nVmStep = 0; 
4360: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
4370: 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  f virtual machin
4380: 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64  e steps */.#ifnd
4390: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
43a0: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
43b0: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f  .  unsigned nPro
43c0: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 3b 2f  gressLimit = 0;/
43d0: 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65  * Invoke xProgre
43e0: 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65  ss() when nVmSte
43f0: 70 20 72 65 61 63 68 65 73 20 74 68 69 73 20 2a  p reaches this *
4400: 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a  /.#endif.  Mem *
4410: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20  aMem = p->aMem; 
4420: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
4430: 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65   p->aMem */.  Me
4440: 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20  m *pIn1 = 0;    
4450: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
4460: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4470: 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30  .  Mem *pIn2 = 0
4480: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4490: 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61   2nd input opera
44a0: 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  nd */.  Mem *pIn
44b0: 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  3 = 0;          
44c0: 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20     /* 3rd input 
44d0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
44e0: 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20   *pOut = 0;     
44f0: 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75          /* Outpu
4500: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69  t operand */.  i
4510: 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30  nt *aPermute = 0
4520: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72  ;         /* Per
4530: 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75  mutation of colu
4540: 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61  mns for OP_Compa
4550: 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74  re */.  i64 last
4560: 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74  Rowid = db->last
4570: 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76 65 64  Rowid;  /* Saved
4580: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 61   value of the la
4590: 73 74 20 69 6e 73 65 72 74 20 52 4f 57 49 44 20  st insert ROWID 
45a0: 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  */.#ifdef VDBE_P
45b0: 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61  ROFILE.  u64 sta
45c0: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
45d0: 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b      /* CPU clock
45e0: 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20   count at start 
45f0: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e  of opcode */.#en
4600: 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52  dif.  /*** INSER
4610: 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45  T STACK UNION HE
4620: 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72  RE ***/..  asser
4630: 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  t( p->magic==VDB
4640: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20  E_MAGIC_RUN );  
4650: 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  /* sqlite3_step(
4660: 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20  ) verifies this 
4670: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
4680: 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20  Enter(p);.  if( 
4690: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  p->rc==SQLITE_NO
46a0: 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  MEM ){.    /* Th
46b0: 69 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20  is happens if a 
46c0: 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20  malloc() inside 
46d0: 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
46e0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20  3_column_text() 
46f0: 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  or.    ** sqlite
4700: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28  3_column_text16(
4710: 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20  ) failed.  */.  
4720: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
4730: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   }.  assert( p->
4740: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
4750: 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42   p->rc==SQLITE_B
4760: 55 53 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28  USY );.  assert(
4770: 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 7c 7c   p->bIsReader ||
4780: 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20   p->readOnly!=0 
4790: 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c  );.  p->rc = SQL
47a0: 49 54 45 5f 4f 4b 3b 0a 20 20 70 2d 3e 69 43 75  ITE_OK;.  p->iCu
47b0: 72 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20  rrentTime = 0;. 
47c0: 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78 70 6c   assert( p->expl
47d0: 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70  ain==0 );.  p->p
47e0: 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20  ResultSet = 0;. 
47f0: 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72   db->busyHandler
4800: 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 69 66  .nBusy = 0;.  if
4810: 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72  ( db->u1.isInter
4820: 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62  rupted ) goto ab
4830: 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72  ort_due_to_inter
4840: 72 75 70 74 3b 0a 20 20 73 71 6c 69 74 65 33 56  rupt;.  sqlite3V
4850: 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29  dbeIOTraceSql(p)
4860: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
4870: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
4880: 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20 64 62  ALLBACK.  if( db
4890: 2d 3e 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20  ->xProgress ){. 
48a0: 20 20 20 61 73 73 65 72 74 28 20 30 20 3c 20 64     assert( 0 < d
48b0: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20  b->nProgressOps 
48c0: 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73  );.    nProgress
48d0: 4c 69 6d 69 74 20 3d 20 28 75 6e 73 69 67 6e 65  Limit = (unsigne
48e0: 64 29 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51  d)p->aCounter[SQ
48f0: 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
4900: 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20 69 66  VM_STEP];.    if
4910: 28 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74  ( nProgressLimit
4920: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 6e 50 72  ==0 ){.      nPr
4930: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62  ogressLimit = db
4940: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a  ->nProgressOps;.
4950: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4960: 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20   nProgressLimit 
4970: 25 3d 20 28 75 6e 73 69 67 6e 65 64 29 64 62 2d  %= (unsigned)db-
4980: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a 20  >nProgressOps;. 
4990: 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a     }.  }.#endif.
49a0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
49b0: 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67  BUG.  sqlite3Beg
49c0: 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  inBenignMalloc()
49d0: 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30  ;.  if( p->pc==0
49e0: 0a 20 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66  .   && (p->db->f
49f0: 6c 61 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56  lags & (SQLITE_V
4a00: 64 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54  dbeListing|SQLIT
4a10: 45 5f 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45  E_VdbeEQP|SQLITE
4a20: 5f 56 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a  _VdbeTrace))!=0.
4a30: 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a    ){.    int i;.
4a40: 20 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31      int once = 1
4a50: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
4a60: 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20  ePrintSql(p);.  
4a70: 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61    if( p->db->fla
4a80: 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
4a90: 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20  Listing ){.     
4aa0: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 50 72   printf("VDBE Pr
4ab0: 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e  ogram Listing:\n
4ac0: 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  ");.      for(i=
4ad0: 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b  0; i<p->nOp; i++
4ae0: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
4af0: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74  e3VdbePrintOp(st
4b00: 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d  dout, i, &aOp[i]
4b10: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
4b20: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
4b30: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
4b40: 64 62 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20  dbeEQP ){.      
4b50: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f  for(i=0; i<p->nO
4b60: 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  p; i++){.       
4b70: 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f   if( aOp[i].opco
4b80: 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29  de==OP_Explain )
4b90: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
4ba0: 6f 6e 63 65 20 29 20 70 72 69 6e 74 66 28 22 56  once ) printf("V
4bb0: 44 42 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c  DBE Query Plan:\
4bc0: 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70  n");.          p
4bd0: 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f  rintf("%s\n", aO
4be0: 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20  p[i].p4.z);.    
4bf0: 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a        once = 0;.
4c00: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4c10: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
4c20: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  p->db->flags & S
4c30: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
4c40: 29 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20  )  printf("VDBE 
4c50: 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a  Trace:\n");.  }.
4c60: 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69    sqlite3EndBeni
4c70: 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64  gnMalloc();.#end
4c80: 69 66 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70  if.  for(pc=p->p
4c90: 63 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  c; rc==SQLITE_OK
4ca0: 3b 20 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73  ; pc++){.    ass
4cb0: 65 72 74 28 20 70 63 3e 3d 30 20 26 26 20 70 63  ert( pc>=0 && pc
4cc0: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69  <p->nOp );.    i
4cd0: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
4ce0: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
4cf0: 6d 3b 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  m;.#ifdef VDBE_P
4d00: 52 4f 46 49 4c 45 0a 20 20 20 20 73 74 61 72 74  ROFILE.    start
4d10: 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65   = sqlite3Hwtime
4d20: 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e  ();.#endif.    n
4d30: 56 6d 53 74 65 70 2b 2b 3b 0a 20 20 20 20 70 4f  VmStep++;.    pO
4d40: 70 20 3d 20 26 61 4f 70 5b 70 63 5d 3b 0a 23 69  p = &aOp[pc];.#i
4d50: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
4d60: 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
4d70: 55 53 0a 20 20 20 20 69 66 28 20 70 2d 3e 61 6e  US.    if( p->an
4d80: 45 78 65 63 20 29 20 70 2d 3e 61 6e 45 78 65 63  Exec ) p->anExec
4d90: 5b 70 63 5d 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a  [pc]++;.#endif..
4da0: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f      /* Only allo
4db0: 77 20 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c  w tracing if SQL
4dc0: 49 54 45 5f 44 45 42 55 47 20 69 73 20 64 65 66  ITE_DEBUG is def
4dd0: 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  ined..    */.#if
4de0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
4df0: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61  .    if( db->fla
4e00: 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
4e10: 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 73  Trace ){.      s
4e20: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f  qlite3VdbePrintO
4e30: 70 28 73 74 64 6f 75 74 2c 20 70 63 2c 20 70 4f  p(stdout, pc, pO
4e40: 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  p);.    }.#endif
4e50: 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20  .      ..    /* 
4e60: 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  Check to see if 
4e70: 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c  we need to simul
4e80: 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74  ate an interrupt
4e90: 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70  .  This only hap
4ea0: 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77  pens.    ** if w
4eb0: 65 20 68 61 76 65 20 61 20 73 70 65 63 69 61 6c  e have a special
4ec0: 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20   test build..   
4ed0: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
4ee0: 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20 73  E_TEST.    if( s
4ef0: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
4f00: 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20  _count>0 ){.    
4f10: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
4f20: 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20  upt_count--;.   
4f30: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69     if( sqlite3_i
4f40: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d  nterrupt_count==
4f50: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  0 ){.        sql
4f60: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64  ite3_interrupt(d
4f70: 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  b);.      }.    
4f80: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  }.#endif..    /*
4f90: 20 4f 6e 20 61 6e 79 20 6f 70 63 6f 64 65 20 77   On any opcode w
4fa0: 69 74 68 20 74 68 65 20 22 6f 75 74 32 2d 70 72  ith the "out2-pr
4fb0: 65 72 65 6c 65 61 73 65 22 20 74 61 67 2c 20 66  erelease" tag, f
4fc0: 72 65 65 20 61 6e 79 0a 20 20 20 20 2a 2a 20 65  ree any.    ** e
4fd0: 78 74 65 72 6e 61 6c 20 61 6c 6c 6f 63 61 74 69  xternal allocati
4fe0: 6f 6e 73 20 6f 75 74 20 6f 66 20 6d 65 6d 5b 70  ons out of mem[p
4ff0: 32 5d 20 61 6e 64 20 73 65 74 20 6d 65 6d 5b 70  2] and set mem[p
5000: 32 5d 20 74 6f 20 62 65 0a 20 20 20 20 2a 2a 20  2] to be.    ** 
5010: 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 69 6e 74  an undefined int
5020: 65 67 65 72 2e 20 20 4f 70 63 6f 64 65 73 20 77  eger.  Opcodes w
5030: 69 6c 6c 20 65 69 74 68 65 72 20 66 69 6c 6c 20  ill either fill 
5040: 69 6e 20 74 68 65 20 69 6e 74 65 67 65 72 0a 20  in the integer. 
5050: 20 20 20 2a 2a 20 76 61 6c 75 65 20 6f 72 20 63     ** value or c
5060: 6f 6e 76 65 72 74 20 6d 65 6d 5b 70 32 5d 20 74  onvert mem[p2] t
5070: 6f 20 61 20 64 69 66 66 65 72 65 6e 74 20 74 79  o a different ty
5080: 70 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61  pe..    */.    a
5090: 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c  ssert( pOp->opfl
50a0: 61 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f  ags==sqlite3Opco
50b0: 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e  deProperty[pOp->
50c0: 6f 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69  opcode] );.    i
50d0: 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  f( pOp->opflags 
50e0: 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45  & OPFLG_OUT2_PRE
50f0: 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
5100: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5110: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5120: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d  rt( pOp->p2<=(p-
5130: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
5140: 29 20 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20  ) );.      pOut 
5150: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
5160: 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
5170: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
5180: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 56 64 62  );.      if( Vdb
5190: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74  eMemDynamic(pOut
51a0: 29 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ) ) sqlite3VdbeM
51b0: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
51c0: 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  .      pOut->fla
51d0: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
51e0: 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69    }..    /* Sani
51f0: 74 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f  ty checking on o
5200: 74 68 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f  ther operands */
5210: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
5220: 45 42 55 47 0a 20 20 20 20 69 66 28 20 28 70 4f  EBUG.    if( (pO
5230: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5240: 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20  LG_IN1)!=0 ){.  
5250: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5260: 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p1>0 );.      a
5270: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d  ssert( pOp->p1<=
5280: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
5290: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61 73  sor) );.      as
52a0: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
52b0: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29  (&aMem[pOp->p1])
52c0: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
52d0: 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
52e0: 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
52f0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20  &aMem[pOp->p1]) 
5300: 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  );.      REGISTE
5310: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
5320: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29   &aMem[pOp->p1])
5330: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
5340: 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  (pOp->opflags & 
5350: 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b  OPFLG_IN2)!=0 ){
5360: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5370: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20  Op->p2>0 );.    
5380: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5390: 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  2<=(p->nMem-p->n
53a0: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
53b0: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
53c0: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
53d0: 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73  2]) );.      ass
53e0: 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65  ert( sqlite3Vdbe
53f0: 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e  CheckMemInvarian
5400: 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  ts(&aMem[pOp->p2
5410: 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49  ]) );.      REGI
5420: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
5430: 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  p2, &aMem[pOp->p
5440: 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  2]);.    }.    i
5450: 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  f( (pOp->opflags
5460: 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30   & OPFLG_IN3)!=0
5470: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
5480: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
5490: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
54a0: 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
54b0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
54c0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
54d0: 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
54e0: 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p3]) );.      
54f0: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56  assert( sqlite3V
5500: 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72  dbeCheckMemInvar
5510: 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d  iants(&aMem[pOp-
5520: 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 52  >p3]) );.      R
5530: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
5540: 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70  p->p3, &aMem[pOp
5550: 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  ->p3]);.    }.  
5560: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
5570: 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32  ags & OPFLG_OUT2
5580: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
5590: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
55a0: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
55b0: 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d   pOp->p2<=(p->nM
55c0: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
55d0: 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
55e0: 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65  ToChange(p, &aMe
55f0: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20  m[pOp->p2]);.   
5600: 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d   }.    if( (pOp-
5610: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
5620: 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20 20 20  _OUT3)!=0 ){.   
5630: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5640: 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p3>0 );.      as
5650: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
5660: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
5670: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  or) );.      mem
5680: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
5690: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
56a0: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
56b0: 20 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f   .    switch( pO
56c0: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a  p->opcode ){../*
56d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5700: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5710: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20  ************.** 
5720: 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20  What follows is 
5730: 61 20 6d 61 73 73 69 76 65 20 73 77 69 74 63 68  a massive switch
5740: 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65   statement where
5750: 20 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65   each case imple
5760: 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72  ments a.** separ
5770: 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ate instruction 
5780: 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d  in the virtual m
5790: 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66  achine.  If we f
57a0: 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a  ollow the usual.
57b0: 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63  ** indentation c
57c0: 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68  onventions, each
57d0: 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20   case should be 
57e0: 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73 70  indented by 6 sp
57f0: 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68  aces.  But.** th
5800: 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77  at is a lot of w
5810: 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74  asted space on t
5820: 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20  he left margin. 
5830: 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74   So the code wit
5840: 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63  hin.** the switc
5850: 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c  h statement will
5860: 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76   break with conv
5870: 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c  ention and be fl
5880: 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65  ush-left. Anothe
5890: 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74  r.** big comment
58a0: 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69   (similar to thi
58b0: 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b  s one) will mark
58c0: 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68   the point in th
58d0: 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20  e code where.** 
58e0: 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61  we transition ba
58f0: 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64  ck to normal ind
5900: 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
5910: 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f  The formatting o
5920: 66 20 65 61 63 68 20 63 61 73 65 20 69 73 20 69  f each case is i
5930: 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d  mportant.  The m
5940: 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69  akefile for SQLi
5950: 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20  te.** generates 
5960: 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63  two C files "opc
5970: 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63  odes.h" and "opc
5980: 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e  odes.c" by scann
5990: 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65  ing this.** file
59a0: 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e   looking for lin
59b0: 65 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69  es that begin wi
59c0: 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20  th "case OP_".  
59d0: 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69  The opcodes.h fi
59e0: 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66  les.** will be f
59f0: 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66 69  illed with #defi
5a00: 6e 65 73 20 74 68 61 74 20 67 69 76 65 20 75 6e  nes that give un
5a10: 69 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c  ique integer val
5a20: 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f  ues to each.** o
5a30: 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70  pcode and the op
5a40: 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20  codes.c file is 
5a50: 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61  filled with an a
5a60: 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20  rray of strings 
5a70: 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74  where.** each st
5a80: 72 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62  ring is the symb
5a90: 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68  olic name for th
5aa0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
5ab0: 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a  opcode.  If the.
5ac0: 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e  ** case statemen
5ad0: 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79  t is followed by
5ae0: 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68   a comment of th
5af0: 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20  e form "/# same 
5b00: 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68  as ... #/".** th
5b10: 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73  at comment is us
5b20: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
5b30: 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76  the particular v
5b40: 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f  alue of the opco
5b50: 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20  de..**.** Other 
5b60: 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20  keywords in the 
5b70: 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c  comment that fol
5b80: 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65 20 61  lows each case a
5b90: 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f  re used to.** co
5ba0: 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c  nstruct the OPFL
5bb0: 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61  G_INITIALIZER va
5bc0: 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c  lue that initial
5bd0: 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65  izes opcodePrope
5be0: 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72  rty[]..** Keywor
5bf0: 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c  ds include: in1,
5c00: 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f   in2, in3, out2_
5c10: 70 72 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32  prerelease, out2
5c20: 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20  , out3.  See.** 
5c30: 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77  the mkopcodeh.aw
5c40: 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61 64 64  k script for add
5c50: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
5c60: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d  ion..**.** Docum
5c70: 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56  entation about V
5c80: 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67  DBE opcodes is g
5c90: 65 6e 65 72 61 74 65 64 20 62 79 20 73 63 61 6e  enerated by scan
5ca0: 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a  ning this file.*
5cb0: 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74  * for lines of t
5cc0: 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63  hat contain "Opc
5cd0: 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e  ode:".  That lin
5ce0: 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71  e and all subseq
5cf0: 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20  uent.** comment 
5d00: 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64 20 69  lines are used i
5d10: 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
5d20: 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68   of the opcode.h
5d30: 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  tml documentatio
5d40: 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  n.** file..**.**
5d50: 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20   SUMMARY:.**.** 
5d60: 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69      Formatting i
5d70: 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73  s important to s
5d80: 63 72 69 70 74 73 20 74 68 61 74 20 73 63 61 6e  cripts that scan
5d90: 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20   this file..**  
5da0: 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74     Do not deviat
5db0: 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61  e from the forma
5dc0: 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72  tting style curr
5dd0: 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a  ently in use..**
5de0: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
5df0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e10: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
5e30: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74  ./* Opcode:  Got
5e40: 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a  o * P2 * * *.**.
5e50: 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f  ** An unconditio
5e60: 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  nal jump to addr
5e70: 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e  ess P2..** The n
5e80: 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
5e90: 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65  executed will be
5ea0: 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20   .** the one at 
5eb0: 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68  index P2 from th
5ec0: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a  e beginning of.*
5ed0: 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  * the program..*
5ee0: 2a 0a 2a 2a 20 54 68 65 20 50 31 20 70 61 72 61  *.** The P1 para
5ef0: 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 61 63 74  meter is not act
5f00: 75 61 6c 6c 79 20 75 73 65 64 20 62 79 20 74 68  ually used by th
5f10: 69 73 20 6f 70 63 6f 64 65 2e 20 20 48 6f 77 65  is opcode.  Howe
5f20: 76 65 72 2c 20 69 74 0a 2a 2a 20 69 73 20 73 6f  ver, it.** is so
5f30: 6d 65 74 69 6d 65 73 20 73 65 74 20 74 6f 20 31  metimes set to 1
5f40: 20 69 6e 73 74 65 61 64 20 6f 66 20 30 20 61 73   instead of 0 as
5f50: 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63   a hint to the c
5f60: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c  ommand-line shel
5f70: 6c 0a 2a 2a 20 74 68 61 74 20 74 68 69 73 20 47  l.** that this G
5f80: 6f 74 6f 20 69 73 20 74 68 65 20 62 6f 74 74 6f  oto is the botto
5f90: 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 61 6e 64 20  m of a loop and 
5fa0: 74 68 61 74 20 74 68 65 20 6c 69 6e 65 73 20 66  that the lines f
5fb0: 72 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a 20 74  rom P2 down.** t
5fc0: 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c 69  o the current li
5fd0: 6e 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64  ne should be ind
5fe0: 65 6e 74 65 64 20 66 6f 72 20 45 58 50 4c 41 49  ented for EXPLAI
5ff0: 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73  N output..*/.cas
6000: 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20  e OP_Goto: {    
6010: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
6020: 20 2a 2f 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e   */.  pc = pOp->
6030: 70 32 20 2d 20 31 3b 0a 0a 20 20 2f 2a 20 4f 70  p2 - 1;..  /* Op
6040: 63 6f 64 65 73 20 74 68 61 74 20 61 72 65 20 75  codes that are u
6050: 73 65 64 20 61 73 20 74 68 65 20 62 6f 74 74 6f  sed as the botto
6060: 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f  m of a loop (OP_
6070: 4e 65 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20  Next, OP_Prev,. 
6080: 20 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 4f 50   ** OP_VNext, OP
6090: 5f 52 6f 77 53 65 74 4e 65 78 74 2c 20 6f 72 20  _RowSetNext, or 
60a0: 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61  OP_SorterNext) a
60b0: 6c 6c 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f  ll jump here upo
60c0: 6e 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f  n.  ** completio
60d0: 6e 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65  n.  Check to see
60e0: 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65   if sqlite3_inte
60f0: 72 72 75 70 74 28 29 20 68 61 73 20 62 65 65 6e  rrupt() has been
6100: 20 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20   called.  ** or 
6110: 69 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  if the progress 
6120: 63 61 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74  callback needs t
6130: 6f 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20  o be invoked. . 
6140: 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f   **.  ** This co
6150: 64 65 20 75 73 65 73 20 75 6e 73 74 72 75 63 74  de uses unstruct
6160: 75 72 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74  ured "goto" stat
6170: 65 6d 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20  ements and does 
6180: 6e 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a  not look clean..
6190: 20 20 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73    ** But that is
61a0: 20 6e 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70   not due to slop
61b0: 70 79 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73  py coding habits
61c0: 2e 20 54 68 65 20 63 6f 64 65 20 69 73 20 77 72  . The code is wr
61d0: 69 74 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20  itten this.  ** 
61e0: 77 61 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61  way for performa
61f0: 6e 63 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61  nce, to avoid ha
6200: 76 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20  ving to run the 
6210: 69 6e 74 65 72 72 75 70 74 20 61 6e 64 20 70 72  interrupt and pr
6220: 6f 67 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63  ogress.  ** chec
6230: 6b 73 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f  ks on every opco
6240: 64 65 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20  de.  This helps 
6250: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74  sqlite3_step() t
6260: 6f 20 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25  o run about 1.5%
6270: 0a 20 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63  .  ** faster acc
6280: 6f 72 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72  ording to "valgr
6290: 69 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65  ind --tool=cache
62a0: 67 72 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f  grind" */.check_
62b0: 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20  for_interrupt:. 
62c0: 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e   if( db->u1.isIn
62d0: 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f  terrupted ) goto
62e0: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e   abort_due_to_in
62f0: 74 65 72 72 75 70 74 3b 0a 23 69 66 6e 64 65 66  terrupt;.#ifndef
6300: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
6310: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
6320: 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f   /* Call the pro
6330: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69  gress callback i
6340: 66 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72  f it is configur
6350: 65 64 20 61 6e 64 20 74 68 65 20 72 65 71 75 69  ed and the requi
6360: 72 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20  red number.  ** 
6370: 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65  of VDBE ops have
6380: 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28   been executed (
6390: 65 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69  either since thi
63a0: 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a  s invocation of.
63b0: 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
63c0: 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20  Exec() or since 
63d0: 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72  last time the pr
63e0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
63f0: 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a  was called)..  *
6400: 2a 20 49 66 20 74 68 65 20 70 72 6f 67 72 65 73  * If the progres
6410: 73 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72  s callback retur
6420: 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69  ns non-zero, exi
6430: 74 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61  t the virtual ma
6440: 63 68 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20  chine with.  ** 
6450: 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51  a return code SQ
6460: 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f  LITE_ABORT..  */
6470: 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67  .  if( db->xProg
6480: 72 65 73 73 21 3d 30 20 26 26 20 6e 56 6d 53 74  ress!=0 && nVmSt
6490: 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d  ep>=nProgressLim
64a0: 69 74 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  it ){.    assert
64b0: 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  ( db->nProgressO
64c0: 70 73 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72  ps!=0 );.    nPr
64d0: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56  ogressLimit = nV
64e0: 6d 53 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f  mStep + db->nPro
64f0: 67 72 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53  gressOps - (nVmS
6500: 74 65 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73  tep%db->nProgres
6510: 73 4f 70 73 29 3b 0a 20 20 20 20 69 66 28 20 64  sOps);.    if( d
6520: 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d  b->xProgress(db-
6530: 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 20 29  >pProgressArg) )
6540: 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
6550: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  ITE_INTERRUPT;. 
6560: 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65       goto vdbe_e
6570: 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20 20 7d  rror_halt;.    }
6580: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20  .  }.#endif.  . 
6590: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
65a0: 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50 31 20  code:  Gosub P1 
65b0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
65c0: 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  rite the current
65d0: 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20 72 65   address onto re
65e0: 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e 64  gister P1.** and
65f0: 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61 64   then jump to ad
6600: 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61 73  dress P2..*/.cas
6610: 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20 20  e OP_Gosub: {   
6620: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
6630: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
6640: 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
6650: 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p1<=(p->nMem-p->
6660: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 49  nCursor) );.  pI
6670: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
6680: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56  p1];.  assert( V
6690: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49  dbeMemDynamic(pI
66a0: 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41  n1)==0 );.  memA
66b0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
66c0: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  pIn1);.  pIn1->f
66d0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
66e0: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63    pIn1->u.i = pc
66f0: 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
6700: 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31  CE(pOp->p1, pIn1
6710: 29 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  );.  pc = pOp->p
6720: 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  2 - 1;.  break;.
6730: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52  }../* Opcode:  R
6740: 65 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a  eturn P1 * * * *
6750: 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74  .**.** Jump to t
6760: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
6770: 69 6f 6e 20 61 66 74 65 72 20 74 68 65 20 61 64  ion after the ad
6780: 64 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65  dress in registe
6790: 72 20 50 31 2e 20 20 41 66 74 65 72 0a 2a 2a 20  r P1.  After.** 
67a0: 74 68 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74  the jump, regist
67b0: 65 72 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e  er P1 becomes un
67c0: 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65  defined..*/.case
67d0: 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20   OP_Return: {   
67e0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
67f0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
6800: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
6810: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
6820: 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70  ==MEM_Int );.  p
6830: 63 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75  c = (int)pIn1->u
6840: 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67  .i;.  pIn1->flag
6850: 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s = MEM_Undefine
6860: 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  d;.  break;.}../
6870: 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74 43 6f  * Opcode: InitCo
6880: 72 6f 75 74 69 6e 65 20 50 31 20 50 32 20 50 33  routine P1 P2 P3
6890: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75   * *.**.** Set u
68a0: 70 20 72 65 67 69 73 74 65 72 20 50 31 20 73 6f  p register P1 so
68b0: 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 59 69   that it will Yi
68c0: 65 6c 64 20 74 6f 20 74 68 65 20 63 6f 72 6f 75  eld to the corou
68d0: 74 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65 64 20  tine.** located 
68e0: 61 74 20 61 64 64 72 65 73 73 20 50 33 2e 0a 2a  at address P3..*
68f0: 2a 0a 2a 2a 20 49 66 20 50 32 21 3d 30 20 74 68  *.** If P2!=0 th
6900: 65 6e 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65  en the coroutine
6910: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
6920: 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  immediately foll
6930: 6f 77 73 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f  ows.** this opco
6940: 64 65 2e 20 20 53 6f 20 6a 75 6d 70 20 6f 76 65  de.  So jump ove
6950: 72 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20  r the coroutine 
6960: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
6970: 6f 0a 2a 2a 20 61 64 64 72 65 73 73 20 50 32 2e  o.** address P2.
6980: 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
6990: 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f   EndCoroutine.*/
69a0: 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74 43 6f 72  .case OP_InitCor
69b0: 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 2f 2a  outine: {     /*
69c0: 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72   jump */.  asser
69d0: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
69e0: 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d   pOp->p1<=(p->nM
69f0: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
6a00: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
6a10: 3e 70 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p2>=0 && pOp->p
6a20: 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61 73  2<p->nOp );.  as
6a30: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30  sert( pOp->p3>=0
6a40: 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e   && pOp->p3<p->n
6a50: 4f 70 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  Op );.  pOut = &
6a60: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
6a70: 20 61 73 73 65 72 74 28 20 21 56 64 62 65 4d 65   assert( !VdbeMe
6a80: 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29  mDynamic(pOut) )
6a90: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
6aa0: 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 70  pOp->p3 - 1;.  p
6ab0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
6ac0: 5f 49 6e 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d  _Int;.  if( pOp-
6ad0: 3e 70 32 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  >p2 ) pc = pOp->
6ae0: 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b  p2 - 1;.  break;
6af0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6b00: 45 6e 64 43 6f 72 6f 75 74 69 6e 65 20 50 31 20  EndCoroutine P1 
6b10: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  * * * *.**.** Th
6b20: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74  e instruction at
6b30: 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20   the address in 
6b40: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 61  register P1 is a
6b50: 20 59 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20   Yield..** Jump 
6b60: 74 6f 20 74 68 65 20 50 32 20 70 61 72 61 6d 65  to the P2 parame
6b70: 74 65 72 20 6f 66 20 74 68 61 74 20 59 69 65 6c  ter of that Yiel
6b80: 64 2e 0a 2a 2a 20 41 66 74 65 72 20 74 68 65 20  d..** After the 
6b90: 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50  jump, register P
6ba0: 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69  1 becomes undefi
6bb0: 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ned..**.** See a
6bc0: 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69  lso: InitCorouti
6bd0: 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e  ne.*/.case OP_En
6be0: 64 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20  dCoroutine: {   
6bf0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
6c00: 2f 0a 20 20 56 64 62 65 4f 70 20 2a 70 43 61 6c  /.  VdbeOp *pCal
6c10: 6c 65 72 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  ler;.  pIn1 = &a
6c20: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6c30: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
6c40: 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
6c50: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
6c60: 75 2e 69 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e  u.i>=0 && pIn1->
6c70: 75 2e 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  u.i<p->nOp );.  
6c80: 70 43 61 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70  pCaller = &aOp[p
6c90: 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73  In1->u.i];.  ass
6ca0: 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70  ert( pCaller->op
6cb0: 63 6f 64 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29  code==OP_Yield )
6cc0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61 6c  ;.  assert( pCal
6cd0: 6c 65 72 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43  ler->p2>=0 && pC
6ce0: 61 6c 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  aller->p2<p->nOp
6cf0: 20 29 3b 0a 20 20 70 63 20 3d 20 70 43 61 6c 6c   );.  pc = pCall
6d00: 65 72 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 70 49  er->p2 - 1;.  pI
6d10: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
6d20: 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65  Undefined;.  bre
6d30: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6d40: 3a 20 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a  :  Yield P1 P2 *
6d50: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20   * *.**.** Swap 
6d60: 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e  the program coun
6d70: 74 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c  ter with the val
6d80: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
6d90: 31 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20  1.  This.** has 
6da0: 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 79 69  the effect of yi
6db0: 65 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f  elding to a coro
6dc0: 75 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  utine..**.** If 
6dd0: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68  the coroutine th
6de0: 61 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62  at is launched b
6df0: 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  y this instructi
6e00: 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20  on ends with.** 
6e10: 59 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20  Yield or Return 
6e20: 74 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f  then continue to
6e30: 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
6e40: 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a  ction.  But if.*
6e50: 2a 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20  * the coroutine 
6e60: 6c 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73  launched by this
6e70: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64   instruction end
6e80: 73 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72  s with.** EndCor
6e90: 6f 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d  outine, then jum
6ea0: 70 20 74 6f 20 50 32 20 72 61 74 68 65 72 20 74  p to P2 rather t
6eb0: 68 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77  han continuing w
6ec0: 69 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20  ith the.** next 
6ed0: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
6ee0: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69  ** See also: Ini
6ef0: 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61  tCoroutine.*/.ca
6f00: 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20  se OP_Yield: {  
6f10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
6f20: 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20  , jump */.  int 
6f30: 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d  pcDest;.  pIn1 =
6f40: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
6f50: 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d  .  assert( VdbeM
6f60: 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d  emDynamic(pIn1)=
6f70: 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  =0 );.  pIn1->fl
6f80: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
6f90: 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70   pcDest = (int)p
6fa0: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31  In1->u.i;.  pIn1
6fb0: 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45  ->u.i = pc;.  RE
6fc0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
6fd0: 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ->p1, pIn1);.  p
6fe0: 63 20 3d 20 70 63 44 65 73 74 3b 0a 20 20 62 72  c = pcDest;.  br
6ff0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7000: 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20  e:  HaltIfNull  
7010: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
7020: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20  * Synopsis:  if 
7030: 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c 74 0a  r[P3]=null halt.
7040: 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20  **.** Check the 
7050: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
7060: 72 20 50 33 2e 20 20 49 66 20 69 74 20 69 73 20  r P3.  If it is 
7070: 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20 75  NULL then Halt u
7080: 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65  sing.** paramete
7090: 72 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 34  r P1, P2, and P4
70a0: 20 61 73 20 69 66 20 74 68 69 73 20 77 65 72 65   as if this were
70b0: 20 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63 74   a Halt instruct
70c0: 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  ion.  If the.** 
70d0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
70e0: 72 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  r P3 is not NULL
70f0: 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74  , then this rout
7100: 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a  ine is a no-op..
7110: 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d 65  ** The P5 parame
7120: 74 65 72 20 73 68 6f 75 6c 64 20 62 65 20 31 2e  ter should be 1.
7130: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74  .*/.case OP_Halt
7140: 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f  IfNull: {      /
7150: 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20  * in3 */.  pIn3 
7160: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
7170: 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66  ;.  if( (pIn3->f
7180: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
7190: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f  ==0 ) break;.  /
71a0: 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  * Fall through i
71b0: 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d  nto OP_Halt */.}
71c0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61  ../* Opcode:  Ha
71d0: 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20 50 35  lt P1 P2 * P4 P5
71e0: 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65  .**.** Exit imme
71f0: 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70  diately.  All op
7200: 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20  en cursors, etc 
7210: 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75  are closed.** au
7220: 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a  tomatically..**.
7230: 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72 65 73  ** P1 is the res
7240: 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65  ult code returne
7250: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65  d by sqlite3_exe
7260: 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73  c(), sqlite3_res
7270: 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69  et(),.** or sqli
7280: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20  te3_finalize(). 
7290: 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61   For a normal ha
72a0: 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20  lt, this should 
72b0: 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29  be SQLITE_OK (0)
72c0: 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c  ..** For errors,
72d0: 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20   it can be some 
72e0: 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66  other value.  If
72f0: 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77   P1!=0 then P2 w
7300: 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a  ill determine.**
7310: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
7320: 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  to rollback the 
7330: 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
7340: 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c  ion.  Do not rol
7350: 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d  lback.** if P2==
7360: 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20  OE_Fail. Do the 
7370: 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d  rollback if P2==
7380: 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66  OE_Rollback.  If
7390: 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a   P2==OE_Abort,.*
73a0: 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20  * then back out 
73b0: 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74  all changes that
73c0: 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20 64   have occurred d
73d0: 75 72 69 6e 67 20 74 68 69 73 20 65 78 65 63 75  uring this execu
73e0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56  tion of the.** V
73f0: 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20  DBE, but do not 
7400: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
7410: 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a  nsaction. .**.**
7420: 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75   If P4 is not nu
7430: 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e  ll then it is an
7440: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   error message s
7450: 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35 20  tring..**.** P5 
7460: 69 73 20 61 20 76 61 6c 75 65 20 62 65 74 77 65  is a value betwe
7470: 65 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e 63 6c  en 0 and 4, incl
7480: 75 73 69 76 65 2c 20 74 68 61 74 20 6d 6f 64 69  usive, that modi
7490: 66 69 65 73 20 74 68 65 20 50 34 20 73 74 72 69  fies the P4 stri
74a0: 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a 20  ng..**.**    0: 
74b0: 20 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a 2a 20   (no change).** 
74c0: 20 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c 20     1:  NOT NULL 
74d0: 63 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c 65 64  contraint failed
74e0: 3a 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20 20 55  : P4.**    2:  U
74f0: 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
7500: 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20   failed: P4.**  
7510: 20 20 33 3a 20 20 43 48 45 43 4b 20 63 6f 6e 73    3:  CHECK cons
7520: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
7530: 34 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f 52 45  4.**    4:  FORE
7540: 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69  IGN KEY constrai
7550: 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a  nt failed: P4.**
7560: 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74  .** If P5 is not
7570: 20 7a 65 72 6f 20 61 6e 64 20 50 34 20 69 73 20   zero and P4 is 
7580: 4e 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65 72 79  NULL, then every
7590: 74 68 69 6e 67 20 61 66 74 65 72 20 74 68 65 20  thing after the 
75a0: 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74 74 65  ":" is.** omitte
75b0: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69  d..**.** There i
75c0: 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61  s an implied "Ha
75d0: 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74 72 75  lt 0 0 0" instru
75e0: 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61  ction inserted a
75f0: 74 20 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f  t the very end o
7600: 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72  f.** every progr
7610: 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70  am.  So a jump p
7620: 61 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73  ast the last ins
7630: 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20  truction of the 
7640: 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68  program.** is th
7650: 65 20 73 61 6d 65 20 61 73 20 65 78 65 63 75 74  e same as execut
7660: 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73  ing Halt..*/.cas
7670: 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 63  e OP_Halt: {.  c
7680: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65  onst char *zType
7690: 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
76a0: 7a 4c 6f 67 46 6d 74 3b 0a 0a 20 20 69 66 28 20  zLogFmt;..  if( 
76b0: 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f  pOp->p1==SQLITE_
76c0: 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20  OK && p->pFrame 
76d0: 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74  ){.    /* Halt t
76e0: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20  he sub-program. 
76f0: 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74  Return control t
7700: 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61  o the parent fra
7710: 6d 65 2e 20 2a 2f 0a 20 20 20 20 56 64 62 65 46  me. */.    VdbeF
7720: 72 61 6d 65 20 2a 70 46 72 61 6d 65 20 3d 20 70  rame *pFrame = p
7730: 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d  ->pFrame;.    p-
7740: 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  >pFrame = pFrame
7750: 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70  ->pParent;.    p
7760: 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20  ->nFrame--;.    
7770: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
7780: 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68  anges(db, p->nCh
7790: 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 20 3d 20  ange);.    pc = 
77a0: 73 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65  sqlite3VdbeFrame
77b0: 52 65 73 74 6f 72 65 28 70 46 72 61 6d 65 29 3b  Restore(pFrame);
77c0: 0a 20 20 20 20 6c 61 73 74 52 6f 77 69 64 20 3d  .    lastRowid =
77d0: 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   db->lastRowid;.
77e0: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
77f0: 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20  =OE_Ignore ){.  
7800: 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63 74 69      /* Instructi
7810: 6f 6e 20 70 63 20 69 73 20 74 68 65 20 4f 50 5f  on pc is the OP_
7820: 50 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76  Program that inv
7830: 6f 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f  oked the sub-pro
7840: 67 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63  gram .      ** c
7850: 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68  urrently being h
7860: 61 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70 32  alted. If the p2
7870: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20   instruction of 
7880: 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20  this OP_Halt.   
7890: 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f     ** instructio
78a0: 6e 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49  n is set to OE_I
78b0: 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20  gnore, then the 
78c0: 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74  sub-program is t
78d0: 68 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a  hrowing.      **
78e0: 20 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70   an IGNORE excep
78f0: 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61  tion. In this ca
7900: 73 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61  se jump to the a
7910: 64 64 72 65 73 73 20 73 70 65 63 69 66 69 65 64  ddress specified
7920: 0a 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65  .      ** as the
7930: 20 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69   p2 of the calli
7940: 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20  ng OP_Program.  
7950: 2a 2f 0a 20 20 20 20 20 20 70 63 20 3d 20 70 2d  */.      pc = p-
7960: 3e 61 4f 70 5b 70 63 5d 2e 70 32 2d 31 3b 0a 20  >aOp[pc].p2-1;. 
7970: 20 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70     }.    aOp = p
7980: 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20  ->aOp;.    aMem 
7990: 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 62  = p->aMem;.    b
79a0: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72  reak;.  }.  p->r
79b0: 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  c = pOp->p1;.  p
79c0: 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
79d0: 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  (u8)pOp->p2;.  p
79e0: 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 69 66 28  ->pc = pc;.  if(
79f0: 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69 66   p->rc ){.    if
7a00: 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20  ( pOp->p5 ){.   
7a10: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
7a20: 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54  char * const azT
7a30: 79 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e  ype[] = { "NOT N
7a40: 55 4c 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c 20  ULL", "UNIQUE", 
7a50: 22 43 48 45 43 4b 22 2c 0a 20 20 20 20 20 20 20  "CHECK",.       
7a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a80: 20 20 20 20 20 20 22 46 4f 52 45 49 47 4e 20 4b        "FOREIGN K
7a90: 45 59 22 20 7d 3b 0a 20 20 20 20 20 20 61 73 73  EY" };.      ass
7aa0: 65 72 74 28 20 70 4f 70 2d 3e 70 35 3e 3d 31 20  ert( pOp->p5>=1 
7ab0: 26 26 20 70 4f 70 2d 3e 70 35 3c 3d 34 20 29 3b  && pOp->p5<=4 );
7ac0: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
7ad0: 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20   pOp->p5==1 );. 
7ae0: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
7af0: 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20  Op->p5==2 );.   
7b00: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70     testcase( pOp
7b10: 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20  ->p5==3 );.     
7b20: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
7b30: 70 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20 20 7a  p5==4 );.      z
7b40: 54 79 70 65 20 3d 20 61 7a 54 79 70 65 5b 70 4f  Type = azType[pO
7b50: 70 2d 3e 70 35 2d 31 5d 3b 0a 20 20 20 20 7d 65  p->p5-1];.    }e
7b60: 6c 73 65 7b 0a 20 20 20 20 20 20 7a 54 79 70 65  lse{.      zType
7b70: 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 0;.    }.    
7b80: 61 73 73 65 72 74 28 20 7a 54 79 70 65 21 3d 30  assert( zType!=0
7b90: 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30   || pOp->p4.z!=0
7ba0: 20 29 3b 0a 20 20 20 20 7a 4c 6f 67 46 6d 74 20   );.    zLogFmt 
7bb0: 3d 20 22 61 62 6f 72 74 20 61 74 20 25 64 20 69  = "abort at %d i
7bc0: 6e 20 5b 25 73 5d 3a 20 25 73 22 3b 0a 20 20 20  n [%s]: %s";.   
7bd0: 20 69 66 28 20 7a 54 79 70 65 20 26 26 20 70 4f   if( zType && pO
7be0: 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20  p->p4.z ){.     
7bf0: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
7c00: 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
7c10: 62 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e  b, "%s constrain
7c20: 74 20 66 61 69 6c 65 64 3a 20 25 73 22 2c 20 0a  t failed: %s", .
7c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c40: 20 20 20 20 20 20 20 7a 54 79 70 65 2c 20 70 4f         zType, pO
7c50: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 65  p->p4.z);.    }e
7c60: 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e  lse if( pOp->p4.
7c70: 7a 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  z ){.      sqlit
7c80: 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
7c90: 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
7ca0: 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  ", pOp->p4.z);. 
7cb0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
7cc0: 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
7cd0: 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
7ce0: 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74  , "%s constraint
7cf0: 20 66 61 69 6c 65 64 22 2c 20 7a 54 79 70 65 29   failed", zType)
7d00: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
7d10: 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c  te3_log(pOp->p1,
7d20: 20 7a 4c 6f 67 46 6d 74 2c 20 70 63 2c 20 70 2d   zLogFmt, pc, p-
7d30: 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73  >zSql, p->zErrMs
7d40: 67 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  g);.  }.  rc = s
7d50: 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
7d60: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d  );.  assert( rc=
7d70: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20  =SQLITE_BUSY || 
7d80: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
7d90: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f   rc==SQLITE_ERRO
7da0: 52 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  R );.  if( rc==S
7db0: 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
7dc0: 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
7dd0: 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65  QLITE_BUSY;.  }e
7de0: 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
7df0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
7e00: 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d  | (p->rc&0xff)==
7e10: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
7e20: 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  T );.    assert(
7e30: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
7e40: 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  | db->nDeferredC
7e50: 6f 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65  ons>0 || db->nDe
7e60: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20  ferredImmCons>0 
7e70: 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72  );.    rc = p->r
7e80: 63 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c ? SQLITE_ERROR
7e90: 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a   : SQLITE_DONE;.
7ea0: 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f    }.  goto vdbe_
7eb0: 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70  return;.}../* Op
7ec0: 63 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31  code: Integer P1
7ed0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
7ee0: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a  opsis: r[P2]=P1.
7ef0: 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74  **.** The 32-bit
7f00: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50   integer value P
7f10: 31 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74  1 is written int
7f20: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
7f30: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65  /.case OP_Intege
7f40: 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  r: {         /* 
7f50: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
7f60: 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  */.  pOut->u.i =
7f70: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61   pOp->p1;.  brea
7f80: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7f90: 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34   Int64 * P2 * P4
7fa0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
7fb0: 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50  r[P2]=P4.**.** P
7fc0: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
7fd0: 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  o a 64-bit integ
7fe0: 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69  er value..** Wri
7ff0: 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  te that value in
8000: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
8010: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34  */.case OP_Int64
8020: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
8030: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
8040: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
8050: 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b  p->p4.pI64!=0 );
8060: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a  .  pOut->u.i = *
8070: 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20  pOp->p4.pI64;.  
8080: 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
8090: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
80a0: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20  OATING_POINT./* 
80b0: 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50  Opcode: Real * P
80c0: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
80d0: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a  psis: r[P2]=P4.*
80e0: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
80f0: 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74  nter to a 64-bit
8100: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
8110: 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20  value..** Write 
8120: 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20  that value into 
8130: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
8140: 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20  case OP_Real: { 
8150: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
8160: 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20  me as TK_FLOAT, 
8170: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
8180: 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  */.  pOut->flags
8190: 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61   = MEM_Real;.  a
81a0: 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 49  ssert( !sqlite3I
81b0: 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52  sNaN(*pOp->p4.pR
81c0: 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  eal) );.  pOut->
81d0: 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70  u.r = *pOp->p4.p
81e0: 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Real;.  break;.}
81f0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
8200: 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32  de: String8 * P2
8210: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
8220: 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 0a  sis: r[P2]='P4'.
8230: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
8240: 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61  to a nul termina
8250: 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ted UTF-8 string
8260: 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  . This opcode is
8270: 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a   transformed .**
8280: 20 69 6e 74 6f 20 61 20 53 74 72 69 6e 67 20 62   into a String b
8290: 65 66 6f 72 65 20 69 74 20 69 73 20 65 78 65 63  efore it is exec
82a0: 75 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 72  uted for the fir
82b0: 73 74 20 74 69 6d 65 2e 20 20 44 75 72 69 6e 67  st time.  During
82c0: 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e 73 66 6f  .** this transfo
82d0: 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 6c 65 6e  rmation, the len
82e0: 67 74 68 20 6f 66 20 73 74 72 69 6e 67 20 50 34  gth of string P4
82f0: 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61 6e 64   is computed and
8300: 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73 20 74 68   stored.** as th
8310: 65 20 50 31 20 70 61 72 61 6d 65 74 65 72 2e 0a  e P1 parameter..
8320: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e  */.case OP_Strin
8330: 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  g8: {         /*
8340: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 52 49   same as TK_STRI
8350: 4e 47 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65  NG, out2-prerele
8360: 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
8370: 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b   pOp->p4.z!=0 );
8380: 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d  .  pOp->opcode =
8390: 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f   OP_String;.  pO
83a0: 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53  p->p1 = sqlite3S
83b0: 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e  trlen30(pOp->p4.
83c0: 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  z);..#ifndef SQL
83d0: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
83e0: 20 69 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53   if( encoding!=S
83f0: 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20  QLITE_UTF8 ){.  
8400: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
8410: 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74  beMemSetStr(pOut
8420: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c  , pOp->p4.z, -1,
8430: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
8440: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
8450: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
8460: 5f 54 4f 4f 42 49 47 20 29 20 67 6f 74 6f 20 74  _TOOBIG ) goto t
8470: 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 69 66 28 20  oo_big;.    if( 
8480: 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74  SQLITE_OK!=sqlit
8490: 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
84a0: 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64  ding(pOut, encod
84b0: 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  ing) ) goto no_m
84c0: 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  em;.    assert( 
84d0: 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30  pOut->szMalloc>0
84e0: 20 26 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f   && pOut->zMallo
84f0: 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20  c==pOut->z );.  
8500: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
8510: 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d  mDynamic(pOut)==
8520: 30 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 73  0 );.    pOut->s
8530: 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20  zMalloc = 0;.   
8540: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
8550: 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20  MEM_Static;.    
8560: 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
8570: 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20  =P4_DYNAMIC ){. 
8580: 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
8590: 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a  ee(db, pOp->p4.z
85a0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70  );.    }.    pOp
85b0: 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59  ->p4type = P4_DY
85c0: 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e  NAMIC;.    pOp->
85d0: 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a  p4.z = pOut->z;.
85e0: 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f      pOp->p1 = pO
85f0: 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69  ut->n;.  }.#endi
8600: 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e  f.  if( pOp->p1>
8610: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
8620: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
8630: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
8640: 62 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61  big;.  }.  /* Fa
8650: 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
8660: 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f  e next case, OP_
8670: 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f  String */.}.  ./
8680: 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67  * Opcode: String
8690: 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
86a0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
86b0: 3d 27 50 34 27 20 28 6c 65 6e 3d 50 31 29 0a 2a  ='P4' (len=P1).*
86c0: 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20  *.** The string 
86d0: 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67  value P4 of leng
86e0: 74 68 20 50 31 20 28 62 79 74 65 73 29 20 69 73  th P1 (bytes) is
86f0: 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
8700: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
8710: 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20  OP_String: {    
8720: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
8730: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73  erelease */.  as
8740: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21  sert( pOp->p4.z!
8750: 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  =0 );.  pOut->fl
8760: 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45  ags = MEM_Str|ME
8770: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72  M_Static|MEM_Ter
8780: 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70  m;.  pOut->z = p
8790: 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74  Op->p4.z;.  pOut
87a0: 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  ->n = pOp->p1;. 
87b0: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
87c0: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
87d0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
87e0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
87f0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20  /* Opcode: Null 
8800: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
8810: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32 2e  Synopsis:  r[P2.
8820: 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20  .P3]=NULL.**.** 
8830: 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74  Write a NULL int
8840: 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 20  o registers P2. 
8850: 20 49 66 20 50 33 20 67 72 65 61 74 65 72 20 74   If P3 greater t
8860: 68 61 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c 73  han P2, then als
8870: 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20  o write.** NULL 
8880: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
8890: 20 61 6e 64 20 65 76 65 72 79 20 72 65 67 69 73   and every regis
88a0: 74 65 72 20 69 6e 20 62 65 74 77 65 65 6e 20 50  ter in between P
88b0: 32 20 61 6e 64 20 50 33 2e 20 20 49 66 20 50 33  2 and P3.  If P3
88c0: 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
88d0: 20 50 32 20 28 74 79 70 69 63 61 6c 6c 79 20 50   P2 (typically P
88e0: 33 20 69 73 20 7a 65 72 6f 29 20 74 68 65 6e 20  3 is zero) then 
88f0: 6f 6e 6c 79 20 72 65 67 69 73 74 65 72 20 50 32  only register P2
8900: 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55   is.** set to NU
8910: 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  LL..**.** If the
8920: 20 50 31 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e   P1 value is non
8930: 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f  -zero, then also
8940: 20 73 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65   set the MEM_Cle
8950: 61 72 65 64 20 66 6c 61 67 20 73 6f 20 74 68 61  ared flag so tha
8960: 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73  t.** NULL values
8970: 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72   will not compar
8980: 65 20 65 71 75 61 6c 20 65 76 65 6e 20 69 66 20  e equal even if 
8990: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
89a0: 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65   set on.** OP_Ne
89b0: 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61   or OP_Eq..*/.ca
89c0: 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20  se OP_Null: {   
89d0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
89e0: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
89f0: 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36 20 6e  int cnt;.  u16 n
8a00: 75 6c 6c 46 6c 61 67 3b 0a 20 20 63 6e 74 20 3d  ullFlag;.  cnt =
8a10: 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32   pOp->p3-pOp->p2
8a20: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
8a30: 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
8a40: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
8a50: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c  Out->flags = nul
8a60: 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20  lFlag = pOp->p1 
8a70: 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f  ? (MEM_Null|MEM_
8a80: 43 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e  Cleared) : MEM_N
8a90: 75 6c 6c 3b 0a 20 20 77 68 69 6c 65 28 20 63 6e  ull;.  while( cn
8aa0: 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b  t>0 ){.    pOut+
8ab0: 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  +;.    memAboutT
8ac0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
8ad0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
8ae0: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
8af0: 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  );.    pOut->fla
8b00: 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20  gs = nullFlag;. 
8b10: 20 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20     cnt--;.  }.  
8b20: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
8b30: 6f 64 65 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31  ode: SoftNull P1
8b40: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f   * * * *.** Syno
8b50: 70 73 69 73 3a 20 20 72 5b 50 31 5d 3d 4e 55 4c  psis:  r[P1]=NUL
8b60: 4c 0a 2a 2a 0a 2a 2a 20 53 65 74 20 72 65 67 69  L.**.** Set regi
8b70: 73 74 65 72 20 50 31 20 74 6f 20 68 61 76 65 20  ster P1 to have 
8b80: 74 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 61  the value NULL a
8b90: 73 20 73 65 65 6e 20 62 79 20 74 68 65 20 4f 50  s seen by the OP
8ba0: 5f 4d 61 6b 65 52 65 63 6f 72 64 0a 2a 2a 20 69  _MakeRecord.** i
8bb0: 6e 73 74 72 75 63 74 69 6f 6e 2c 20 62 75 74 20  nstruction, but 
8bc0: 64 6f 20 6e 6f 74 20 66 72 65 65 20 61 6e 79 20  do not free any 
8bd0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
8be0: 65 6d 6f 72 79 20 61 73 73 6f 63 69 61 74 65 64  emory associated
8bf0: 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 72 65 67   with.** the reg
8c00: 69 73 74 65 72 2c 20 73 6f 20 74 68 61 74 20 69  ister, so that i
8c10: 66 20 74 68 65 20 76 61 6c 75 65 20 77 61 73 20  f the value was 
8c20: 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  a string or blob
8c30: 20 74 68 61 74 20 77 61 73 0a 2a 2a 20 70 72 65   that was.** pre
8c40: 76 69 6f 75 73 6c 79 20 63 6f 70 69 65 64 20 75  viously copied u
8c50: 73 69 6e 67 20 4f 50 5f 53 43 6f 70 79 2c 20 74  sing OP_SCopy, t
8c60: 68 65 20 63 6f 70 69 65 73 20 77 69 6c 6c 20 63  he copies will c
8c70: 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 76 61  ontinue to be va
8c80: 6c 69 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lid..*/.case OP_
8c90: 53 6f 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73  SoftNull: {.  as
8ca0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
8cb0: 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e  && pOp->p1<=(p->
8cc0: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
8cd0: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
8ce0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
8cf0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 28 70 4f  Out->flags = (pO
8d00: 75 74 2d 3e 66 6c 61 67 73 7c 4d 45 4d 5f 4e 75  ut->flags|MEM_Nu
8d10: 6c 6c 29 26 7e 4d 45 4d 5f 55 6e 64 65 66 69 6e  ll)&~MEM_Undefin
8d20: 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ed;.  break;.}..
8d30: 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20  /* Opcode: Blob 
8d40: 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
8d50: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
8d60: 50 34 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a  P4 (len=P1).**.*
8d70: 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61  * P4 points to a
8d80: 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31   blob of data P1
8d90: 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74   bytes long.  St
8da0: 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62  ore this.** blob
8db0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
8dc0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62  .*/.case OP_Blob
8dd0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
8de0: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
8df0: 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
8e00: 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51  t( pOp->p1 <= SQ
8e10: 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20  LITE_MAX_LENGTH 
8e20: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
8e30: 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20  MemSetStr(pOut, 
8e40: 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e  pOp->p4.z, pOp->
8e50: 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75  p1, 0, 0);.  pOu
8e60: 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
8e70: 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  g;.  UPDATE_MAX_
8e80: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
8e90: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
8ea0: 70 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65 20  pcode: Variable 
8eb0: 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
8ec0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
8ed0: 70 61 72 61 6d 65 74 65 72 28 50 31 2c 50 34 29  parameter(P1,P4)
8ee0: 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20  .**.** Transfer 
8ef0: 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62 6f  the values of bo
8f00: 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20 50 31  und parameter P1
8f10: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
8f20: 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70  2.**.** If the p
8f30: 61 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d 65  arameter is name
8f40: 64 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d 65  d, then its name
8f50: 20 61 70 70 65 61 72 73 20 69 6e 20 50 34 2e 0a   appears in P4..
8f60: 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20  ** The P4 value 
8f70: 69 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  is used by sqlit
8f80: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
8f90: 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73  r_name()..*/.cas
8fa0: 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b  e OP_Variable: {
8fb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
8fc0: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
8fd0: 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20  /.  Mem *pVar;  
8fe0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65       /* Value be
8ff0: 69 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64 20  ing transferred 
9000: 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  */..  assert( pO
9010: 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
9020: 70 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20  p1<=p->nVar );. 
9030: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
9040: 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34  .z==0 || pOp->p4
9050: 2e 7a 3d 3d 70 2d 3e 61 7a 56 61 72 5b 70 4f 70  .z==p->azVar[pOp
9060: 2d 3e 70 31 2d 31 5d 20 29 3b 0a 20 20 70 56 61  ->p1-1] );.  pVa
9070: 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70  r = &p->aVar[pOp
9080: 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28  ->p1 - 1];.  if(
9090: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
90a0: 6f 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20  ooBig(pVar) ){. 
90b0: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
90c0: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64  .  }.  sqlite3Vd
90d0: 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
90e0: 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d  (pOut, pVar, MEM
90f0: 5f 53 74 61 74 69 63 29 3b 0a 20 20 55 50 44 41  _Static);.  UPDA
9100: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
9110: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
9120: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f  }../* Opcode: Mo
9130: 76 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ve P1 P2 P3 * *.
9140: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
9150: 50 32 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d 0a  P2@P3]=r[P1@P3].
9160: 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 50  **.** Move the P
9170: 33 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  3 values in regi
9180: 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31  ster P1..P1+P3-1
9190: 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65   over into.** re
91a0: 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50  gisters P2..P2+P
91b0: 33 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73 20  3-1.  Registers 
91c0: 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 72 65 0a  P1..P1+P3-1 are.
91d0: 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20  ** left holding 
91e0: 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61  a NULL.  It is a
91f0: 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67 69  n error for regi
9200: 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50  ster ranges.** P
9210: 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20 50  1..P1+P3-1 and P
9220: 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76  2..P2+P3-1 to ov
9230: 65 72 6c 61 70 2e 20 20 49 74 20 69 73 20 61 6e  erlap.  It is an
9240: 20 65 72 72 6f 72 0a 2a 2a 20 66 6f 72 20 50 33   error.** for P3
9250: 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e   to be less than
9260: 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d   1..*/.case OP_M
9270: 6f 76 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 20  ove: {.  int n; 
9280: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
9290: 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
92a0: 20 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f   left to copy */
92b0: 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20  .  int p1;      
92c0: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
92d0: 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a  to copy from */.
92e0: 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20    int p2;       
92f0: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
9300: 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20  o copy to */..  
9310: 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70  n = pOp->p3;.  p
9320: 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  1 = pOp->p1;.  p
9330: 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  2 = pOp->p2;.  a
9340: 73 73 65 72 74 28 20 6e 3e 30 20 26 26 20 70 31  ssert( n>0 && p1
9350: 3e 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20 20  >0 && p2>0 );.  
9360: 61 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32  assert( p1+n<=p2
9370: 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a   || p2+n<=p1 );.
9380: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
9390: 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
93a0: 4d 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20  Mem[p2];.  do{. 
93b0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c     assert( pOut<
93c0: 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d  =&aMem[(p->nMem-
93d0: 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a  p->nCursor)] );.
93e0: 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31      assert( pIn1
93f0: 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d  <=&aMem[(p->nMem
9400: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b  -p->nCursor)] );
9410: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
9420: 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b  IsValid(pIn1) );
9430: 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
9440: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
9450: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
9460: 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e  emMove(pOut, pIn
9470: 31 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  1);.#ifdef SQLIT
9480: 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
9490: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
94a0: 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70  >=&aMem[p1] && p
94b0: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c  Out->pScopyFrom<
94c0: 26 61 4d 65 6d 5b 70 31 2b 70 4f 70 2d 3e 70 33  &aMem[p1+pOp->p3
94d0: 5d 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d  ] ){.      pOut-
94e0: 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20 70  >pScopyFrom += p
94f0: 31 20 2d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 20  1 - pOp->p2;.   
9500: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 52 45   }.#endif.    RE
9510: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b  GISTER_TRACE(p2+
9520: 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49  +, pOut);.    pI
9530: 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b  n1++;.    pOut++
9540: 3b 0a 20 20 7d 77 68 69 6c 65 28 20 2d 2d 6e 20  ;.  }while( --n 
9550: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
9560: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50  * Opcode: Copy P
9570: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
9580: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 40 50 33  ynopsis: r[P2@P3
9590: 2b 31 5d 3d 72 5b 50 31 40 50 33 2b 31 5d 0a 2a  +1]=r[P1@P3+1].*
95a0: 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79  *.** Make a copy
95b0: 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 50 31   of registers P1
95c0: 2e 2e 50 31 2b 50 33 20 69 6e 74 6f 20 72 65 67  ..P1+P3 into reg
95d0: 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33  isters P2..P2+P3
95e0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
95f0: 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61  truction makes a
9600: 20 64 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68   deep copy of th
9610: 65 20 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c  e value.  A dupl
9620: 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65  icate.** is made
9630: 20 6f 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f   of any string o
9640: 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e  r blob constant.
9650: 20 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43    See also OP_SC
9660: 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  opy..*/.case OP_
9670: 43 6f 70 79 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  Copy: {.  int n;
9680: 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b  ..  n = pOp->p3;
9690: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
96a0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
96b0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
96c0: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75  ];.  assert( pOu
96d0: 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 77 68 69  t!=pIn1 );.  whi
96e0: 6c 65 28 20 31 20 29 7b 0a 20 20 20 20 73 71 6c  le( 1 ){.    sql
96f0: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
9700: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
9710: 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20  1, MEM_Ephem);. 
9720: 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a     Deephemeraliz
9730: 65 28 70 4f 75 74 29 3b 0a 23 69 66 64 65 66 20  e(pOut);.#ifdef 
9740: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
9750: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
9760: 6d 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20  m = 0;.#endif.  
9770: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
9780: 28 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33  (pOp->p2+pOp->p3
9790: 2d 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 69  -n, pOut);.    i
97a0: 66 28 20 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72  f( (n--)==0 ) br
97b0: 65 61 6b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b  eak;.    pOut++;
97c0: 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d  .    pIn1++;.  }
97d0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
97e0: 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31  Opcode: SCopy P1
97f0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
9800: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50  opsis: r[P2]=r[P
9810: 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20  1].**.** Make a 
9820: 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20  shallow copy of 
9830: 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f  register P1 into
9840: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
9850: 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
9860: 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61  tion makes a sha
9870: 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65  llow copy of the
9880: 20 76 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20   value.  If the 
9890: 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74  value.** is a st
98a0: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68  ring or blob, th
98b0: 65 6e 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f  en the copy is o
98c0: 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  nly a pointer to
98d0: 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c   the.** original
98e0: 20 61 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68   and hence if th
98f0: 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67  e original chang
9900: 65 73 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63  es so will the c
9910: 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69  opy..** Worse, i
9920: 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69  f the original i
9930: 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74  s deallocated, t
9940: 68 65 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20  he copy becomes 
9950: 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73  invalid..** Thus
9960: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73   the program mus
9970: 74 20 67 75 61 72 61 6e 74 65 65 20 74 68 61 74  t guarantee that
9980: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69   the original wi
9990: 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a  ll not change.**
99a0: 20 64 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65   during the life
99b0: 74 69 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79  time of the copy
99c0: 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74  .  Use OP_Copy t
99d0: 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74  o make a complet
99e0: 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61  e.** copy..*/.ca
99f0: 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20  se OP_SCopy: {  
9a00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
9a10: 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
9a20: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
9a30: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
9a40: 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
9a50: 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20   pOut!=pIn1 );. 
9a60: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
9a70: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
9a80: 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d   pIn1, MEM_Ephem
9a90: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
9aa0: 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f 75  _DEBUG.  if( pOu
9ab0: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30  t->pScopyFrom==0
9ac0: 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46   ) pOut->pScopyF
9ad0: 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64  rom = pIn1;.#end
9ae0: 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  if.  break;.}../
9af0: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c 74  * Opcode: Result
9b00: 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Row P1 P2 * * *.
9b10: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 6f 75  ** Synopsis:  ou
9b20: 74 70 75 74 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a  tput=r[P1@P2].**
9b30: 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
9b40: 73 20 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b  s P1 through P1+
9b50: 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73  P2-1 contain a s
9b60: 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20  ingle row of.** 
9b70: 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70  results. This op
9b80: 63 6f 64 65 20 63 61 75 73 65 73 20 74 68 65 20  code causes the 
9b90: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63  sqlite3_step() c
9ba0: 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65  all to terminate
9bb0: 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49  .** with an SQLI
9bc0: 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f  TE_ROW return co
9bd0: 64 65 20 61 6e 64 20 69 74 20 73 65 74 73 20 75  de and it sets u
9be0: 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74  p the sqlite3_st
9bf0: 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  mt.** structure 
9c00: 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65 73  to provide acces
9c10: 73 20 74 6f 20 74 68 65 20 72 28 50 31 29 2e 2e  s to the r(P1)..
9c20: 72 28 50 31 2b 50 32 2d 31 29 20 76 61 6c 75 65  r(P1+P2-1) value
9c30: 73 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75  s as.** the resu
9c40: 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20  lt row..*/.case 
9c50: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a  OP_ResultRow: {.
9c60: 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69    Mem *pMem;.  i
9c70: 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74 28 20  nt i;.  assert( 
9c80: 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70  p->nResColumn==p
9c90: 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73 65  Op->p2 );.  asse
9ca0: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b  rt( pOp->p1>0 );
9cb0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
9cc0: 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  p1+pOp->p2<=(p->
9cd0: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
9ce0: 2b 31 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  +1 );..#ifndef S
9cf0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
9d00: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f  ESS_CALLBACK.  /
9d10: 2a 20 52 75 6e 20 74 68 65 20 70 72 6f 67 72 65  * Run the progre
9d20: 73 73 20 63 6f 75 6e 74 65 72 20 6a 75 73 74 20  ss counter just 
9d30: 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67  before returning
9d40: 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  ..  */.  if( db-
9d50: 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 0a 20 20  >xProgress!=0.  
9d60: 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72   && nVmStep>=nPr
9d70: 6f 67 72 65 73 73 4c 69 6d 69 74 0a 20 20 20 26  ogressLimit.   &
9d80: 26 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28  & db->xProgress(
9d90: 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67  db->pProgressArg
9da0: 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 72 63  )!=0.  ){.    rc
9db0: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52   = SQLITE_INTERR
9dc0: 55 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 76 64  UPT;.    goto vd
9dd0: 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20  be_error_halt;. 
9de0: 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20   }.#endif..  /* 
9df0: 49 66 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e  If this statemen
9e00: 74 20 68 61 73 20 76 69 6f 6c 61 74 65 64 20 69  t has violated i
9e10: 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
9e20: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
9e30: 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72 65  , do.  ** not re
9e40: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
9e50: 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66 69 65 64  of rows modified
9e60: 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45 4c  . And do not REL
9e70: 45 41 53 45 20 74 68 65 20 73 74 61 74 65 6d 65  EASE the stateme
9e80: 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74  nt.  ** transact
9e90: 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20 74 6f  ion. It needs to
9ea0: 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
9eb0: 20 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49 54    */.  if( SQLIT
9ec0: 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69  E_OK!=(rc = sqli
9ed0: 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70  te3VdbeCheckFk(p
9ee0: 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 61 73 73  , 0)) ){.    ass
9ef0: 65 72 74 28 20 64 62 2d 3e 66 6c 61 67 73 26 53  ert( db->flags&S
9f00: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
9f10: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
9f20: 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61  ->usesStmtJourna
9f30: 6c 20 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  l );.    break;.
9f40: 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65    }..  /* If the
9f50: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77   SQLITE_CountRow
9f60: 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  s flag is set in
9f70: 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 20 6d   sqlite3.flags m
9f80: 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20  ask, then .  ** 
9f90: 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  DML statements i
9fa0: 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64  nvoke this opcod
9fb0: 65 20 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20  e to return the 
9fc0: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 0a  number of rows .
9fd0: 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74 6f    ** modified to
9fe0: 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20   the user. This 
9ff0: 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20  is the only way 
a000: 74 68 61 74 20 61 20 56 4d 20 74 68 61 74 0a 20  that a VM that. 
a010: 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74 61 74   ** opens a stat
a020: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
a030: 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68 69  n may invoke thi
a040: 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20  s opcode..  **. 
a050: 20 2a 2a 20 49 6e 20 63 61 73 65 20 74 68 69 73   ** In case this
a060: 20 69 73 20 73 75 63 68 20 61 20 73 74 61 74 65   is such a state
a070: 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79 20  ment, close any 
a080: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
a090: 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65  ction.  ** opene
a0a0: 64 20 62 79 20 74 68 69 73 20 56 4d 20 62 65 66  d by this VM bef
a0b0: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 63 6f  ore returning co
a0c0: 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 75 73 65  ntrol to the use
a0d0: 72 2e 20 54 68 69 73 20 69 73 20 74 6f 0a 20 20  r. This is to.  
a0e0: 2a 2a 20 65 6e 73 75 72 65 20 74 68 61 74 20 73  ** ensure that s
a0f0: 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63  tatement-transac
a100: 74 69 6f 6e 73 20 61 72 65 20 61 6c 77 61 79 73  tions are always
a110: 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76 65   nested, not ove
a120: 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20 49  rlapping..  ** I
a130: 66 20 74 68 65 20 6f 70 65 6e 20 73 74 61 74 65  f the open state
a140: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
a150: 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20 68   is not closed h
a160: 65 72 65 2c 20 74 68 65 6e 20 74 68 65 20 75 73  ere, then the us
a170: 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65 70  er.  ** may step
a180: 20 61 6e 6f 74 68 65 72 20 56 4d 20 74 68 61 74   another VM that
a190: 20 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e 20 73   opens its own s
a1a0: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
a1b0: 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a 20  tion. This.  ** 
a1c0: 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f 76 65 72  may lead to over
a1d0: 6c 61 70 70 69 6e 67 20 73 74 61 74 65 6d 65 6e  lapping statemen
a1e0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 0a  t transactions..
a1f0: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 74    **.  ** The st
a200: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
a210: 69 6f 6e 20 69 73 20 6e 65 76 65 72 20 61 20 74  ion is never a t
a220: 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61 63  op-level transac
a230: 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20 2a  tion.  Hence.  *
a240: 2a 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 61  * the RELEASE ca
a250: 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65 76  ll below can nev
a260: 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20  er fail..  */.  
a270: 61 73 73 65 72 74 28 20 70 2d 3e 69 53 74 61 74  assert( p->iStat
a280: 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  ement==0 || db->
a290: 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75  flags&SQLITE_Cou
a2a0: 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72 63 20 3d  ntRows );.  rc =
a2b0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 6c 6f 73   sqlite3VdbeClos
a2c0: 65 53 74 61 74 65 6d 65 6e 74 28 70 2c 20 53 41  eStatement(p, SA
a2d0: 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29  VEPOINT_RELEASE)
a2e0: 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63  ;.  if( NEVER(rc
a2f0: 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 7b 0a  !=SQLITE_OK) ){.
a300: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
a310: 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20    /* Invalidate 
a320: 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63 75  all ephemeral cu
a330: 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73 20  rsor row caches 
a340: 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74 72  */.  p->cacheCtr
a350: 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72 20   = (p->cacheCtr 
a360: 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61  + 2)|1;..  /* Ma
a370: 6b 65 20 73 75 72 65 20 74 68 65 20 72 65 73 75  ke sure the resu
a380: 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72 72 65  lts of the curre
a390: 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30 20  nt row are \000 
a3a0: 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20  terminated.  ** 
a3b0: 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73 69  and have an assi
a3c0: 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65 20  gned type.  The 
a3d0: 72 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d 65  results are de-e
a3e0: 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a  phemeralized as.
a3f0: 20 20 2a 2a 20 61 20 73 69 64 65 20 65 66 66 65    ** a side effe
a400: 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20  ct..  */.  pMem 
a410: 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20  = p->pResultSet 
a420: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
a430: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70  ;.  for(i=0; i<p
a440: 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20  Op->p2; i++){.  
a450: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
a460: 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29 20 29  alid(&pMem[i]) )
a470: 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61  ;.    Deephemera
a480: 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a  lize(&pMem[i]);.
a490: 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65      assert( (pMe
a4a0: 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  m[i].flags & MEM
a4b0: 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20 20 20  _Ephem)==0.     
a4c0: 20 20 20 20 20 20 20 7c 7c 20 28 70 4d 65 6d 5b         || (pMem[
a4d0: 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  i].flags & (MEM_
a4e0: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
a4f0: 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
a500: 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e  VdbeMemNulTermin
a510: 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20  ate(&pMem[i]);. 
a520: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
a530: 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d  E(pOp->p1+i, &pM
a540: 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66  em[i]);.  }.  if
a550: 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
a560: 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  ed ) goto no_mem
a570: 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53  ;..  /* Return S
a580: 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20  QLITE_ROW.  */. 
a590: 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20 31 3b   p->pc = pc + 1;
a5a0: 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52  .  rc = SQLITE_R
a5b0: 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  OW;.  goto vdbe_
a5c0: 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70  return;.}../* Op
a5d0: 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20  code: Concat P1 
a5e0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
a5f0: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
a600: 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 41  2]+r[P1].**.** A
a610: 64 64 20 74 68 65 20 74 65 78 74 20 69 6e 20 72  dd the text in r
a620: 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20  egister P1 onto 
a630: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74  the end of the t
a640: 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  ext in.** regist
a650: 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20  er P2 and store 
a660: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
a670: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
a680: 20 65 69 74 68 65 72 20 74 68 65 20 50 31 20 6f   either the P1 o
a690: 72 20 50 32 20 74 65 78 74 20 61 72 65 20 4e 55  r P2 text are NU
a6a0: 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55  LL then store NU
a6b0: 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  LL in P3..**.** 
a6c0: 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a    P3 = P2 || P1.
a6d0: 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
a6e0: 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50  gal for P1 and P
a6f0: 33 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65  3 to be the same
a700: 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74   register. Somet
a710: 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69  imes,.** if P3 i
a720: 73 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73  s the same regis
a730: 74 65 72 20 61 73 20 50 32 2c 20 74 68 65 20 69  ter as P2, the i
a740: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73  mplementation is
a750: 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69   able.** to avoi
a760: 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f  d a memcpy()..*/
a770: 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a  .case OP_Concat:
a780: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
a790: 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41  same as TK_CONCA
a7a0: 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  T, in1, in2, out
a7b0: 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  3 */.  i64 nByte
a7c0: 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
a7d0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
a7e0: 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
a7f0: 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p2];.  pOut = &a
a800: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
a810: 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f  assert( pIn1!=pO
a820: 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  ut );.  if( (pIn
a830: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
a840: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
a850: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
a860: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
a870: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
a880: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45 78 70 61  ;.  }.  if( Expa
a890: 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20  ndBlob(pIn1) || 
a8a0: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29  ExpandBlob(pIn2)
a8b0: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
a8c0: 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31    Stringify(pIn1
a8d0: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53  , encoding);.  S
a8e0: 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65  tringify(pIn2, e
a8f0: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74  ncoding);.  nByt
a900: 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49  e = pIn1->n + pI
a910: 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79  n2->n;.  if( nBy
a920: 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  te>db->aLimit[SQ
a930: 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
a940: 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
a950: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66  oo_big;.  }.  if
a960: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
a970: 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29  Grow(pOut, (int)
a980: 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70  nByte+2, pOut==p
a990: 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  In2) ){.    goto
a9a0: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 4d   no_mem;.  }.  M
a9b0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
a9c0: 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20  ut, MEM_Str);.  
a9d0: 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29  if( pOut!=pIn2 )
a9e0: 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75  {.    memcpy(pOu
a9f0: 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70  t->z, pIn2->z, p
aa00: 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d  In2->n);.  }.  m
aa10: 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70  emcpy(&pOut->z[p
aa20: 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a  In2->n], pIn1->z
aa30: 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f  , pIn1->n);.  pO
aa40: 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b 0a  ut->z[nByte]=0;.
aa50: 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b    pOut->z[nByte+
aa60: 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e  1] = 0;.  pOut->
aa70: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72  flags |= MEM_Ter
aa80: 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28  m;.  pOut->n = (
aa90: 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75  int)nByte;.  pOu
aaa0: 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
aab0: 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  g;.  UPDATE_MAX_
aac0: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
aad0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
aae0: 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50 32  pcode: Add P1 P2
aaf0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
ab00: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31  sis:  r[P3]=r[P1
ab10: 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64  ]+r[P2].**.** Ad
ab20: 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  d the value in r
ab30: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68  egister P1 to th
ab40: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
ab50: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
ab60: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
ab70: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
ab80: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
ab90: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
aba0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
abb0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c  /./* Opcode: Mul
abc0: 74 69 70 6c 79 20 50 31 20 50 32 20 50 33 20 2a  tiply P1 P2 P3 *
abd0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
abe0: 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50   r[P3]=r[P1]*r[P
abf0: 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74  2].**.**.** Mult
ac00: 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69  iply the value i
ac10: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79  n register P1 by
ac20: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
ac30: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
ac40: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
ac50: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
ac60: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
ac70: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
ac80: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
ac90: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
aca0: 53 75 62 74 72 61 63 74 20 50 31 20 50 32 20 50  Subtract P1 P2 P
acb0: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
acc0: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d  s:  r[P3]=r[P2]-
acd0: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74  r[P1].**.** Subt
ace0: 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20 69  ract the value i
acf0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 66 72  n register P1 fr
ad00: 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  om the value in 
ad10: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
ad20: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
ad30: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
ad40: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
ad50: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
ad60: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
ad70: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
ad80: 3a 20 44 69 76 69 64 65 20 50 31 20 50 32 20 50  : Divide P1 P2 P
ad90: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
ada0: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f  s:  r[P3]=r[P2]/
adb0: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69  r[P1].**.** Divi
adc0: 64 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  de the value in 
add0: 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74  register P1 by t
ade0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
adf0: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
ae00: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
ae10: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 28  in register P3 (
ae20: 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68  P3=P2/P1). If th
ae30: 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72  e value in .** r
ae40: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65  egister P1 is ze
ae50: 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ro, then the res
ae60: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20  ult is NULL. If 
ae70: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
ae80: 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65  .** NULL, the re
ae90: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
aea0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61  ./* Opcode: Rema
aeb0: 69 6e 64 65 72 20 50 31 20 50 32 20 50 33 20 2a  inder P1 P2 P3 *
aec0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
aed0: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50   r[P3]=r[P2]%r[P
aee0: 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65  1].**.** Compute
aef0: 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61   the remainder a
af00: 66 74 65 72 20 69 6e 74 65 67 65 72 20 72 65 67  fter integer reg
af10: 69 73 74 65 72 20 50 32 20 69 73 20 64 69 76 69  ister P2 is divi
af20: 64 65 64 20 62 79 20 0a 2a 2a 20 72 65 67 69 73  ded by .** regis
af30: 74 65 72 20 50 31 20 61 6e 64 20 73 74 6f 72 65  ter P1 and store
af40: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
af50: 65 67 69 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20  egister P3. .** 
af60: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
af70: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a  register P1 is z
af80: 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69  ero the result i
af90: 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69  s NULL..** If ei
afa0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
afb0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
afc0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
afd0: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
afe0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
aff0: 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20  ame as TK_PLUS, 
b000: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
b010: 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61  /.case OP_Subtra
b020: 63 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ct:             
b030: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d   /* same as TK_M
b040: 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  INUS, in1, in2, 
b050: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
b060: 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20  Multiply:       
b070: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
b080: 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20  s TK_STAR, in1, 
b090: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
b0a0: 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20  e OP_Divide:    
b0b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b0c0: 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c  ame as TK_SLASH,
b0d0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
b0e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69  */.case OP_Remai
b0f0: 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20  nder: {         
b100: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
b110: 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  REM, in1, in2, o
b120: 75 74 33 20 2a 2f 0a 20 20 63 68 61 72 20 62 49  ut3 */.  char bI
b130: 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53 74 61 72  ntint;   /* Star
b140: 74 65 64 20 6f 75 74 20 61 73 20 74 77 6f 20 69  ted out as two i
b150: 6e 74 65 67 65 72 20 6f 70 65 72 61 6e 64 73 20  nteger operands 
b160: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20  */.  u16 flags; 
b170: 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64       /* Combined
b180: 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f   MEM_* flags fro
b190: 6d 20 62 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f  m both inputs */
b1a0: 0a 20 20 75 31 36 20 74 79 70 65 31 3b 20 20 20  .  u16 type1;   
b1b0: 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79     /* Numeric ty
b1c0: 70 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61  pe of left opera
b1d0: 6e 64 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65  nd */.  u16 type
b1e0: 32 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72  2;      /* Numer
b1f0: 69 63 20 74 79 70 65 20 6f 66 20 72 69 67 68 74  ic type of right
b200: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36   operand */.  i6
b210: 34 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a  4 iA;         /*
b220: 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   Integer value o
b230: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
b240: 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20 20  /.  i64 iB;     
b250: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
b260: 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70  alue of right op
b270: 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c  erand */.  doubl
b280: 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65  e rA;      /* Re
b290: 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74  al value of left
b2a0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f   operand */.  do
b2b0: 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a  uble rB;      /*
b2c0: 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72   Real value of r
b2d0: 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  ight operand */.
b2e0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
b2f0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74 79 70 65  pOp->p1];.  type
b300: 31 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28  1 = numericType(
b310: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20  pIn1);.  pIn2 = 
b320: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
b330: 20 20 74 79 70 65 32 20 3d 20 6e 75 6d 65 72 69    type2 = numeri
b340: 63 54 79 70 65 28 70 49 6e 32 29 3b 0a 20 20 70  cType(pIn2);.  p
b350: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
b360: 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20  >p3];.  flags = 
b370: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
b380: 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28  n2->flags;.  if(
b390: 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75   (flags & MEM_Nu
b3a0: 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72  ll)!=0 ) goto ar
b3b0: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
b3c0: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28  is_null;.  if( (
b3d0: 74 79 70 65 31 20 26 20 74 79 70 65 32 20 26 20  type1 & type2 & 
b3e0: 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20  MEM_Int)!=0 ){. 
b3f0: 20 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e     iA = pIn1->u.
b400: 69 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32  i;.    iB = pIn2
b410: 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69  ->u.i;.    bInti
b420: 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74  nt = 1;.    swit
b430: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
b440: 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  ){.      case OP
b450: 5f 41 64 64 3a 20 20 20 20 20 20 20 69 66 28 20  _Add:       if( 
b460: 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28  sqlite3AddInt64(
b470: 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66  &iB,iA) ) goto f
b480: 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a  p_math;  break;.
b490: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75        case OP_Su
b4a0: 62 74 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c  btract:  if( sql
b4b0: 69 74 65 33 53 75 62 49 6e 74 36 34 28 26 69 42  ite3SubInt64(&iB
b4c0: 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d  ,iA) ) goto fp_m
b4d0: 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  ath;  break;.   
b4e0: 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69     case OP_Multi
b4f0: 70 6c 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65  ply:  if( sqlite
b500: 33 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41  3MulInt64(&iB,iA
b510: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
b520: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
b530: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
b540: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  {.        if( iA
b550: 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  ==0 ) goto arith
b560: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
b570: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  null;.        if
b580: 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d  ( iA==-1 && iB==
b590: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29  SMALLEST_INT64 )
b5a0: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20   goto fp_math;. 
b5b0: 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b         iB /= iA;
b5c0: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
b5d0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65        }.      de
b5e0: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20  fault: {.       
b5f0: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
b600: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
b610: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
b620: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
b630: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
b640: 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20    iB %= iA;.    
b650: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
b660: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75   }.    }.    pOu
b670: 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20  t->u.i = iB;.   
b680: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
b690: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
b6a0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e    }else{.    bIn
b6b0: 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74  tint = 0;.fp_mat
b6c0: 68 3a 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69  h:.    rA = sqli
b6d0: 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
b6e0: 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d  (pIn1);.    rB =
b6f0: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
b700: 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20  Value(pIn2);.   
b710: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
b720: 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61  code ){.      ca
b730: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
b740: 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20     rB += rA;    
b750: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
b760: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
b770: 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20  :    rB -= rA;  
b780: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
b790: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
b7a0: 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b  ly:    rB *= rA;
b7b0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
b7c0: 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69      case OP_Divi
b7d0: 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a  de: {.        /*
b7e0: 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61   (double)0 In ca
b7f0: 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49  se of SQLITE_OMI
b800: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
b810: 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ... */.        i
b820: 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30  f( rA==(double)0
b830: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
b840: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
b850: 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d  l;.        rB /=
b860: 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65   rA;.        bre
b870: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
b880: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
b890: 20 20 20 20 20 69 41 20 3d 20 28 69 36 34 29 72       iA = (i64)r
b8a0: 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20  A;.        iB = 
b8b0: 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20  (i64)rB;.       
b8c0: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
b8d0: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
b8e0: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
b8f0: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
b900: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
b910: 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28    rB = (double)(
b920: 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20  iB % iA);.      
b930: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
b940: 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51  .    }.#ifdef SQ
b950: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
b960: 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75  NG_POINT.    pOu
b970: 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20  t->u.i = rB;.   
b980: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
b990: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
b9a0: 23 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71  #else.    if( sq
b9b0: 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29  lite3IsNaN(rB) )
b9c0: 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69  {.      goto ari
b9d0: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
b9e0: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20  s_null;.    }.  
b9f0: 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72 42    pOut->u.r = rB
ba00: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
ba10: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52  Flag(pOut, MEM_R
ba20: 65 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 28  eal);.    if( ((
ba30: 74 79 70 65 31 7c 74 79 70 65 32 29 26 4d 45 4d  type1|type2)&MEM
ba40: 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20 21 62 49  _Real)==0 && !bI
ba50: 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73  ntint ){.      s
ba60: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65  qlite3VdbeIntege
ba70: 72 41 66 66 69 6e 69 74 79 28 70 4f 75 74 29 3b  rAffinity(pOut);
ba80: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
ba90: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74  }.  break;..arit
baa0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
bab0: 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33  _null:.  sqlite3
bac0: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
bad0: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
bae0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c  ../* Opcode: Col
baf0: 6c 53 65 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a  lSeq P1 * * P4.*
bb00: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
bb10: 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65  nter to a CollSe
bb20: 71 20 73 74 72 75 63 74 2e 20 49 66 20 74 68 65  q struct. If the
bb30: 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20   next call to a 
bb40: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a  user function.**
bb50: 20 6f 72 20 61 67 67 72 65 67 61 74 65 20 63 61   or aggregate ca
bb60: 6c 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46 75  lls sqlite3GetFu
bb70: 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69  ncCollSeq(), thi
bb80: 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  s collation sequ
bb90: 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20  ence will.** be 
bba0: 72 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69  returned. This i
bbb0: 73 20 75 73 65 64 20 62 79 20 74 68 65 20 62 75  s used by the bu
bbc0: 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61  ilt-in min(), ma
bbd0: 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29  x() and nullif()
bbe0: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  .** functions..*
bbf0: 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  *.** If P1 is no
bc00: 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20  t zero, then it 
bc10: 69 73 20 61 20 72 65 67 69 73 74 65 72 20 74 68  is a register th
bc20: 61 74 20 61 20 73 75 62 73 65 71 75 65 6e 74 20  at a subsequent 
bc30: 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28  min() or.** max(
bc40: 29 20 61 67 67 72 65 67 61 74 65 20 77 69 6c 6c  ) aggregate will
bc50: 20 73 65 74 20 74 6f 20 31 20 69 66 20 74 68 65   set to 1 if the
bc60: 20 63 75 72 72 65 6e 74 20 72 6f 77 20 69 73 20   current row is 
bc70: 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20  not the minimum 
bc80: 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20  or.** maximum.  
bc90: 54 68 65 20 50 31 20 72 65 67 69 73 74 65 72 20  The P1 register 
bca0: 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74  is initialized t
bcb0: 6f 20 30 20 62 79 20 74 68 69 73 20 69 6e 73 74  o 0 by this inst
bcc0: 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ruction..**.** T
bcd0: 68 65 20 69 6e 74 65 72 66 61 63 65 20 75 73 65  he interface use
bce0: 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65  d by the impleme
bcf0: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61  ntation of the a
bd00: 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75  forementioned fu
bd10: 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65  nctions.** to re
bd20: 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61  trieve the colla
bd30: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65  tion sequence se
bd40: 74 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  t by this opcode
bd50: 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c   is not availabl
bd60: 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2c 20 6f  e.** publicly, o
bd70: 6e 6c 79 20 74 6f 20 75 73 65 72 20 66 75 6e 63  nly to user func
bd80: 74 69 6f 6e 73 20 64 65 66 69 6e 65 64 20 69 6e  tions defined in
bd90: 20 66 75 6e 63 2e 63 2e 0a 2a 2f 0a 63 61 73 65   func.c..*/.case
bda0: 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20   OP_CollSeq: {. 
bdb0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
bdc0: 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51  type==P4_COLLSEQ
bdd0: 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
bde0: 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  1 ){.    sqlite3
bdf0: 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
be00: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20  &aMem[pOp->p1], 
be10: 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  0);.  }.  break;
be20: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46  .}../* Opcode: F
be30: 75 6e 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33  unction P1 P2 P3
be40: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
be50: 69 73 3a 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72  is: r[P3]=func(r
be60: 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49  [P2@P5]).**.** I
be70: 6e 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e  nvoke a user fun
be80: 63 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70  ction (P4 is a p
be90: 6f 69 6e 74 65 72 20 74 6f 20 61 20 46 75 6e 63  ointer to a Func
bea0: 74 69 6f 6e 20 73 74 72 75 63 74 75 72 65 20 74  tion structure t
beb0: 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20 74  hat.** defines t
bec0: 68 65 20 66 75 6e 63 74 69 6f 6e 29 20 77 69 74  he function) wit
bed0: 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74  h P5 arguments t
bee0: 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
bef0: 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75 63  er P2 and.** suc
bf00: 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65  cessors.  The re
bf10: 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63  sult of the func
bf20: 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69  tion is stored i
bf30: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
bf40: 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 6d 75  * Register P3 mu
bf50: 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66  st not be one of
bf60: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e   the function in
bf70: 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  puts..**.** P1 i
bf80: 73 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d 61  s a 32-bit bitma
bf90: 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68  sk indicating wh
bfa0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63  ether or not eac
bfb0: 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  h argument to th
bfc0: 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  e .** function w
bfd0: 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f  as determined to
bfe0: 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74 20   be constant at 
bff0: 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49 66  compile time. If
c000: 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
c010: 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73 74  gument was const
c020: 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20 6f  ant then bit 0 o
c030: 66 20 50 31 20 69 73 20 73 65 74 2e 20 54 68 69  f P1 is set. Thi
c040: 73 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  s is used to det
c050: 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65  ermine.** whethe
c060: 72 20 6d 65 74 61 20 64 61 74 61 20 61 73 73 6f  r meta data asso
c070: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 75 73  ciated with a us
c080: 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75  er function argu
c090: 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a 2a  ment using the.*
c0a0: 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75  * sqlite3_set_au
c0b0: 78 64 61 74 61 28 29 20 41 50 49 20 6d 61 79 20  xdata() API may 
c0c0: 62 65 20 73 61 66 65 6c 79 20 72 65 74 61 69 6e  be safely retain
c0d0: 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78  ed until the nex
c0e0: 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20  t.** invocation 
c0f0: 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  of this opcode..
c100: 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
c110: 41 67 67 53 74 65 70 20 61 6e 64 20 41 67 67 46  AggStep and AggF
c120: 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  inal.*/.case OP_
c130: 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e  Function: {.  in
c140: 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67  t i;.  Mem *pArg
c150: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
c160: 65 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74  ext ctx;.  sqlit
c170: 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c  e3_value **apVal
c180: 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20  ;.  int n;..  n 
c190: 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 70 56  = pOp->p5;.  apV
c1a0: 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  al = p->apArg;. 
c1b0: 20 61 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c   assert( apVal |
c1c0: 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  | n==0 );.  asse
c1d0: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
c1e0: 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
c1f0: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
c200: 3b 0a 20 20 63 74 78 2e 70 4f 75 74 20 3d 20 26  ;.  ctx.pOut = &
c210: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
c220: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
c230: 65 28 70 2c 20 63 74 78 2e 70 4f 75 74 29 3b 0a  e(p, ctx.pOut);.
c240: 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20  .  assert( n==0 
c250: 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26  || (pOp->p2>0 &&
c260: 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e   pOp->p2+n<=(p->
c270: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
c280: 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  +1) );.  assert(
c290: 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32   pOp->p3<pOp->p2
c2a0: 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70   || pOp->p3>=pOp
c2b0: 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41 72 67  ->p2+n );.  pArg
c2c0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
c2d0: 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  ];.  for(i=0; i<
c2e0: 6e 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b  n; i++, pArg++){
c2f0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
c300: 49 73 56 61 6c 69 64 28 70 41 72 67 29 20 29 3b  IsValid(pArg) );
c310: 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20  .    apVal[i] = 
c320: 70 41 72 67 3b 0a 20 20 20 20 44 65 65 70 68 65  pArg;.    Deephe
c330: 6d 65 72 61 6c 69 7a 65 28 70 41 72 67 29 3b 0a  meralize(pArg);.
c340: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
c350: 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 41  CE(pOp->p2+i, pA
c360: 72 67 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  rg);.  }..  asse
c370: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
c380: 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20  =P4_FUNCDEF );. 
c390: 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70   ctx.pFunc = pOp
c3a0: 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 63 74  ->p4.pFunc;.  ct
c3b0: 78 2e 69 4f 70 20 3d 20 70 63 3b 0a 20 20 63 74  x.iOp = pc;.  ct
c3c0: 78 2e 70 56 64 62 65 20 3d 20 70 3b 0a 20 20 4d  x.pVdbe = p;.  M
c3d0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 63 74  emSetTypeFlag(ct
c3e0: 78 2e 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  x.pOut, MEM_Null
c3f0: 29 3b 0a 20 20 63 74 78 2e 66 45 72 72 6f 72 4f  );.  ctx.fErrorO
c400: 72 41 75 78 20 3d 20 30 3b 0a 20 20 64 62 2d 3e  rAux = 0;.  db->
c410: 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74  lastRowid = last
c420: 52 6f 77 69 64 3b 0a 20 20 28 2a 63 74 78 2e 70  Rowid;.  (*ctx.p
c430: 46 75 6e 63 2d 3e 78 46 75 6e 63 29 28 26 63 74  Func->xFunc)(&ct
c440: 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a  x, n, apVal); /*
c450: 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33   IMP: R-24505-23
c460: 32 33 30 20 2a 2f 0a 20 20 6c 61 73 74 52 6f 77  230 */.  lastRow
c470: 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77  id = db->lastRow
c480: 69 64 3b 20 20 2f 2a 20 52 65 6d 65 6d 62 65 72  id;  /* Remember
c490: 20 72 6f 77 69 64 20 63 68 61 6e 67 65 73 20 6d   rowid changes m
c4a0: 61 64 65 20 62 79 20 78 46 75 6e 63 20 2a 2f 0a  ade by xFunc */.
c4b0: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75 6e  .  /* If the fun
c4c0: 63 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20 61  ction returned a
c4d0: 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20 61  n error, throw a
c4e0: 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20  n exception */. 
c4f0: 20 69 66 28 20 63 74 78 2e 66 45 72 72 6f 72 4f   if( ctx.fErrorO
c500: 72 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28 20  rAux ){.    if( 
c510: 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20  ctx.isError ){. 
c520: 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
c530: 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
c540: 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
c550: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
c560: 63 74 78 2e 70 4f 75 74 29 29 3b 0a 20 20 20 20  ctx.pOut));.    
c570: 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72    rc = ctx.isErr
c580: 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  or;.    }.    sq
c590: 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 41  lite3VdbeDeleteA
c5a0: 75 78 44 61 74 61 28 70 2c 20 70 63 2c 20 70 4f  uxData(p, pc, pO
c5b0: 70 2d 3e 70 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f  p->p1);.  }..  /
c5c0: 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c  * Copy the resul
c5d0: 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
c5e0: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
c5f0: 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  P3 */.  sqlite3V
c600: 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
c610: 67 28 63 74 78 2e 70 4f 75 74 2c 20 65 6e 63 6f  g(ctx.pOut, enco
c620: 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 73 71 6c  ding);.  if( sql
c630: 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
c640: 67 28 63 74 78 2e 70 4f 75 74 29 20 29 7b 0a 20  g(ctx.pOut) ){. 
c650: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
c660: 0a 20 20 7d 0a 0a 20 20 52 45 47 49 53 54 45 52  .  }..  REGISTER
c670: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
c680: 63 74 78 2e 70 4f 75 74 29 3b 0a 20 20 55 50 44  ctx.pOut);.  UPD
c690: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
c6a0: 28 63 74 78 2e 70 4f 75 74 29 3b 0a 20 20 62 72  (ctx.pOut);.  br
c6b0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
c6c0: 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32 20  e: BitAnd P1 P2 
c6d0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
c6e0: 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d  is:  r[P3]=r[P1]
c6f0: 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b  &r[P2].**.** Tak
c700: 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 41  e the bit-wise A
c710: 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  ND of the values
c720: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
c730: 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
c740: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
c750: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
c760: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
c770: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
c780: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
c790: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74  /./* Opcode: Bit
c7a0: 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  Or P1 P2 P3 * *.
c7b0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
c7c0: 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a  P3]=r[P1]|r[P2].
c7d0: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62  **.** Take the b
c7e0: 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68  it-wise OR of th
c7f0: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
c800: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
c810: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
c820: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
c830: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
c840: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
c850: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
c860: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
c870: 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50  ode: ShiftLeft P
c880: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
c890: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d  ynopsis:  r[P3]=
c8a0: 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a  r[P2]<<r[P1].**.
c8b0: 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74  ** Shift the int
c8c0: 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65  eger value in re
c8d0: 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65  gister P2 to the
c8e0: 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20   left by the.** 
c8f0: 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73  number of bits s
c900: 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20  pecified by the 
c910: 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73  integer in regis
c920: 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65  ter P1..** Store
c930: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
c940: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
c950: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
c960: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
c970: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
c980: 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52  * Opcode: ShiftR
c990: 69 67 68 74 20 50 31 20 50 32 20 50 33 20 2a 20  ight P1 P2 P3 * 
c9a0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
c9b0: 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50  r[P3]=r[P2]>>r[P
c9c0: 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74  1].**.** Shift t
c9d0: 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
c9e0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
c9f0: 74 6f 20 74 68 65 20 72 69 67 68 74 20 62 79 20  to the right by 
ca00: 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  the.** number of
ca10: 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20   bits specified 
ca20: 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69  by the integer i
ca30: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
ca40: 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75  * Store the resu
ca50: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
ca60: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
ca70: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
ca80: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
ca90: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69  L..*/.case OP_Bi
caa0: 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20  tAnd:           
cab0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
cac0: 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c   TK_BITAND, in1,
cad0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
cae0: 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20  se OP_BitOr:    
caf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cb00: 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f   same as TK_BITO
cb10: 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
cb20: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69  3 */.case OP_Shi
cb30: 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20  ftLeft:         
cb40: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
cb50: 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20  TK_LSHIFT, in1, 
cb60: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
cb70: 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a  e OP_ShiftRight:
cb80: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
cb90: 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46  same as TK_RSHIF
cba0: 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  T, in1, in2, out
cbb0: 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20  3 */.  i64 iA;. 
cbc0: 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34 20 69   u64 uA;.  i64 i
cbd0: 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70  B;.  u8 op;..  p
cbe0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
cbf0: 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26  >p1];.  pIn2 = &
cc00: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
cc10: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
cc20: 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70  p->p3];.  if( (p
cc30: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
cc40: 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f  2->flags) & MEM_
cc50: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69  Null ){.    sqli
cc60: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
cc70: 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65  l(pOut);.    bre
cc80: 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73  ak;.  }.  iA = s
cc90: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
cca0: 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d  ue(pIn2);.  iB =
ccb0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
ccc0: 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70  alue(pIn1);.  op
ccd0: 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
cce0: 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74    if( op==OP_Bit
ccf0: 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20 26 3d  And ){.    iA &=
cd00: 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28   iB;.  }else if(
cd10: 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b   op==OP_BitOr ){
cd20: 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20  .    iA |= iB;. 
cd30: 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21 3d 30   }else if( iB!=0
cd40: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
cd50: 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67 68  op==OP_ShiftRigh
cd60: 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66  t || op==OP_Shif
cd70: 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a  tLeft );..    /*
cd80: 20 49 66 20 73 68 69 66 74 69 6e 67 20 62 79 20   If shifting by 
cd90: 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f 75 6e  a negative amoun
cda0: 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68 65 20  t, shift in the 
cdb0: 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 20  other direction 
cdc0: 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c 30 20  */.    if( iB<0 
cdd0: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
cde0: 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3d 3d   OP_ShiftRight==
cdf0: 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31 20 29  OP_ShiftLeft+1 )
ce00: 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f  ;.      op = 2*O
ce10: 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20 31 20  P_ShiftLeft + 1 
ce20: 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42 20 3d  - op;.      iB =
ce30: 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20   iB>(-64) ? -iB 
ce40: 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  : 64;.    }..   
ce50: 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20   if( iB>=64 ){. 
ce60: 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e 3d 30       iA = (iA>=0
ce70: 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74   || op==OP_Shift
ce80: 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a  Left) ? 0 : -1;.
ce90: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
cea0: 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26 69 41   memcpy(&uA, &iA
ceb0: 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20  , sizeof(uA));. 
cec0: 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f       if( op==OP_
ced0: 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20 20 20  ShiftLeft ){.   
cee0: 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a       uA <<= iB;.
cef0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
cf00: 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a       uA >>= iB;.
cf10: 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d          /* Sign-
cf20: 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69 67 68  extend on a righ
cf30: 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e 65 67  t shift of a neg
cf40: 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a  ative number */.
cf50: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3c 30          if( iA<0
cf60: 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75 36 34   ) uA |= ((((u64
cf70: 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c 33 32  )0xffffffff)<<32
cf80: 29 7c 30 78 66 66 66 66 66 66 66 66 29 20 3c 3c  )|0xffffffff) <<
cf90: 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20 20 20   (64-iB);.      
cfa0: 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26  }.      memcpy(&
cfb0: 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66 28  iA, &uA, sizeof(
cfc0: 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  iA));.    }.  }.
cfd0: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41    pOut->u.i = iA
cfe0: 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
cff0: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
d000: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
d010: 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d  * Opcode: AddImm
d020: 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a    P1 P2 * * *.**
d030: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 31   Synopsis:  r[P1
d040: 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a 2a  ]=r[P1]+P2.** .*
d050: 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74 61  * Add the consta
d060: 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61 6c  nt P2 to the val
d070: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
d080: 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  1..** The result
d090: 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69 6e   is always an in
d0a0: 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20  teger..**.** To 
d0b0: 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73 74  force any regist
d0c0: 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  er to be an inte
d0d0: 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30 2e  ger, just add 0.
d0e0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 49  .*/.case OP_AddI
d0f0: 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  mm: {           
d100: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e   /* in1 */.  pIn
d110: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
d120: 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  1];.  memAboutTo
d130: 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b  Change(p, pIn1);
d140: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
d150: 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31  mIntegerify(pIn1
d160: 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b  );.  pIn1->u.i +
d170: 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65  = pOp->p2;.  bre
d180: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
d190: 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20 50  : MustBeInt P1 P
d1a0: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46  2 * * *.** .** F
d1b0: 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  orce the value i
d1c0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
d1d0: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20   be an integer. 
d1e0: 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
d1f0: 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61 6e   in P1 is not an
d200: 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61 6e   integer and can
d210: 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64  not be converted
d220: 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72   into an integer
d230: 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74 61  .** without data
d240: 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70   loss, then jump
d250: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
d260: 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a  P2, or if P2==0.
d270: 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49  ** raise an SQLI
d280: 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63 65  TE_MISMATCH exce
d290: 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ption..*/.case O
d2a0: 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20 20  P_MustBeInt: {  
d2b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
d2c0: 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
d2d0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
d2e0: 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
d2f0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
d300: 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79  ==0 ){.    apply
d310: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53  Affinity(pIn1, S
d320: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
d330: 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  C, encoding);.  
d340: 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
d350: 6e 28 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  n((pIn1->flags&M
d360: 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20 32 29 3b 0a  EM_Int)==0, 2);.
d370: 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
d380: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d  lags & MEM_Int)=
d390: 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  =0 ){.      if( 
d3a0: 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20  pOp->p2==0 ){.  
d3b0: 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
d3c0: 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20 20  E_MISMATCH;.    
d3d0: 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
d3e0: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
d3f0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
d400: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
d410: 20 31 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61   1;.        brea
d420: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
d430: 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70  .  }.  MemSetTyp
d440: 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f  eFlag(pIn1, MEM_
d450: 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Int);.  break;.}
d460: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
d470: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
d480: 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  OINT./* Opcode: 
d490: 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20  RealAffinity P1 
d4a0: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  * * * *.**.** If
d4b0: 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c   register P1 hol
d4c0: 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f  ds an integer co
d4d0: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72 65  nvert it to a re
d4e0: 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20  al value..**.** 
d4f0: 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  This opcode is u
d500: 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63 74  sed when extract
d510: 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ing information 
d520: 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68  from a column th
d530: 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61  at.** has REAL a
d540: 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63  ffinity.  Such c
d550: 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79  olumn values may
d560: 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64   still be stored
d570: 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c   as.** integers,
d580: 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69 63   for space effic
d590: 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72  iency, but after
d5a0: 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77   extraction we w
d5b0: 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68  ant them.** to h
d5c0: 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20  ave only a real 
d5d0: 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  value..*/.case O
d5e0: 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20  P_RealAffinity: 
d5f0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
d600: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70     /* in1 */.  p
d610: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
d620: 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p1];.  if( pIn1
d630: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
d640: 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  t ){.    sqlite3
d650: 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70  VdbeMemRealify(p
d660: 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
d670: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  k;.}.#endif..#if
d680: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
d690: 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  _CAST./* Opcode:
d6a0: 20 43 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20   Cast P1 P2 * * 
d6b0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61  *.** Synopsis: a
d6c0: 66 66 69 6e 69 74 79 28 72 5b 50 31 5d 29 0a 2a  ffinity(r[P1]).*
d6d0: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
d6e0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
d6f0: 20 50 31 20 74 6f 20 62 65 20 74 68 65 20 74 79   P1 to be the ty
d700: 70 65 20 64 65 66 69 6e 65 64 20 62 79 20 50 32  pe defined by P2
d710: 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a  ..** .** <ul>.**
d720: 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 37 22 3e   <li value="97">
d730: 20 54 45 58 54 0a 2a 2a 20 3c 6c 69 20 76 61 6c   TEXT.** <li val
d740: 75 65 3d 22 39 38 22 3e 20 42 4c 4f 42 0a 2a 2a  ue="98"> BLOB.**
d750: 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 39 22 3e   <li value="99">
d760: 20 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69 20   NUMERIC.** <li 
d770: 76 61 6c 75 65 3d 22 31 30 30 22 3e 20 49 4e 54  value="100"> INT
d780: 45 47 45 52 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75  EGER.** <li valu
d790: 65 3d 22 31 30 31 22 3e 20 52 45 41 4c 0a 2a 2a  e="101"> REAL.**
d7a0: 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e   </ul>.**.** A N
d7b0: 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74  ULL value is not
d7c0: 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73   changed by this
d7d0: 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65   routine.  It re
d7e0: 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  mains NULL..*/.c
d7f0: 61 73 65 20 4f 50 5f 43 61 73 74 3a 20 7b 20 20  ase OP_Cast: {  
d800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d810: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65  /* in1 */.  asse
d820: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 53 51 4c  rt( pOp->p2>=SQL
d830: 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 26 26 20  ITE_AFF_NONE && 
d840: 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c 49 54 45 5f  pOp->p2<=SQLITE_
d850: 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 74 65  AFF_REAL );.  te
d860: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d  stcase( pOp->p2=
d870: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
d880: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
d890: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
d8a0: 41 46 46 5f 4e 4f 4e 45 20 29 3b 0a 20 20 74 65  AFF_NONE );.  te
d8b0: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d  stcase( pOp->p2=
d8c0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45  =SQLITE_AFF_NUME
d8d0: 52 49 43 20 29 3b 0a 20 20 74 65 73 74 63 61 73  RIC );.  testcas
d8e0: 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  e( pOp->p2==SQLI
d8f0: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 29  TE_AFF_INTEGER )
d900: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
d910: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
d920: 46 5f 52 45 41 4c 20 29 3b 0a 20 20 70 49 6e 31  F_REAL );.  pIn1
d930: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
d940: 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
d950: 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a  hange(p, pIn1);.
d960: 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f    rc = ExpandBlo
d970: 62 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74  b(pIn1);.  sqlit
d980: 65 33 56 64 62 65 4d 65 6d 43 61 73 74 28 70 49  e3VdbeMemCast(pI
d990: 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 65 6e 63  n1, pOp->p2, enc
d9a0: 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45  oding);.  UPDATE
d9b0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49  _MAX_BLOBSIZE(pI
d9c0: 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  n1);.  break;.}.
d9d0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
d9e0: 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f  _OMIT_CAST */../
d9f0: 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31 20  * Opcode: Lt P1 
da00: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
da10: 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
da20: 5d 3c 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a  ]<r[P3] goto P2.
da30: 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68  **.** Compare th
da40: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
da50: 73 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20  ster P1 and P3. 
da60: 20 49 66 20 72 65 67 28 50 33 29 3c 72 65 67 28   If reg(P3)<reg(
da70: 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70  P1) then.** jump
da80: 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20   to address P2. 
da90: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53   .**.** If the S
daa0: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
dab0: 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73 65   bit of P5 is se
dac0: 74 20 61 6e 64 20 65 69 74 68 65 72 20 72 65 67  t and either reg
dad0: 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50  (P1) or.** reg(P
dae0: 33 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  3) is NULL then 
daf0: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20  take the jump.  
db00: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  If the SQLITE_JU
db10: 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74  MPIFNULL .** bit
db20: 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66   is clear then f
db30: 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 66 20 65  all through if e
db40: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
db50: 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   NULL..**.** The
db60: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
db70: 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d   portion of P5 m
db80: 75 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69  ust be an affini
db90: 74 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a  ty character -.*
dba0: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  * SQLITE_AFF_TEX
dbb0: 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  T, SQLITE_AFF_IN
dbc0: 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f  TEGER, and so fo
dbd0: 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  rth. An attempt 
dbe0: 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63  is made .** to c
dbf0: 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74  oerce both input
dc00: 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74  s according to t
dc10: 68 69 73 20 61 66 66 69 6e 69 74 79 20 62 65 66  his affinity bef
dc20: 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61  ore the.** compa
dc30: 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49  rison is made. I
dc40: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  f the SQLITE_AFF
dc50: 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74  _MASK is 0x00, t
dc60: 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61  hen numeric.** a
dc70: 66 66 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e  ffinity is used.
dc80: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 61   Note that the a
dc90: 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69  ffinity conversi
dca0: 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a  ons are stored.*
dcb0: 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20  * back into the 
dcc0: 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20  input registers 
dcd0: 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74  P1 and P3.  So t
dce0: 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63  his opcode can c
dcf0: 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65  ause.** persiste
dd00: 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65  nt changes to re
dd10: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
dd20: 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e  3..**.** Once an
dd30: 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61  y conversions ha
dd40: 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20  ve taken place, 
dd50: 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75  and neither valu
dd60: 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74  e is NULL, .** t
dd70: 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  he values are co
dd80: 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20  mpared. If both 
dd90: 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73  values are blobs
dda0: 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69   then memcmp() i
ddb0: 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74  s.** used to det
ddc0: 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c  ermine the resul
ddd0: 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72  ts of the compar
dde0: 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76  ison.  If both v
ddf0: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78  alues.** are tex
de00: 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70 72  t, then the appr
de10: 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e  opriate collatin
de20: 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69  g function speci
de30: 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73  fied in.** P4 is
de40: 20 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65    used to do the
de50: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
de60: 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69   P4 is not speci
de70: 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d  fied then.** mem
de80: 63 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f  cmp() is used to
de90: 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74   compare text st
dea0: 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76  ring.  If both v
deb0: 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d  alues are.** num
dec0: 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d  eric, then a num
ded0: 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20  eric comparison 
dee0: 69 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20  is used. If the 
def0: 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  two values.** ar
df00: 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74  e of different t
df10: 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65  ypes, then numbe
df20: 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  rs are considere
df30: 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73  d less than.** s
df40: 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e  trings and strin
df50: 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  gs are considere
df60: 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62  d less than blob
df70: 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  s..**.** If the 
df80: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 62  SQLITE_STOREP2 b
df90: 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  it of P5 is set,
dfa0: 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d   then do not jum
dfb0: 70 2e 20 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20  p.  Instead,.** 
dfc0: 73 74 6f 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20  store a boolean 
dfd0: 72 65 73 75 6c 74 20 28 65 69 74 68 65 72 20 30  result (either 0
dfe0: 2c 20 6f 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29  , or 1, or NULL)
dff0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
e000: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  .**.** If the SQ
e010: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 62 69 74 20  LITE_NULLEQ bit 
e020: 69 73 20 73 65 74 20 69 6e 20 50 35 2c 20 74 68  is set in P5, th
e030: 65 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61  en NULL values a
e040: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 0a 2a 2a  re considered.**
e050: 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61 6e   equal to one an
e060: 6f 74 68 65 72 2c 20 70 72 6f 76 69 64 65 64 20  other, provided 
e070: 74 68 61 74 20 74 68 65 79 20 64 6f 20 6e 6f 74  that they do not
e080: 20 68 61 76 65 20 74 68 65 69 72 20 4d 45 4d 5f   have their MEM_
e090: 43 6c 65 61 72 65 64 0a 2a 2a 20 62 69 74 20 73  Cleared.** bit s
e0a0: 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  et..*/./* Opcode
e0b0: 3a 20 4e 65 20 50 31 20 50 32 20 50 33 20 50 34  : Ne P1 P2 P3 P4
e0c0: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
e0d0: 20 69 66 20 72 5b 50 31 5d 21 3d 72 5b 50 33 5d   if r[P1]!=r[P3]
e0e0: 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
e0f0: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
e100: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
e110: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
e120: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
e130: 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e  if.** the operan
e140: 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  ds in registers 
e150: 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f  P1 and P3 are no
e160: 74 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68  t equal.  See th
e170: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 0a  e Lt opcode for.
e180: 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  ** additional in
e190: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  formation..**.**
e1a0: 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   If SQLITE_NULLE
e1b0: 51 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74  Q is set in P5 t
e1c0: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
e1d0: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
e1e0: 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a  always either.**
e1f0: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61   true or false a
e200: 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c  nd is never NULL
e210: 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61  .  If both opera
e220: 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65  nds are NULL the
e230: 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20  n the result.** 
e240: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
e250: 20 66 61 6c 73 65 2e 20 20 49 66 20 65 69 74 68   false.  If eith
e260: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
e270: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
e280: 6c 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a 20 49  lt is true..** I
e290: 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e  f neither operan
e2a0: 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65  d is NULL the re
e2b0: 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65  sult is the same
e2c0: 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20   as it would be 
e2d0: 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  if.** the SQLITE
e2e0: 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72  _NULLEQ flag wer
e2f0: 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50  e omitted from P
e300: 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  5..*/./* Opcode:
e310: 20 45 71 20 50 31 20 50 32 20 50 33 20 50 34 20   Eq P1 P2 P3 P4 
e320: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
e330: 69 66 20 72 5b 50 31 5d 3d 3d 72 5b 50 33 5d 20  if r[P1]==r[P3] 
e340: 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
e350: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
e360: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
e370: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
e380: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
e390: 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64  f.** the operand
e3a0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
e3b0: 31 20 61 6e 64 20 50 33 20 61 72 65 20 65 71 75  1 and P3 are equ
e3c0: 61 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65 20 4c  al..** See the L
e3d0: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
e3e0: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
e3f0: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51  ion..**.** If SQ
e400: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
e410: 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68  et in P5 then th
e420: 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70  e result of comp
e430: 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73  arison is always
e440: 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20   either.** true 
e450: 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20  or false and is 
e460: 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20  never NULL.  If 
e470: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
e480: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  e NULL then the 
e490: 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d  result.** of com
e4a0: 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e  parison is true.
e4b0: 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72    If either oper
e4c0: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  and is NULL then
e4d0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 66   the result is f
e4e0: 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74  alse..** If neit
e4f0: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
e500: 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69  ULL the result i
e510: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74  s the same as it
e520: 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20   would be if.** 
e530: 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  the SQLITE_NULLE
e540: 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74  Q flag were omit
e550: 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a  ted from P5..*/.
e560: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31  /* Opcode: Le P1
e570: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
e580: 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
e590: 31 5d 3c 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50  1]<=r[P3] goto P
e5a0: 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  2.**.** This wor
e5b0: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
e5c0: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
e5d0: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
e5e0: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
e5f0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
e600: 67 69 73 74 65 72 20 50 33 20 69 73 20 6c 65 73  gister P3 is les
e610: 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
e620: 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  to the content o
e630: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
e640: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
e650: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
e660: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
e670: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47  .*/./* Opcode: G
e680: 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
e690: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
e6a0: 20 72 5b 50 31 5d 3e 72 5b 50 33 5d 20 67 6f 74   r[P1]>r[P3] got
e6b0: 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  o P2.**.** This 
e6c0: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
e6d0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
e6e0: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
e6f0: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
e700: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
e710: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
e720: 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
e730: 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72   content of.** r
e740: 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65  egister P1.  See
e750: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
e760: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
e770: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
e780: 20 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50   Opcode: Ge P1 P
e790: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
e7a0: 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
e7b0: 3e 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a  >=r[P3] goto P2.
e7c0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
e7d0: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
e7e0: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
e7f0: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
e800: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
e810: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
e820: 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74  ster P3 is great
e830: 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
e840: 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   to the content 
e850: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
e860: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
e870: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
e880: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
e890: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a  ..*/.case OP_Eq:
e8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e8b0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c  * same as TK_EQ,
e8c0: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
e8d0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20  */.case OP_Ne:  
e8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e8f0: 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a  same as TK_NE, j
e900: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
e910: 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20  .case OP_Lt:    
e920: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
e930: 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d  me as TK_LT, jum
e940: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
e950: 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20  ase OP_Le:      
e960: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
e970: 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c   as TK_LE, jump,
e980: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
e990: 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20  e OP_Gt:        
e9a0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
e9b0: 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69  s TK_GT, jump, i
e9c0: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
e9d0: 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20  OP_Ge: {        
e9e0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
e9f0: 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_GE, jump, in1
ea00: 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72  , in3 */.  int r
ea10: 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  es;            /
ea20: 2a 20 52 65 73 75 6c 74 20 6f 66 20 74 68 65 20  * Result of the 
ea30: 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70 49  comparison of pI
ea40: 6e 31 20 61 67 61 69 6e 73 74 20 70 49 6e 33 20  n1 against pIn3 
ea50: 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
ea60: 74 79 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69  ty;      /* Affi
ea70: 6e 69 74 79 20 74 6f 20 75 73 65 20 66 6f 72 20  nity to use for 
ea80: 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20  comparison */.  
ea90: 75 31 36 20 66 6c 61 67 73 31 3b 20 20 20 20 20  u16 flags1;     
eaa0: 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69      /* Copy of i
eab0: 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20  nitial value of 
eac0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20  pIn1->flags */. 
ead0: 20 75 31 36 20 66 6c 61 67 73 33 3b 20 20 20 20   u16 flags3;    
eae0: 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
eaf0: 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66  initial value of
eb00: 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a   pIn3->flags */.
eb10: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
eb20: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33  pOp->p1];.  pIn3
eb30: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
eb40: 5d 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20 70 49  ];.  flags1 = pI
eb50: 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c 61  n1->flags;.  fla
eb60: 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67  gs3 = pIn3->flag
eb70: 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 31  s;.  if( (flags1
eb80: 20 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 4e   | flags3)&MEM_N
eb90: 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e  ull ){.    /* On
eba0: 65 20 6f 72 20 62 6f 74 68 20 6f 70 65 72 61 6e  e or both operan
ebb0: 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20  ds are NULL */. 
ebc0: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26     if( pOp->p5 &
ebd0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29   SQLITE_NULLEQ )
ebe0: 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 53 51  {.      /* If SQ
ebf0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
ec00: 65 74 20 28 77 68 69 63 68 20 77 69 6c 6c 20 6f  et (which will o
ec10: 6e 6c 79 20 68 61 70 70 65 6e 20 69 66 20 74 68  nly happen if th
ec20: 65 20 6f 70 65 72 61 74 6f 72 20 69 73 0a 20 20  e operator is.  
ec30: 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20      ** OP_Eq or 
ec40: 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b 65  OP_Ne) then take
ec50: 20 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74   the jump or not
ec60: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
ec70: 65 74 68 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f  ether.      ** o
ec80: 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72 61  r not both opera
ec90: 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20  nds are null..  
eca0: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73      */.      ass
ecb0: 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
ecc0: 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e  ==OP_Eq || pOp->
ecd0: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b  opcode==OP_Ne );
ece0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
ecf0: 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65  flags1 & MEM_Cle
ed00: 61 72 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20  ared)==0 );.    
ed10: 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e    assert( (pOp->
ed20: 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50  p5 & SQLITE_JUMP
ed30: 49 46 4e 55 4c 4c 29 3d 3d 30 20 29 3b 0a 20 20  IFNULL)==0 );.  
ed40: 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 26      if( (flags1&
ed50: 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20  MEM_Null)!=0.   
ed60: 20 20 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d      && (flags3&M
ed70: 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20  EM_Null)!=0.    
ed80: 20 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45     && (flags3&ME
ed90: 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20  M_Cleared)==0.  
eda0: 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72      ){.        r
edb0: 65 73 20 3d 20 30 3b 20 20 2f 2a 20 52 65 73 75  es = 0;  /* Resu
edc0: 6c 74 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f  lts are equal */
edd0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
ede0: 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 20 20        res = 1;  
edf0: 2f 2a 20 52 65 73 75 6c 74 73 20 61 72 65 20 6e  /* Results are n
ee00: 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20  ot equal */.    
ee10: 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
ee20: 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e       /* SQLITE_N
ee30: 55 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20 61  ULLEQ is clear a
ee40: 6e 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20  nd at least one 
ee50: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c  operand is NULL,
ee60: 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74  .      ** then t
ee70: 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77  he result is alw
ee80: 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20  ays NULL..      
ee90: 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74  ** The jump is t
eea0: 61 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49  aken if the SQLI
eeb0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69  TE_JUMPIFNULL bi
eec0: 74 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20 20  t is set..      
eed0: 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  */.      if( pOp
eee0: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54  ->p5 & SQLITE_ST
eef0: 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20 20  OREP2 ){.       
ef00: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
ef10: 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20 20  p->p2];.        
ef20: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
ef30: 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  Out, MEM_Null);.
ef40: 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52          REGISTER
ef50: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
ef60: 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c  pOut);.      }el
ef70: 73 65 7b 0a 20 20 20 20 20 20 20 20 56 64 62 65  se{.        Vdbe
ef80: 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29  BranchTaken(2,3)
ef90: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4f  ;.        if( pO
efa0: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a  p->p5 & SQLITE_J
efb0: 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20  UMPIFNULL ){.   
efc0: 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d         pc = pOp-
efd0: 3e 70 32 2d 31 3b 0a 20 20 20 20 20 20 20 20 7d  >p2-1;.        }
efe0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62  .      }.      b
eff0: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  reak;.    }.  }e
f000: 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74  lse{.    /* Neit
f010: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
f020: 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61  ULL.  Do a compa
f030: 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66  rison. */.    af
f040: 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35  finity = pOp->p5
f050: 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41   & SQLITE_AFF_MA
f060: 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69  SK;.    if( affi
f070: 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46  nity>=SQLITE_AFF
f080: 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20  _NUMERIC ){.    
f090: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
f0a0: 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  gs & (MEM_Int|ME
f0b0: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29  M_Real|MEM_Str))
f0c0: 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  ==MEM_Str ){.   
f0d0: 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69       applyNumeri
f0e0: 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 30  cAffinity(pIn1,0
f0f0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
f100: 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
f110: 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  s & (MEM_Int|MEM
f120: 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d  _Real|MEM_Str))=
f130: 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20  =MEM_Str ){.    
f140: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
f150: 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 30 29  Affinity(pIn3,0)
f160: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
f170: 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79  lse if( affinity
f180: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  ==SQLITE_AFF_TEX
f190: 54 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28  T ){.      if( (
f1a0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
f1b0: 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 70 49  M_Str)==0 && (pI
f1c0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  n1->flags & (MEM
f1d0: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21  _Int|MEM_Real))!
f1e0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65  =0 ){.        te
f1f0: 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c  stcase( pIn1->fl
f200: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
f210: 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
f220: 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  e( pIn1->flags &
f230: 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20   MEM_Real );.   
f240: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
f250: 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e  MemStringify(pIn
f260: 31 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b  1, encoding, 1);
f270: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
f280: 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
f290: 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26  & MEM_Str)==0 &&
f2a0: 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
f2b0: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
f2c0: 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  l))!=0 ){.      
f2d0: 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 33    testcase( pIn3
f2e0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
f2f0: 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73  t );.        tes
f300: 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61  tcase( pIn3->fla
f310: 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b  gs & MEM_Real );
f320: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
f330: 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79  VdbeMemStringify
f340: 28 70 49 6e 33 2c 20 65 6e 63 6f 64 69 6e 67 2c  (pIn3, encoding,
f350: 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   1);.      }.   
f360: 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70   }.    assert( p
f370: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
f380: 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70  OLLSEQ || pOp->p
f390: 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20  4.pColl==0 );.  
f3a0: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
f3b0: 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  s & MEM_Zero ){.
f3c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
f3d0: 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70  eMemExpandBlob(p
f3e0: 49 6e 31 29 3b 0a 20 20 20 20 20 20 66 6c 61 67  In1);.      flag
f3f0: 73 31 20 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f 3b  s1 &= ~MEM_Zero;
f400: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
f410: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
f420: 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73  _Zero ){.      s
f430: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70  qlite3VdbeMemExp
f440: 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20  andBlob(pIn3);. 
f450: 20 20 20 20 20 66 6c 61 67 73 33 20 26 3d 20 7e       flags3 &= ~
f460: 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 20 20 7d 0a  MEM_Zero;.    }.
f470: 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c      if( db->mall
f480: 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20  ocFailed ) goto 
f490: 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 72 65 73 20  no_mem;.    res 
f4a0: 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70  = sqlite3MemComp
f4b0: 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20  are(pIn3, pIn1, 
f4c0: 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a  pOp->p4.pColl);.
f4d0: 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20 70 4f    }.  switch( pO
f4e0: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
f4f0: 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20   case OP_Eq:    
f500: 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20  res = res==0;   
f510: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
f520: 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73 20  e OP_Ne:    res 
f530: 3d 20 72 65 73 21 3d 30 3b 20 20 20 20 20 62 72  = res!=0;     br
f540: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
f550: 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Lt:    res = re
f560: 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b  s<0;      break;
f570: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a  .    case OP_Le:
f580: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 3d 30      res = res<=0
f590: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
f5a0: 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20   case OP_Gt:    
f5b0: 72 65 73 20 3d 20 72 65 73 3e 30 3b 20 20 20 20  res = res>0;    
f5c0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66    break;.    def
f5d0: 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73 20  ault:       res 
f5e0: 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62 72  = res>=0;     br
f5f0: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  eak;.  }..  if( 
f600: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
f610: 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20  _STOREP2 ){.    
f620: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
f630: 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d 65 6d 41 62  ->p2];.    memAb
f640: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
f650: 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74  Out);.    MemSet
f660: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
f670: 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75  EM_Int);.    pOu
f680: 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20  t->u.i = res;.  
f690: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
f6a0: 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
f6b0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64  .  }else{.    Vd
f6c0: 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
f6d0: 73 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20 26  s!=0, (pOp->p5 &
f6e0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29 3f   SQLITE_NULLEQ)?
f6f0: 32 3a 33 29 3b 0a 20 20 20 20 69 66 28 20 72 65  2:3);.    if( re
f700: 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  s ){.      pc = 
f710: 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 7d  pOp->p2-1;.    }
f720: 0a 20 20 7d 0a 20 20 2f 2a 20 55 6e 64 6f 20 61  .  }.  /* Undo a
f730: 6e 79 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20  ny changes made 
f740: 62 79 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  by applyAffinity
f750: 28 29 20 74 6f 20 74 68 65 20 69 6e 70 75 74 20  () to the input 
f760: 72 65 67 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20  registers. */.  
f770: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66 6c  pIn1->flags = fl
f780: 61 67 73 31 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c  ags1;.  pIn3->fl
f790: 61 67 73 20 3d 20 66 6c 61 67 73 33 3b 0a 20 20  ags = flags3;.  
f7a0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
f7b0: 6f 64 65 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e  ode: Permutation
f7c0: 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a   * * * P4 *.**.*
f7d0: 2a 20 53 65 74 20 74 68 65 20 70 65 72 6d 75 74  * Set the permut
f7e0: 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68  ation used by th
f7f0: 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65  e OP_Compare ope
f800: 72 61 74 6f 72 20 74 6f 20 62 65 20 74 68 65 20  rator to be the 
f810: 61 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74 65  array.** of inte
f820: 67 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a  gers in P4..**.*
f830: 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f  * The permutatio
f840: 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20  n is only valid 
f850: 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20 4f  until the next O
f860: 50 5f 43 6f 6d 70 61 72 65 20 74 68 61 74 20 68  P_Compare that h
f870: 61 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47  as.** the OPFLAG
f880: 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65 74  _PERMUTE bit set
f890: 20 69 6e 20 50 35 2e 20 54 79 70 69 63 61 6c 6c   in P5. Typicall
f8a0: 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74 61  y the OP_Permuta
f8b0: 74 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a 20  tion should .** 
f8c0: 6f 63 63 75 72 20 69 6d 6d 65 64 69 61 74 65 6c  occur immediatel
f8d0: 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 4f  y prior to the O
f8e0: 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61  P_Compare..*/.ca
f8f0: 73 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f  se OP_Permutatio
f900: 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  n: {.  assert( p
f910: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
f920: 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73 73  NTARRAY );.  ass
f930: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20  ert( pOp->p4.ai 
f940: 29 3b 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20  );.  aPermute = 
f950: 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 62 72  pOp->p4.ai;.  br
f960: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
f970: 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20 50 32  e: Compare P1 P2
f980: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
f990: 6f 70 73 69 73 3a 20 72 5b 50 31 40 50 33 5d 20  opsis: r[P1@P3] 
f9a0: 3c 2d 3e 20 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a  <-> r[P2@P3].**.
f9b0: 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 76  ** Compare two v
f9c0: 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74  ectors of regist
f9d0: 65 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e  ers in reg(P1)..
f9e0: 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28 63 61  reg(P1+P3-1) (ca
f9f0: 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f  ll this.** vecto
fa00: 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65  r "A") and in re
fa10: 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33  g(P2)..reg(P2+P3
fa20: 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61 76 65  -1) ("B").  Save
fa30: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a   the result of.*
fa40: 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * the comparison
fa50: 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20   for use by the 
fa60: 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73  next OP_Jump ins
fa70: 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  truct..**.** If 
fa80: 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41  P5 has the OPFLA
fa90: 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65  G_PERMUTE bit se
faa0: 74 2c 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65  t, then the orde
fab0: 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  r of comparison 
fac0: 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64  is.** determined
fad0: 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63   by the most rec
fae0: 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  ent OP_Permutati
faf0: 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20 49 66  on operator.  If
fb00: 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50   the.** OPFLAG_P
fb10: 45 52 4d 55 54 45 20 62 69 74 20 69 73 20 63 6c  ERMUTE bit is cl
fb20: 65 61 72 2c 20 74 68 65 6e 20 72 65 67 69 73 74  ear, then regist
fb30: 65 72 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20  er are compared 
fb40: 69 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a 2a 2a  in sequential.**
fb50: 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34   order..**.** P4
fb60: 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74   is a KeyInfo st
fb70: 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65 66  ructure that def
fb80: 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ines collating s
fb90: 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72  equences and sor
fba0: 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20  t.** orders for 
fbb0: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
fbc0: 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
fbd0: 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69   applies to regi
fbe0: 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  sters.** only.  
fbf0: 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d  The KeyInfo elem
fc00: 65 6e 74 73 20 61 72 65 20 75 73 65 64 20 73 65  ents are used se
fc10: 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a  quentially..**.*
fc20: 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * The comparison
fc30: 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61   is a sort compa
fc40: 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20  rison, so NULLs 
fc50: 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a  compare equal,.*
fc60: 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73  * NULLs are less
fc70: 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e   than numbers, n
fc80: 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73 20  umbers are less 
fc90: 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a  than strings,.**
fca0: 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65   and strings are
fcb0: 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73   less than blobs
fcc0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d  ..*/.case OP_Com
fcd0: 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  pare: {.  int n;
fce0: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20  .  int i;.  int 
fcf0: 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20  p1;.  int p2;.  
fd00: 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70  const KeyInfo *p
fd10: 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69  KeyInfo;.  int i
fd20: 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70  dx;.  CollSeq *p
fd30: 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c  Coll;    /* Coll
fd40: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74  ating sequence t
fd50: 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65  o use on this te
fd60: 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76  rm */.  int bRev
fd70: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  ;          /* Tr
fd80: 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49 4e  ue for DESCENDIN
fd90: 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a  G sort order */.
fda0: 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20  .  if( (pOp->p5 
fdb0: 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  & OPFLAG_PERMUTE
fdc0: 29 3d 3d 30 20 29 20 61 50 65 72 6d 75 74 65 20  )==0 ) aPermute 
fdd0: 3d 20 30 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e  = 0;.  n = pOp->
fde0: 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d  p3;.  pKeyInfo =
fdf0: 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
fe00: 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30  o;.  assert( n>0
fe10: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b   );.  assert( pK
fe20: 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70  eyInfo!=0 );.  p
fe30: 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  1 = pOp->p1;.  p
fe40: 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66  2 = pOp->p2;.#if
fe50: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
fe60: 69 66 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a  if( aPermute ){.
fe70: 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20      int k, mx = 
fe80: 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20  0;.    for(k=0; 
fe90: 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50  k<n; k++) if( aP
fea0: 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d  ermute[k]>mx ) m
feb0: 78 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b  x = aPermute[k];
fec0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e  .    assert( p1>
fed0: 30 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e  0 && p1+mx<=(p->
fee0: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
fef0: 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  +1 );.    assert
ff00: 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6d 78 3c  ( p2>0 && p2+mx<
ff10: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
ff20: 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 65 6c  rsor)+1 );.  }el
ff30: 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
ff40: 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 28 70  p1>0 && p1+n<=(p
ff50: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
ff60: 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  r)+1 );.    asse
ff70: 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e  rt( p2>0 && p2+n
ff80: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
ff90: 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a  ursor)+1 );.  }.
ffa0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
ffb0: 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28  _DEBUG */.  for(
ffc0: 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a  i=0; i<n; i++){.
ffd0: 20 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75      idx = aPermu
ffe0: 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d  te ? aPermute[i]
fff0: 20 3a 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74   : i;.    assert
10000 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
10010 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p1+idx]) );. 
10020 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
10030 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69  Valid(&aMem[p2+i
10040 64 78 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49  dx]) );.    REGI
10050 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64  STER_TRACE(p1+id
10060 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  x, &aMem[p1+idx]
10070 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
10080 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61  TRACE(p2+idx, &a
10090 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20  Mem[p2+idx]);.  
100a0 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79    assert( i<pKey
100b0 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a  Info->nField );.
100c0 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79      pColl = pKey
100d0 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a  Info->aColl[i];.
100e0 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49      bRev = pKeyI
100f0 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b  nfo->aSortOrder[
10100 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65  i];.    iCompare
10110 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
10120 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64  pare(&aMem[p1+id
10130 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78  x], &aMem[p2+idx
10140 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69  ], pColl);.    i
10150 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20  f( iCompare ){. 
10160 20 20 20 20 20 69 66 28 20 62 52 65 76 20 29 20       if( bRev ) 
10170 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d  iCompare = -iCom
10180 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61  pare;.      brea
10190 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61  k;.    }.  }.  a
101a0 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62  Permute = 0;.  b
101b0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
101c0 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50  de: Jump P1 P2 P
101d0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
101e0 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74   to the instruct
101f0 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20 50  ion at address P
10200 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70  1, P2, or P3 dep
10210 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
10220 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74  r.** in the most
10230 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61   recent OP_Compa
10240 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  re instruction t
10250 68 65 20 50 31 20 76 65 63 74 6f 72 20 77 61 73  he P1 vector was
10260 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71   less than.** eq
10270 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74  ual to, or great
10280 65 72 20 74 68 61 6e 20 74 68 65 20 50 32 20 76  er than the P2 v
10290 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76  ector, respectiv
102a0 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ely..*/.case OP_
102b0 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20  Jump: {         
102c0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
102d0 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20   if( iCompare<0 
102e0 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
102f0 3e 70 31 20 2d 20 31 3b 20 20 56 64 62 65 42 72  >p1 - 1;  VdbeBr
10300 61 6e 63 68 54 61 6b 65 6e 28 30 2c 33 29 3b 0a  anchTaken(0,3);.
10310 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d    }else if( iCom
10320 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 70  pare==0 ){.    p
10330 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
10340 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
10350 6e 28 31 2c 33 29 3b 0a 20 20 7d 65 6c 73 65 7b  n(1,3);.  }else{
10360 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
10370 33 20 2d 20 31 3b 20 20 56 64 62 65 42 72 61 6e  3 - 1;  VdbeBran
10380 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 0a 20 20  chTaken(2,3);.  
10390 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
103a0 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50 31 20   Opcode: And P1 
103b0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
103c0 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b  opsis: r[P3]=(r[
103d0 50 31 5d 20 26 26 20 72 5b 50 32 5d 29 0a 2a 2a  P1] && r[P2]).**
103e0 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67  .** Take the log
103f0 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20  ical AND of the 
10400 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
10410 65 72 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ers P1 and P2 an
10420 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72  d.** write the r
10430 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73  esult into regis
10440 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
10450 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32   either P1 or P2
10460 20 69 73 20 30 20 28 66 61 6c 73 65 29 20 74 68   is 0 (false) th
10470 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
10480 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68   0 even if.** th
10490 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73  e other input is
104a0 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61   NULL.  A NULL a
104b0 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e  nd true or two N
104c0 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e  ULLs give.** a N
104d0 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f  ULL output..*/./
104e0 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20  * Opcode: Or P1 
104f0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
10500 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b  opsis: r[P3]=(r[
10510 50 31 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a 2a 2a  P1] || r[P2]).**
10520 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67  .** Take the log
10530 69 63 61 6c 20 4f 52 20 6f 66 20 74 68 65 20 76  ical OR of the v
10540 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
10550 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  r P1 and P2 and.
10560 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 61 6e 73  ** store the ans
10570 77 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20  wer in register 
10580 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74  P3..**.** If eit
10590 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20  her P1 or P2 is 
105a0 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29 20 74  nonzero (true) t
105b0 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
105c0 73 20 31 20 28 74 72 75 65 29 0a 2a 2a 20 65 76  s 1 (true).** ev
105d0 65 6e 20 69 66 20 74 68 65 20 6f 74 68 65 72 20  en if the other 
105e0 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20  input is NULL.  
105f0 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65  A NULL and false
10600 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a   or two NULLs.**
10610 20 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74   give a NULL out
10620 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  put..*/.case OP_
10630 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20  And:            
10640 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
10650 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  AND, in1, in2, o
10660 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  ut3 */.case OP_O
10670 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  r: {            
10680 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f   /* same as TK_O
10690 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
106a0 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20  3 */.  int v1;  
106b0 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e    /* Left operan
106c0 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d  d:  0==FALSE, 1=
106d0 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57  =TRUE, 2==UNKNOW
106e0 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69  N or NULL */.  i
106f0 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20 52 69 67  nt v2;    /* Rig
10700 68 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46  ht operand: 0==F
10710 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32  ALSE, 1==TRUE, 2
10720 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c  ==UNKNOWN or NUL
10730 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26  L */..  pIn1 = &
10740 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
10750 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
10760 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
10770 20 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d 65 6c     v1 = 2;.  }el
10780 73 65 7b 0a 20 20 20 20 76 31 20 3d 20 73 71 6c  se{.    v1 = sql
10790 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
107a0 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a 20  (pIn1)!=0;.  }. 
107b0 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
107c0 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49  p->p2];.  if( pI
107d0 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
107e0 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d  Null ){.    v2 =
107f0 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   2;.  }else{.   
10800 20 76 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62   v2 = sqlite3Vdb
10810 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 21  eIntValue(pIn2)!
10820 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f  =0;.  }.  if( pO
10830 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e  p->opcode==OP_An
10840 64 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20  d ){.    static 
10850 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
10860 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20  har and_logic[] 
10870 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20  = { 0, 0, 0, 0, 
10880 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b  1, 2, 0, 2, 2 };
10890 0a 20 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f  .    v1 = and_lo
108a0 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20  gic[v1*3+v2];.  
108b0 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69  }else{.    stati
108c0 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  c const unsigned
108d0 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d   char or_logic[]
108e0 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c   = { 0, 1, 2, 1,
108f0 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d   1, 1, 2, 1, 2 }
10900 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f  ;.    v1 = or_lo
10910 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20  gic[v1*3+v2];.  
10920 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  }.  pOut = &aMem
10930 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
10940 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65   v1==2 ){.    Me
10950 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
10960 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
10970 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d  }else{.    pOut-
10980 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d  >u.i = v1;.    M
10990 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
109a0 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
109b0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
109c0 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20   Opcode: Not P1 
109d0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
109e0 70 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21 72 5b  psis: r[P2]= !r[
109f0 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  P1].**.** Interp
10a00 72 65 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ret the value in
10a10 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20   register P1 as 
10a20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e  a boolean value.
10a30 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62    Store the.** b
10a40 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e  oolean complemen
10a50 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  t in register P2
10a60 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  .  If the value 
10a70 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
10a80 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e  s .** NULL, then
10a90 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65   a NULL is store
10aa0 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  d in P2..*/.case
10ab0 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20   OP_Not: {      
10ac0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
10ad0 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31  e as TK_NOT, in1
10ae0 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  , out2 */.  pIn1
10af0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
10b00 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
10b10 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71  m[pOp->p2];.  sq
10b20 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
10b30 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66 28  ull(pOut);.  if(
10b40 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
10b50 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
10b60 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
10b70 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70  = MEM_Int;.    p
10b80 4f 75 74 2d 3e 75 2e 69 20 3d 20 21 73 71 6c 69  Out->u.i = !sqli
10b90 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
10ba0 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
10bb0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
10bc0 3a 20 42 69 74 4e 6f 74 20 50 31 20 50 32 20 2a  : BitNot P1 P2 *
10bd0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
10be0 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b 50 31 5d 0a  : r[P1]= ~r[P1].
10bf0 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
10c00 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
10c10 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61 6e  egister P1 as an
10c20 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72 65   integer.  Store
10c30 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d   the.** ones-com
10c40 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 50  plement of the P
10c50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67  1 value into reg
10c60 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 50 31  ister P2.  If P1
10c70 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c   holds.** a NULL
10c80 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e 55   then store a NU
10c90 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  LL in P2..*/.cas
10ca0 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20  e OP_BitNot: {  
10cb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
10cc0 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c  me as TK_BITNOT,
10cd0 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20   in1, out2 */.  
10ce0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
10cf0 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
10d00 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
10d10 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
10d20 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
10d30 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
10d40 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
10d50 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
10d60 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
10d70 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 7e     pOut->u.i = ~
10d80 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
10d90 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  lue(pIn1);.  }. 
10da0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
10db0 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20 50 32  code: Once P1 P2
10dc0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65   * * *.**.** Che
10dd0 63 6b 20 74 68 65 20 22 6f 6e 63 65 22 20 66 6c  ck the "once" fl
10de0 61 67 20 6e 75 6d 62 65 72 20 50 31 2e 20 49 66  ag number P1. If
10df0 20 69 74 20 69 73 20 73 65 74 2c 20 6a 75 6d 70   it is set, jump
10e00 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
10e10 50 32 2e 20 0a 2a 2a 20 4f 74 68 65 72 77 69 73  P2. .** Otherwis
10e20 65 2c 20 73 65 74 20 74 68 65 20 66 6c 61 67 20  e, set the flag 
10e30 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  and fall through
10e40 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
10e50 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 20 49 6e 20  truction..** In 
10e60 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 69  other words, thi
10e70 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20  s opcode causes 
10e80 61 6c 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 70  all following op
10e90 63 6f 64 65 73 20 75 70 20 74 68 72 6f 75 67 68  codes up through
10ea0 20 50 32 0a 2a 2a 20 28 62 75 74 20 6e 6f 74 20   P2.** (but not 
10eb0 69 6e 63 6c 75 64 69 6e 67 20 50 32 29 20 74 6f  including P2) to
10ec0 20 72 75 6e 20 6a 75 73 74 20 6f 6e 63 65 20 61   run just once a
10ed0 6e 64 20 74 6f 20 62 65 20 73 6b 69 70 70 65 64  nd to be skipped
10ee0 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 0a 2a   on subsequent.*
10ef0 2a 20 74 69 6d 65 73 20 74 68 72 6f 75 67 68 20  * times through 
10f00 74 68 65 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20  the loop..**.** 
10f10 41 6c 6c 20 22 6f 6e 63 65 22 20 66 6c 61 67 73  All "once" flags
10f20 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 63   are initially c
10f30 6c 65 61 72 65 64 20 77 68 65 6e 65 76 65 72 20  leared whenever 
10f40 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  a prepared state
10f50 6d 65 6e 74 0a 2a 2a 20 66 69 72 73 74 20 62 65  ment.** first be
10f60 67 69 6e 73 20 74 6f 20 72 75 6e 2e 0a 2a 2f 0a  gins to run..*/.
10f70 63 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20  case OP_Once: { 
10f80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
10f90 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
10fa0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63   pOp->p1<p->nOnc
10fb0 65 46 6c 61 67 20 29 3b 0a 20 20 56 64 62 65 42  eFlag );.  VdbeB
10fc0 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 61 4f  ranchTaken(p->aO
10fd0 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d  nceFlag[pOp->p1]
10fe0 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  !=0, 2);.  if( p
10ff0 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d  ->aOnceFlag[pOp-
11000 3e 70 31 5d 20 29 7b 0a 20 20 20 20 70 63 20 3d  >p1] ){.    pc =
11010 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65   pOp->p2-1;.  }e
11020 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e 63  lse{.    p->aOnc
11030 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d  eFlag[pOp->p1] =
11040 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
11050 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
11060 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  f P1 P2 P3 * *.*
11070 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
11080 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
11090 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 74  register P1 is t
110a0 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a  rue.  The value.
110b0 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  ** is considered
110c0 20 74 72 75 65 20 69 66 20 69 74 20 69 73 20 6e   true if it is n
110d0 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a  umeric and non-z
110e0 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c  ero.  If the val
110f0 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e  ue.** in P1 is N
11100 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68  ULL then take th
11110 65 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e  e jump if and on
11120 6c 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d  ly if P3 is non-
11130 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  zero..*/./* Opco
11140 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20  de: IfNot P1 P2 
11150 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d  P3 * *.**.** Jum
11160 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
11170 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
11180 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54   P1 is False.  T
11190 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63  he value.** is c
111a0 6f 6e 73 69 64 65 72 65 64 20 66 61 6c 73 65 20  onsidered false 
111b0 69 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65  if it has a nume
111c0 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72  ric value of zer
111d0 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  o.  If the value
111e0 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c  .** in P1 is NUL
111f0 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
11200 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79  jump if and only
11210 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65   if P3 is non-ze
11220 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ro..*/.case OP_I
11230 66 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f:              
11240 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
11250 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74  */.case OP_IfNot
11260 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
11270 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
11280 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d   int c;.  pIn1 =
11290 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
112a0 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
112b0 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
112c0 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33  .    c = pOp->p3
112d0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65  ;.  }else{.#ifde
112e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
112f0 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20  OATING_POINT.   
11300 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   c = sqlite3Vdbe
11310 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d  IntValue(pIn1)!=
11320 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d  0;.#else.    c =
11330 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
11340 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30  Value(pIn1)!=0.0
11350 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28  ;.#endif.    if(
11360 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
11370 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b  _IfNot ) c = !c;
11380 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63  .  }.  VdbeBranc
11390 68 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b  hTaken(c!=0, 2);
113a0 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20  .  if( c ){.    
113b0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
113c0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
113d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c  /* Opcode: IsNul
113e0 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  l P1 P2 * * *.**
113f0 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 72   Synopsis:  if r
11400 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20  [P1]==NULL goto 
11410 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f  P2.**.** Jump to
11420 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
11430 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
11440 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
11450 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20   OP_IsNull: {   
11460 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
11470 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a   as TK_ISNULL, j
11480 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
11490 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
114a0 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  p1];.  VdbeBranc
114b0 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66  hTaken( (pIn1->f
114c0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
114d0 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28  !=0, 2);.  if( (
114e0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
114f0 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20  M_Null)!=0 ){.  
11500 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
11510 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
11520 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
11530 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a  otNull P1 P2 * *
11540 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
11550 69 66 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67  if r[P1]!=NULL g
11560 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d  oto P2.**.** Jum
11570 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
11580 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
11590 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e   P1 is not NULL.
115a0 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f    .*/.case OP_No
115b0 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20  tNull: {        
115c0 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
115d0 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c  K_NOTNULL, jump,
115e0 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
115f0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
11600 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
11610 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  en( (pIn1->flags
11620 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c   & MEM_Null)==0,
11630 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31   2);.  if( (pIn1
11640 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
11650 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63  ll)==0 ){.    pc
11660 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
11670 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
11680 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d  /* Opcode: Colum
11690 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  n P1 P2 P3 P4 P5
116a0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
116b0 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e  [P3]=PX.**.** In
116c0 74 65 72 70 72 65 74 20 74 68 65 20 64 61 74 61  terpret the data
116d0 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20   that cursor P1 
116e0 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73  points to as a s
116f0 74 72 75 63 74 75 72 65 20 62 75 69 6c 74 20 75  tructure built u
11700 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65  sing.** the Make
11710 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
11720 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61  on.  (See the Ma
11730 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20  keRecord opcode 
11740 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a  for additional.*
11750 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * information ab
11760 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  out the format o
11770 66 20 74 68 65 20 64 61 74 61 2e 29 20 20 45 78  f the data.)  Ex
11780 74 72 61 63 74 20 74 68 65 20 50 32 2d 74 68 20  tract the P2-th 
11790 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74  column.** from t
117a0 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20  his record.  If 
117b0 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74  there are less t
117c0 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76  hat (P2+1) .** v
117d0 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65 63  alues in the rec
117e0 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e  ord, extract a N
117f0 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76  ULL..**.** The v
11800 61 6c 75 65 20 65 78 74 72 61 63 74 65 64 20 69  alue extracted i
11810 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
11820 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ster P3..**.** I
11830 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e  f the column con
11840 74 61 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e  tains fewer than
11850 20 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e   P2 fields, then
11860 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e   extract a NULL.
11870 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20    Or,.** if the 
11880 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  P4 argument is a
11890 20 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20   P4_MEM use the 
118a0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20  value of the P4 
118b0 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74  argument as.** t
118c0 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a  he result..**.**
118d0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 43   If the OPFLAG_C
118e0 4c 45 41 52 43 41 43 48 45 20 62 69 74 20 69 73  LEARCACHE bit is
118f0 20 73 65 74 20 6f 6e 20 50 35 20 61 6e 64 20 50   set on P5 and P
11900 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 74 61  1 is a pseudo-ta
11910 62 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74  ble cursor,.** t
11920 68 65 6e 20 74 68 65 20 63 61 63 68 65 20 6f 66  hen the cache of
11930 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 72   the cursor is r
11940 65 73 65 74 20 70 72 69 6f 72 20 74 6f 20 65 78  eset prior to ex
11950 74 72 61 63 74 69 6e 67 20 74 68 65 20 63 6f 6c  tracting the col
11960 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73  umn..** The firs
11970 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69  t OP_Column agai
11980 6e 73 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  nst a pseudo-tab
11990 6c 65 20 61 66 74 65 72 20 74 68 65 20 76 61 6c  le after the val
119a0 75 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e  ue of the conten
119b0 74 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 68 61  t.** register ha
119c0 73 20 63 68 61 6e 67 65 64 20 73 68 6f 75 6c 64  s changed should
119d0 20 68 61 76 65 20 74 68 69 73 20 62 69 74 20 73   have this bit s
119e0 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  et..**.** If the
119f0 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
11a00 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50  G and OPFLAG_TYP
11a10 45 4f 46 41 52 47 20 62 69 74 73 20 61 72 65 20  EOFARG bits are 
11a20 73 65 74 20 6f 6e 20 50 35 20 77 68 65 6e 0a 2a  set on P5 when.*
11a30 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  * the result is 
11a40 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20 6f 6e  guaranteed to on
11a50 6c 79 20 62 65 20 75 73 65 64 20 61 73 20 74 68  ly be used as th
11a60 65 20 61 72 67 75 6d 65 6e 74 20 6f 66 20 61 20  e argument of a 
11a70 6c 65 6e 67 74 68 28 29 0a 2a 2a 20 6f 72 20 74  length().** or t
11a80 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e  ypeof() function
11a90 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
11aa0 20 54 68 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20   The loading of 
11ab0 6c 61 72 67 65 20 62 6c 6f 62 73 20 63 61 6e 20  large blobs can 
11ac0 62 65 0a 2a 2a 20 73 6b 69 70 70 65 64 20 66 6f  be.** skipped fo
11ad0 72 20 6c 65 6e 67 74 68 28 29 20 61 6e 64 20 61  r length() and a
11ae0 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c 6f 61 64 69  ll content loadi
11af0 6e 67 20 63 61 6e 20 62 65 20 73 6b 69 70 70 65  ng can be skippe
11b00 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 2e 0a  d for typeof()..
11b10 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d  */.case OP_Colum
11b20 6e 3a 20 7b 0a 20 20 69 36 34 20 70 61 79 6c 6f  n: {.  i64 paylo
11b30 61 64 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d  adSize64; /* Num
11b40 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
11b50 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
11b60 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20  int p2;         
11b70 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d     /* column num
11b80 62 65 72 20 74 6f 20 72 65 74 72 69 65 76 65 20  ber to retrieve 
11b90 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
11ba0 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56  *pC;    /* The V
11bb0 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  DBE cursor */.  
11bc0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
11bd0 20 20 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20     /* The BTree 
11be0 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20  cursor */.  u32 
11bf0 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20 20 2f  *aOffset;      /
11c00 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69 73 20  * aOffset[i] is 
11c10 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72 74 20  offset to start 
11c20 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d 74 68  of data for i-th
11c30 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74   column */.  int
11c40 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20   len;           
11c50 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66  /* The length of
11c60 20 74 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20   the serialized 
11c70 64 61 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c  data for the col
11c80 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20  umn */.  int i; 
11c90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
11ca0 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  oop counter */. 
11cb0 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20 20 20   Mem *pDest;    
11cc0 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74 6f 20      /* Where to 
11cd0 77 72 69 74 65 20 74 68 65 20 65 78 74 72 61 63  write the extrac
11ce0 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d  ted value */.  M
11cf0 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20  em sMem;        
11d00 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67    /* For storing
11d10 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e   the record bein
11d20 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63  g decoded */.  c
11d30 6f 6e 73 74 20 75 38 20 2a 7a 44 61 74 61 3b 20  onst u8 *zData; 
11d40 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65    /* Part of the
11d50 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65   record being de
11d60 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74  coded */.  const
11d70 20 75 38 20 2a 7a 48 64 72 3b 20 20 20 20 2f 2a   u8 *zHdr;    /*
11d80 20 4e 65 78 74 20 75 6e 70 61 72 73 65 64 20 62   Next unparsed b
11d90 79 74 65 20 6f 66 20 74 68 65 20 68 65 61 64 65  yte of the heade
11da0 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20  r */.  const u8 
11db0 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a 20 50 6f 69  *zEndHdr; /* Poi
11dc0 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20 62 79  nter to first by
11dd0 74 65 20 61 66 74 65 72 20 74 68 65 20 68 65 61  te after the hea
11de0 64 65 72 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66  der */.  u32 off
11df0 73 65 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  set;        /* O
11e00 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65 20 64  ffset into the d
11e10 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 73 7a 46  ata */.  u32 szF
11e20 69 65 6c 64 3b 20 20 20 20 20 20 20 2f 2a 20 4e  ield;       /* N
11e30 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
11e40 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  n the content of
11e50 20 61 20 66 69 65 6c 64 20 2a 2f 0a 20 20 75 33   a field */.  u3
11e60 32 20 61 76 61 69 6c 3b 20 20 20 20 20 20 20 20  2 avail;        
11e70 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
11e80 74 65 73 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  tes of available
11e90 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 74   data */.  u32 t
11ea0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
11eb0 20 41 20 74 79 70 65 20 63 6f 64 65 20 66 72 6f   A type code fro
11ec0 6d 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61  m the record hea
11ed0 64 65 72 20 2a 2f 0a 20 20 75 31 36 20 66 78 3b  der */.  u16 fx;
11ee0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70              /* p
11ef0 44 65 73 74 2d 3e 66 6c 61 67 73 20 76 61 6c 75  Dest->flags valu
11f00 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 67  e */.  Mem *pReg
11f10 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 73 65  ;         /* Pse
11f20 75 64 6f 54 61 62 6c 65 20 69 6e 70 75 74 20 72  udoTable input r
11f30 65 67 69 73 74 65 72 20 2a 2f 0a 0a 20 20 70 32  egister */..  p2
11f40 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
11f50 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
11f60 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
11f70 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
11f80 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61   );.  pDest = &a
11f90 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
11fa0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
11fb0 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 61 73  (p, pDest);.  as
11fc0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
11fd0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
11fe0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
11ff0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
12000 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
12010 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
12020 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29   p2<pC->nField )
12030 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43  ;.  aOffset = pC
12040 2d 3e 61 4f 66 66 73 65 74 3b 0a 23 69 66 6e 64  ->aOffset;.#ifnd
12050 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
12060 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 61 73  IRTUALTABLE.  as
12070 73 65 72 74 28 20 70 43 2d 3e 70 56 74 61 62 43  sert( pC->pVtabC
12080 75 72 73 6f 72 3d 3d 30 20 29 3b 20 2f 2a 20 4f  ursor==0 ); /* O
12090 50 5f 43 6f 6c 75 6d 6e 20 6e 65 76 65 72 20 63  P_Column never c
120a0 61 6c 6c 65 64 20 6f 6e 20 76 69 72 74 75 61 6c  alled on virtual
120b0 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66   table */.#endif
120c0 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
120d0 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
120e0 28 20 70 43 72 73 72 21 3d 30 20 7c 7c 20 70 43  ( pCrsr!=0 || pC
120f0 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
12100 3e 30 20 29 3b 20 2f 2a 20 70 43 72 73 72 20 4e  >0 ); /* pCrsr N
12110 55 4c 4c 20 6f 6e 20 50 73 65 75 64 6f 54 61 62  ULL on PseudoTab
12120 6c 65 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  les */.  assert(
12130 20 70 43 72 73 72 21 3d 30 20 7c 7c 20 70 43 2d   pCrsr!=0 || pC-
12140 3e 6e 75 6c 6c 52 6f 77 20 29 3b 20 20 20 20 20  >nullRow );     
12150 20 20 20 20 20 2f 2a 20 70 43 2d 3e 6e 75 6c 6c       /* pC->null
12160 52 6f 77 20 6f 6e 20 50 73 65 75 64 6f 54 61 62  Row on PseudoTab
12170 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20  les */..  /* If 
12180 74 68 65 20 63 75 72 73 6f 72 20 63 61 63 68 65  the cursor cache
12190 20 69 73 20 73 74 61 6c 65 2c 20 62 72 69 6e 67   is stale, bring
121a0 20 69 74 20 75 70 2d 74 6f 2d 64 61 74 65 20 2a   it up-to-date *
121b0 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
121c0 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
121d0 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63 20 29  (pC);.  if( rc )
121e0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
121f0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20  to_error;.  if( 
12200 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 21  pC->cacheStatus!
12210 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 0a  =p->cacheCtr ){.
12220 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c      if( pC->null
12230 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 69 66 28  Row ){.      if(
12240 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20 20   pCrsr==0 ){.   
12250 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
12260 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3e  >pseudoTableReg>
12270 30 20 29 3b 0a 20 20 20 20 20 20 20 20 70 52 65  0 );.        pRe
12280 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 70 73  g = &aMem[pC->ps
12290 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b 0a 20  eudoTableReg];. 
122a0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
122b0 52 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Reg->flags & MEM
122c0 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20 20  _Blob );.       
122d0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
122e0 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20 20 20  lid(pReg) );.   
122f0 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64       pC->payload
12300 53 69 7a 65 20 3d 20 70 43 2d 3e 73 7a 52 6f 77  Size = pC->szRow
12310 20 3d 20 61 76 61 69 6c 20 3d 20 70 52 65 67 2d   = avail = pReg-
12320 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  >n;.        pC->
12330 61 52 6f 77 20 3d 20 28 75 38 2a 29 70 52 65 67  aRow = (u8*)pReg
12340 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ->z;.      }else
12350 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
12360 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
12370 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 20 20  pDest);.        
12380 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  goto op_column_o
12390 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ut;.      }.    
123a0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73  }else{.      ass
123b0 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20  ert( pCrsr );.  
123c0 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61      if( pC->isTa
123d0 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ble==0 ){.      
123e0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
123f0 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
12400 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20  lid(pCrsr) );.  
12410 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72        VVA_ONLY(r
12420 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65  c =) sqlite3Btre
12430 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c 20  eKeySize(pCrsr, 
12440 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 29 3b  &payloadSize64);
12450 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
12460 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
12470 3b 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73  ; /* True becaus
12480 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74  e of CursorMovet
12490 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a  o() call above *
124a0 2f 0a 20 20 20 20 20 20 20 20 2f 2a 20 73 71 6c  /.        /* sql
124b0 69 74 65 33 42 74 72 65 65 50 61 72 73 65 43 65  ite3BtreeParseCe
124c0 6c 6c 50 74 72 28 29 20 75 73 65 73 20 67 65 74  llPtr() uses get
124d0 56 61 72 69 6e 74 33 32 28 29 20 74 6f 20 65 78  Varint32() to ex
124e0 74 72 61 63 74 20 74 68 65 0a 20 20 20 20 20 20  tract the.      
124f0 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69 7a    ** payload siz
12500 65 2c 20 73 6f 20 69 74 20 69 73 20 69 6d 70 6f  e, so it is impo
12510 73 73 69 62 6c 65 20 66 6f 72 20 70 61 79 6c 6f  ssible for paylo
12520 61 64 53 69 7a 65 36 34 20 74 6f 20 62 65 0a 20  adSize64 to be. 
12530 20 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 72         ** larger
12540 20 74 68 61 6e 20 33 32 20 62 69 74 73 2e 20 2a   than 32 bits. *
12550 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  /.        assert
12560 28 20 28 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  ( (payloadSize64
12570 20 26 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33   & SQLITE_MAX_U3
12580 32 29 3d 3d 28 75 36 34 29 70 61 79 6c 6f 61 64  2)==(u64)payload
12590 53 69 7a 65 36 34 20 29 3b 0a 20 20 20 20 20 20  Size64 );.      
125a0 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c    pC->aRow = sql
125b0 69 74 65 33 42 74 72 65 65 4b 65 79 46 65 74 63  ite3BtreeKeyFetc
125c0 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29  h(pCrsr, &avail)
125d0 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61  ;.        pC->pa
125e0 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32  yloadSize = (u32
125f0 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a  )payloadSize64;.
12600 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
12610 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
12620 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
12630 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b  sValid(pCrsr) );
12640 0a 20 20 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c  .        VVA_ONL
12650 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42  Y(rc =) sqlite3B
12660 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72  treeDataSize(pCr
12670 73 72 2c 20 26 70 43 2d 3e 70 61 79 6c 6f 61 64  sr, &pC->payload
12680 53 69 7a 65 29 3b 0a 20 20 20 20 20 20 20 20 61  Size);.        a
12690 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
126a0 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 44 61 74  E_OK );   /* Dat
126b0 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66  aSize() cannot f
126c0 61 69 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20 70  ail */.        p
126d0 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74 65  C->aRow = sqlite
126e0 33 42 74 72 65 65 44 61 74 61 46 65 74 63 68 28  3BtreeDataFetch(
126f0 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a  pCrsr, &avail);.
12700 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73        }.      as
12710 73 65 72 74 28 20 61 76 61 69 6c 3c 3d 36 35 35  sert( avail<=655
12720 33 36 20 29 3b 20 20 2f 2a 20 4d 61 78 69 6d 75  36 );  /* Maximu
12730 6d 20 70 61 67 65 20 73 69 7a 65 20 69 73 20 36  m page size is 6
12740 34 4b 69 42 20 2a 2f 0a 20 20 20 20 20 20 69 66  4KiB */.      if
12750 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  ( pC->payloadSiz
12760 65 20 3c 3d 20 28 75 33 32 29 61 76 61 69 6c 20  e <= (u32)avail 
12770 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 73  ){.        pC->s
12780 7a 52 6f 77 20 3d 20 70 43 2d 3e 70 61 79 6c 6f  zRow = pC->paylo
12790 61 64 53 69 7a 65 3b 0a 20 20 20 20 20 20 7d 65  adSize;.      }e
127a0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 43 2d  lse{.        pC-
127b0 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c 3b 0a  >szRow = avail;.
127c0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
127d0 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  ( pC->payloadSiz
127e0 65 20 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c 69  e > (u32)db->aLi
127f0 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
12800 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
12810 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
12820 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
12830 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
12840 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43 74  tus = p->cacheCt
12850 72 3b 0a 20 20 20 20 70 43 2d 3e 69 48 64 72 4f  r;.    pC->iHdrO
12860 66 66 73 65 74 20 3d 20 67 65 74 56 61 72 69 6e  ffset = getVarin
12870 74 33 32 28 70 43 2d 3e 61 52 6f 77 2c 20 6f 66  t32(pC->aRow, of
12880 66 73 65 74 29 3b 0a 20 20 20 20 70 43 2d 3e 6e  fset);.    pC->n
12890 48 64 72 50 61 72 73 65 64 20 3d 20 30 3b 0a 20  HdrParsed = 0;. 
128a0 20 20 20 61 4f 66 66 73 65 74 5b 30 5d 20 3d 20     aOffset[0] = 
128b0 6f 66 66 73 65 74 3b 0a 0a 20 20 20 20 2f 2a 20  offset;..    /* 
128c0 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72 72  Make sure a corr
128d0 75 70 74 20 64 61 74 61 62 61 73 65 20 68 61 73  upt database has
128e0 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61 6e   not given us an
128f0 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65 72   oversize header
12900 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74 68 69 73  ..    ** Do this
12910 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61 6e   now to avoid an
12920 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72 79   oversize memory
12930 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20 20   allocation..   
12940 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79 70 65 20   **.    ** Type 
12950 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20 62  entries can be b
12960 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62  etween 1 and 5 b
12970 79 74 65 73 20 65 61 63 68 2e 20 20 42 75 74 20  ytes each.  But 
12980 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20  4 and 5 byte.   
12990 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73 6f   ** types use so
129a0 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63 65   much data space
129b0 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e 20   that there can 
129c0 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e 64  only be 4096 and
129d0 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68   32 of.    ** th
129e0 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  em, respectively
129f0 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d 75  .  So the maximu
12a00 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20  m header length 
12a10 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a 20  results from a. 
12a20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79 70     ** 3-byte typ
12a30 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68  e for each of th
12a40 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32 37  e maximum of 327
12a50 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73 20  68 columns plus 
12a60 74 68 72 65 65 0a 20 20 20 20 2a 2a 20 65 78 74  three.    ** ext
12a70 72 61 20 62 79 74 65 73 20 66 6f 72 20 74 68 65  ra bytes for the
12a80 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20 69   header length i
12a90 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a 33 20  tself.  32768*3 
12aa0 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20 20 20  + 3 = 98307..   
12ab0 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f 66 66 73   */.    if( offs
12ac0 65 74 20 3e 20 39 38 33 30 37 20 7c 7c 20 6f 66  et > 98307 || of
12ad0 66 73 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c 6f  fset > pC->paylo
12ae0 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20 20 20  adSize ){.      
12af0 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
12b00 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20  UPT_BKPT;.      
12b10 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65  goto op_column_e
12b20 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  rror;.    }..   
12b30 20 69 66 28 20 61 76 61 69 6c 3c 6f 66 66 73 65   if( avail<offse
12b40 74 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 70 43  t ){.      /* pC
12b50 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20  ->aRow does not 
12b60 68 61 76 65 20 74 6f 20 68 6f 6c 64 20 74 68 65  have to hold the
12b70 20 65 6e 74 69 72 65 20 72 6f 77 2c 20 62 75 74   entire row, but
12b80 20 69 74 20 64 6f 65 73 20 61 74 20 6c 65 61 73   it does at leas
12b90 74 0a 20 20 20 20 20 20 2a 2a 20 6e 65 65 64 20  t.      ** need 
12ba0 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68 65 61  to cover the hea
12bb0 64 65 72 20 6f 66 20 74 68 65 20 72 65 63 6f 72  der of the recor
12bc0 64 2e 20 20 49 66 20 70 43 2d 3e 61 52 6f 77 20  d.  If pC->aRow 
12bd0 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  does not contain
12be0 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63 6f  .      ** the co
12bf0 6d 70 6c 65 74 65 20 68 65 61 64 65 72 2c 20 74  mplete header, t
12c00 68 65 6e 20 73 65 74 20 69 74 20 74 6f 20 7a 65  hen set it to ze
12c10 72 6f 2c 20 66 6f 72 63 69 6e 67 20 74 68 65 20  ro, forcing the 
12c20 68 65 61 64 65 72 20 74 6f 20 62 65 0a 20 20 20  header to be.   
12c30 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c     ** dynamicall
12c40 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a  y allocated. */.
12c50 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
12c60 20 30 3b 0a 20 20 20 20 20 20 70 43 2d 3e 73 7a   0;.      pC->sz
12c70 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a  Row = 0;.    }..
12c80 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f      /* The follo
12c90 77 69 6e 67 20 67 6f 74 6f 20 69 73 20 61 6e 20  wing goto is an 
12ca0 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 20 20 49  optimization.  I
12cb0 74 20 63 61 6e 20 62 65 20 6f 6d 69 74 74 65 64  t can be omitted
12cc0 20 61 6e 64 0a 20 20 20 20 2a 2a 20 65 76 65 72   and.    ** ever
12cd0 79 74 68 69 6e 67 20 77 69 6c 6c 20 73 74 69 6c  ything will stil
12ce0 6c 20 77 6f 72 6b 2e 20 20 42 75 74 20 4f 50 5f  l work.  But OP_
12cf0 43 6f 6c 75 6d 6e 20 69 73 20 6d 65 61 73 75 72  Column is measur
12d00 61 62 6c 79 20 66 61 73 74 65 72 0a 20 20 20 20  ably faster.    
12d10 2a 2a 20 62 79 20 73 6b 69 70 70 69 6e 67 20 74  ** by skipping t
12d20 68 65 20 73 75 62 73 65 71 75 65 6e 74 20 63 6f  he subsequent co
12d30 6e 64 69 74 69 6f 6e 61 6c 2c 20 77 68 69 63 68  nditional, which
12d40 20 69 73 20 61 6c 77 61 79 73 20 74 72 75 65 2e   is always true.
12d50 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  .    */.    asse
12d60 72 74 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  rt( pC->nHdrPars
12d70 65 64 3c 3d 70 32 20 29 3b 20 20 20 20 20 20 20  ed<=p2 );       
12d80 20 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 61 6c    /* Conditional
12d90 20 73 6b 69 70 70 65 64 20 2a 2f 0a 20 20 20 20   skipped */.    
12da0 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72  goto op_column_r
12db0 65 61 64 5f 68 65 61 64 65 72 3b 0a 20 20 7d 0a  ead_header;.  }.
12dc0 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
12dd0 61 74 20 6c 65 61 73 74 20 74 68 65 20 66 69 72  at least the fir
12de0 73 74 20 70 32 2b 31 20 65 6e 74 72 69 65 73 20  st p2+1 entries 
12df0 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 68 61  of the header ha
12e00 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20 70 61 72  ve been.  ** par
12e10 73 65 64 20 61 6e 64 20 76 61 6c 69 64 20 69 6e  sed and valid in
12e20 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 69 6e 20  formation is in 
12e30 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64 20 70 43  aOffset[] and pC
12e40 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a  ->aType[]..  */.
12e50 20 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61    if( pC->nHdrPa
12e60 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20  rsed<=p2 ){.    
12e70 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6d  /* If there is m
12e80 6f 72 65 20 68 65 61 64 65 72 20 61 76 61 69 6c  ore header avail
12e90 61 62 6c 65 20 66 6f 72 20 70 61 72 73 69 6e 67  able for parsing
12ea0 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20   in the record, 
12eb0 74 72 79 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78  try.    ** to ex
12ec0 74 72 61 63 74 20 61 64 64 69 74 69 6f 6e 61 6c  tract additional
12ed0 20 66 69 65 6c 64 73 20 75 70 20 74 68 72 6f 75   fields up throu
12ee0 67 68 20 74 68 65 20 70 32 2b 31 2d 74 68 20 66  gh the p2+1-th f
12ef0 69 65 6c 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20  ield .    */.   
12f00 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f   op_column_read_
12f10 68 65 61 64 65 72 3a 0a 20 20 20 20 69 66 28 20  header:.    if( 
12f20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3c 61  pC->iHdrOffset<a
12f30 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a 20 20 20  Offset[0] ){.   
12f40 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20     /* Make sure 
12f50 7a 44 61 74 61 20 70 6f 69 6e 74 73 20 74 6f 20  zData points to 
12f60 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20 72 65  enough of the re
12f70 63 6f 72 64 20 74 6f 20 63 6f 76 65 72 20 74 68  cord to cover th
12f80 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20  e header. */.   
12f90 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d     if( pC->aRow=
12fa0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 65  =0 ){.        me
12fb0 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73  mset(&sMem, 0, s
12fc0 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20  izeof(sMem));.  
12fd0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
12fe0 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
12ff0 65 65 28 70 43 72 73 72 2c 20 30 2c 20 61 4f 66  ee(pCrsr, 0, aOf
13000 66 73 65 74 5b 30 5d 2c 20 0a 20 20 20 20 20 20  fset[0], .      
13010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21                 !
13030 70 43 2d 3e 69 73 54 61 62 6c 65 2c 20 26 73 4d  pC->isTable, &sM
13040 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  em);.        if(
13050 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
13060 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  {.          goto
13070 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72   op_column_error
13080 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
13090 20 20 20 20 7a 44 61 74 61 20 3d 20 28 75 38 2a      zData = (u8*
130a0 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d  )sMem.z;.      }
130b0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 44  else{.        zD
130c0 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a  ata = pC->aRow;.
130d0 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20        }.  .     
130e0 20 2f 2a 20 46 69 6c 6c 20 69 6e 20 70 43 2d 3e   /* Fill in pC->
130f0 61 54 79 70 65 5b 69 5d 20 61 6e 64 20 61 4f 66  aType[i] and aOf
13100 66 73 65 74 5b 69 5d 20 76 61 6c 75 65 73 20 74  fset[i] values t
13110 68 72 6f 75 67 68 20 74 68 65 20 70 32 2d 74 68  hrough the p2-th
13120 20 66 69 65 6c 64 2e 20 2a 2f 0a 20 20 20 20 20   field. */.     
13130 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61 72   i = pC->nHdrPar
13140 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66 73 65  sed;.      offse
13150 74 20 3d 20 61 4f 66 66 73 65 74 5b 69 5d 3b 0a  t = aOffset[i];.
13160 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 44 61        zHdr = zDa
13170 74 61 20 2b 20 70 43 2d 3e 69 48 64 72 4f 66 66  ta + pC->iHdrOff
13180 73 65 74 3b 0a 20 20 20 20 20 20 7a 45 6e 64 48  set;.      zEndH
13190 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 61 4f 66  dr = zData + aOf
131a0 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20 20 20 61  fset[0];.      a
131b0 73 73 65 72 74 28 20 69 3c 3d 70 32 20 26 26 20  ssert( i<=p2 && 
131c0 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a  zHdr<zEndHdr );.
131d0 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20        do{.      
131e0 20 20 69 66 28 20 7a 48 64 72 5b 30 5d 3c 30 78    if( zHdr[0]<0x
131f0 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  80 ){.          
13200 74 20 3d 20 7a 48 64 72 5b 30 5d 3b 0a 20 20 20  t = zHdr[0];.   
13210 20 20 20 20 20 20 20 7a 48 64 72 2b 2b 3b 0a 20         zHdr++;. 
13220 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
13230 20 20 20 20 20 20 20 20 7a 48 64 72 20 2b 3d 20          zHdr += 
13240 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
13250 33 32 28 7a 48 64 72 2c 20 26 74 29 3b 0a 20 20  32(zHdr, &t);.  
13260 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
13270 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 3d 20 74  pC->aType[i] = t
13280 3b 0a 20 20 20 20 20 20 20 20 73 7a 46 69 65 6c  ;.        szFiel
13290 64 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  d = sqlite3VdbeS
132a0 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b  erialTypeLen(t);
132b0 0a 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20  .        offset 
132c0 2b 3d 20 73 7a 46 69 65 6c 64 3b 0a 20 20 20 20  += szField;.    
132d0 20 20 20 20 69 66 28 20 6f 66 66 73 65 74 3c 73      if( offset<s
132e0 7a 46 69 65 6c 64 20 29 7b 20 20 2f 2a 20 54 72  zField ){  /* Tr
132f0 75 65 20 69 66 20 6f 66 66 73 65 74 20 6f 76 65  ue if offset ove
13300 72 66 6c 6f 77 73 20 2a 2f 0a 20 20 20 20 20 20  rflows */.      
13310 20 20 20 20 7a 48 64 72 20 3d 20 26 7a 45 6e 64      zHdr = &zEnd
13320 48 64 72 5b 31 5d 3b 20 20 2f 2a 20 46 6f 72 63  Hdr[1];  /* Forc
13330 65 73 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  es SQLITE_CORRUP
13340 54 20 72 65 74 75 72 6e 20 62 65 6c 6f 77 20 2a  T return below *
13350 2f 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  /.          brea
13360 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  k;.        }.   
13370 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20       i++;.      
13380 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 6f    aOffset[i] = o
13390 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7d 77 68  ffset;.      }wh
133a0 69 6c 65 28 20 69 3c 3d 70 32 20 26 26 20 7a 48  ile( i<=p2 && zH
133b0 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20  dr<zEndHdr );.  
133c0 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73      pC->nHdrPars
133d0 65 64 20 3d 20 69 3b 0a 20 20 20 20 20 20 70 43  ed = i;.      pC
133e0 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20 28  ->iHdrOffset = (
133f0 75 33 32 29 28 7a 48 64 72 20 2d 20 7a 44 61 74  u32)(zHdr - zDat
13400 61 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 43  a);.      if( pC
13410 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20  ->aRow==0 ){.   
13420 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
13430 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d  MemRelease(&sMem
13440 29 3b 0a 20 20 20 20 20 20 20 20 73 4d 65 6d 2e  );.        sMem.
13450 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
13460 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  ;.      }.  .   
13470 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72 64     /* The record
13480 20 69 73 20 63 6f 72 72 75 70 74 20 69 66 20 61   is corrupt if a
13490 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ny of the follow
134a0 69 6e 67 20 61 72 65 20 74 72 75 65 3a 0a 20 20  ing are true:.  
134b0 20 20 20 20 2a 2a 20 28 31 29 20 74 68 65 20 62      ** (1) the b
134c0 79 74 65 73 20 6f 66 20 74 68 65 20 68 65 61 64  ytes of the head
134d0 65 72 20 65 78 74 65 6e 64 20 70 61 73 74 20 74  er extend past t
134e0 68 65 20 64 65 63 6c 61 72 65 64 20 68 65 61 64  he declared head
134f0 65 72 20 73 69 7a 65 0a 20 20 20 20 20 20 2a 2a  er size.      **
13500 20 20 20 20 20 20 20 20 20 20 28 7a 48 64 72 3e            (zHdr>
13510 7a 45 6e 64 48 64 72 29 0a 20 20 20 20 20 20 2a  zEndHdr).      *
13520 2a 20 28 32 29 20 74 68 65 20 65 6e 74 69 72 65  * (2) the entire
13530 20 68 65 61 64 65 72 20 77 61 73 20 75 73 65 64   header was used
13540 20 62 75 74 20 6e 6f 74 20 61 6c 6c 20 64 61 74   but not all dat
13550 61 20 77 61 73 20 75 73 65 64 0a 20 20 20 20 20  a was used.     
13560 20 2a 2a 20 20 20 20 20 20 20 20 20 20 28 7a 48   **          (zH
13570 64 72 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20 6f  dr==zEndHdr && o
13580 66 66 73 65 74 21 3d 70 43 2d 3e 70 61 79 6c 6f  ffset!=pC->paylo
13590 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20 2a 2a  adSize).      **
135a0 20 28 33 29 20 74 68 65 20 65 6e 64 20 6f 66 20   (3) the end of 
135b0 74 68 65 20 64 61 74 61 20 65 78 74 65 6e 64 73  the data extends
135c0 20 62 65 79 6f 6e 64 20 74 68 65 20 65 6e 64 20   beyond the end 
135d0 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20  of the record.. 
135e0 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20       **         
135f0 20 28 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e 70   (offset > pC->p
13600 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20  ayloadSize).    
13610 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28    */.      if( (
13620 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20 26 26  zHdr>=zEndHdr &&
13630 20 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72 20 7c   (zHdr>zEndHdr |
13640 7c 20 6f 66 66 73 65 74 21 3d 70 43 2d 3e 70 61  | offset!=pC->pa
13650 79 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20 20 20  yloadSize)).    
13660 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 20 3e 20     || (offset > 
13670 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29  pC->payloadSize)
13680 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20  .      ){.      
13690 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
136a0 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20  RRUPT_BKPT;.    
136b0 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
136c0 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  mn_error;.      
136d0 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20  }.    }..    /* 
136e0 49 66 20 61 66 74 65 72 20 74 72 79 69 6e 67 20  If after trying 
136f0 74 6f 20 65 78 74 72 61 20 6e 65 77 20 65 6e 74  to extra new ent
13700 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 68 65  ries from the he
13710 61 64 65 72 2c 20 6e 48 64 72 50 61 72 73 65 64  ader, nHdrParsed
13720 20 69 73 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c   is.    ** still
13730 20 6e 6f 74 20 75 70 20 74 6f 20 70 32 2c 20 74   not up to p2, t
13740 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74  hat means that t
13750 68 65 20 72 65 63 6f 72 64 20 68 61 73 20 66 65  he record has fe
13760 77 65 72 20 74 68 61 6e 20 70 32 0a 20 20 20 20  wer than p2.    
13770 2a 2a 20 63 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20  ** columns.  So 
13780 74 68 65 20 72 65 73 75 6c 74 20 77 69 6c 6c 20  the result will 
13790 62 65 20 65 69 74 68 65 72 20 74 68 65 20 64 65  be either the de
137a0 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 72 20 61  fault value or a
137b0 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20   NULL..    */.  
137c0 20 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61    if( pC->nHdrPa
137d0 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20  rsed<=p2 ){.    
137e0 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
137f0 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20  e==P4_MEM ){.   
13800 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
13810 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
13820 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d  Dest, pOp->p4.pM
13830 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b  em, MEM_Static);
13840 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
13850 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
13860 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73  eMemSetNull(pDes
13870 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  t);.      }.    
13880 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
13890 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  _out;.    }.  }.
138a0 0a 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68  .  /* Extract th
138b0 65 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68  e content for th
138c0 65 20 70 32 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e  e p2+1-th column
138d0 2e 20 20 43 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f  .  Control can o
138e0 6e 6c 79 0a 20 20 2a 2a 20 72 65 61 63 68 20 74  nly.  ** reach t
138f0 68 69 73 20 70 6f 69 6e 74 20 69 66 20 61 4f 66  his point if aOf
13900 66 73 65 74 5b 70 32 5d 2c 20 61 4f 66 66 73 65  fset[p2], aOffse
13910 74 5b 70 32 2b 31 5d 2c 20 61 6e 64 20 70 43 2d  t[p2+1], and pC-
13920 3e 61 54 79 70 65 5b 70 32 5d 20 61 72 65 0a 20  >aType[p2] are. 
13930 20 2a 2a 20 61 6c 6c 20 76 61 6c 69 64 2e 0a 20   ** all valid.. 
13940 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 32   */.  assert( p2
13950 3c 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20  <pC->nHdrParsed 
13960 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d  );.  assert( rc=
13970 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20  =SQLITE_OK );.  
13980 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56  assert( sqlite3V
13990 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72  dbeCheckMemInvar
139a0 69 61 6e 74 73 28 70 44 65 73 74 29 20 29 3b 0a  iants(pDest) );.
139b0 20 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79 6e    if( VdbeMemDyn
139c0 61 6d 69 63 28 70 44 65 73 74 29 20 29 20 73 71  amic(pDest) ) sq
139d0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
139e0 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 74 20  ull(pDest);.  t 
139f0 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 3b  = pC->aType[p2];
13a00 0a 20 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f 77  .  if( pC->szRow
13a10 3e 3d 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 20  >=aOffset[p2+1] 
13a20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 69  ){.    /* This i
13a30 73 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  s the common cas
13a40 65 20 77 68 65 72 65 20 74 68 65 20 64 65 73 69  e where the desi
13a50 72 65 64 20 63 6f 6e 74 65 6e 74 20 66 69 74 73  red content fits
13a60 20 6f 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   on the original
13a70 0a 20 20 20 20 2a 2a 20 70 61 67 65 20 2d 20 77  .    ** page - w
13a80 68 65 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74  here the content
13a90 20 69 73 20 6e 6f 74 20 6f 6e 20 61 6e 20 6f 76   is not on an ov
13aa0 65 72 66 6c 6f 77 20 70 61 67 65 20 2a 2f 0a 20  erflow page */. 
13ab0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
13ac0 72 69 61 6c 47 65 74 28 70 43 2d 3e 61 52 6f 77  rialGet(pC->aRow
13ad0 2b 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 74 2c  +aOffset[p2], t,
13ae0 20 70 44 65 73 74 29 3b 0a 20 20 7d 65 6c 73 65   pDest);.  }else
13af0 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 62 72  {.    /* This br
13b00 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c  anch happens onl
13b10 79 20 77 68 65 6e 20 63 6f 6e 74 65 6e 74 20 69  y when content i
13b20 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61  s on overflow pa
13b30 67 65 73 20 2a 2f 0a 20 20 20 20 69 66 28 20 28  ges */.    if( (
13b40 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c  (pOp->p5 & (OPFL
13b50 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46  AG_LENGTHARG|OPF
13b60 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 29 21  LAG_TYPEOFARG))!
13b70 3d 30 0a 20 20 20 20 20 20 20 20 20 20 26 26 20  =0.          && 
13b80 28 28 74 3e 3d 31 32 20 26 26 20 28 74 26 31 29  ((t>=12 && (t&1)
13b90 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35  ==0) || (pOp->p5
13ba0 20 26 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46   & OPFLAG_TYPEOF
13bb0 41 52 47 29 21 3d 30 29 29 0a 20 20 20 20 20 7c  ARG)!=0)).     |
13bc0 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33  | (len = sqlite3
13bd0 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65  VdbeSerialTypeLe
13be0 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20 29 7b 0a  n(t))==0.    ){.
13bf0 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74        /* Content
13c00 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74 20 66   is irrelevant f
13c10 6f 72 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 31  or.      **    1
13c20 2e 20 74 68 65 20 74 79 70 65 6f 66 28 29 20 66  . the typeof() f
13c30 75 6e 63 74 69 6f 6e 2c 0a 20 20 20 20 20 20 2a  unction,.      *
13c40 2a 20 20 20 20 32 2e 20 74 68 65 20 6c 65 6e 67  *    2. the leng
13c50 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69  th(X) function i
13c60 66 20 58 20 69 73 20 61 20 62 6c 6f 62 2c 20 61  f X is a blob, a
13c70 6e 64 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 33  nd.      **    3
13c80 2e 20 69 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  . if the content
13c90 20 6c 65 6e 67 74 68 20 69 73 20 7a 65 72 6f 2e   length is zero.
13ca0 0a 20 20 20 20 20 20 2a 2a 20 53 6f 20 77 65 20  .      ** So we 
13cb0 6d 69 67 68 74 20 61 73 20 77 65 6c 6c 20 75 73  might as well us
13cc0 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20  e bogus content 
13cd0 72 61 74 68 65 72 20 74 68 61 6e 20 72 65 61 64  rather than read
13ce0 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e  ing.      ** con
13cf0 74 65 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e 20  tent from disk. 
13d00 20 4e 55 4c 4c 20 77 69 6c 6c 20 77 6f 72 6b 20   NULL will work 
13d10 66 6f 72 20 74 68 65 20 76 61 6c 75 65 20 66 6f  for the value fo
13d20 72 20 73 74 72 69 6e 67 73 0a 20 20 20 20 20 20  r strings.      
13d30 2a 2a 20 61 6e 64 20 62 6c 6f 62 73 20 61 6e 64  ** and blobs and
13d40 20 77 68 61 74 65 76 65 72 20 69 73 20 69 6e 20   whatever is in 
13d50 74 68 65 20 70 61 79 6c 6f 61 64 53 69 7a 65 36  the payloadSize6
13d60 34 20 76 61 72 69 61 62 6c 65 0a 20 20 20 20 20  4 variable.     
13d70 20 2a 2a 20 77 69 6c 6c 20 77 6f 72 6b 20 66 6f   ** will work fo
13d80 72 20 65 76 65 72 79 74 68 69 6e 67 20 65 6c 73  r everything els
13d90 65 2e 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69  e. */.      sqli
13da0 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
13db0 28 74 3c 3d 31 33 20 3f 20 28 75 38 2a 29 26 70  (t<=13 ? (u8*)&p
13dc0 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 3a 20 30  ayloadSize64 : 0
13dd0 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20  , t, pDest);.   
13de0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
13df0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
13e00 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72  mFromBtree(pCrsr
13e10 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c  , aOffset[p2], l
13e20 65 6e 2c 20 21 70 43 2d 3e 69 73 54 61 62 6c 65  en, !pC->isTable
13e30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
13e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e50 20 20 20 20 20 70 44 65 73 74 29 3b 0a 20 20 20       pDest);.   
13e60 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
13e70 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
13e80 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65  goto op_column_e
13e90 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
13ea0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
13eb0 65 72 69 61 6c 47 65 74 28 28 63 6f 6e 73 74 20  erialGet((const 
13ec0 75 38 2a 29 70 44 65 73 74 2d 3e 7a 2c 20 74 2c  u8*)pDest->z, t,
13ed0 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 70   pDest);.      p
13ee0 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  Dest->flags &= ~
13ef0 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20 20 7d  MEM_Ephem;.    }
13f00 0a 20 20 7d 0a 20 20 70 44 65 73 74 2d 3e 65 6e  .  }.  pDest->en
13f10 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 0a 6f  c = encoding;..o
13f20 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20  p_column_out:.  
13f30 2f 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e  /* If the column
13f40 20 76 61 6c 75 65 20 69 73 20 61 6e 20 65 70 68   value is an eph
13f50 65 6d 65 72 61 6c 20 73 74 72 69 6e 67 2c 20 67  emeral string, g
13f60 6f 20 61 68 65 61 64 20 61 6e 64 20 70 65 72 73  o ahead and pers
13f70 69 73 74 0a 20 20 2a 2a 20 74 68 61 74 20 73 74  ist.  ** that st
13f80 72 69 6e 67 20 69 6e 20 63 61 73 65 20 74 68 65  ring in case the
13f90 20 63 75 72 73 6f 72 20 6d 6f 76 65 73 20 62 65   cursor moves be
13fa0 66 6f 72 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20  fore the column 
13fb0 76 61 6c 75 65 20 69 73 0a 20 20 2a 2a 20 75 73  value is.  ** us
13fc0 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ed.  The followi
13fd0 6e 67 20 63 6f 64 65 20 64 6f 65 73 20 74 68 65  ng code does the
13fe0 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 44   equivalent of D
13ff0 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 29 0a  eephemeralize().
14000 20 20 2a 2a 20 62 75 74 20 64 6f 65 73 20 69 74    ** but does it
14010 20 66 61 73 74 65 72 2e 20 2a 2f 0a 20 20 69 66   faster. */.  if
14020 28 20 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20  ( (pDest->flags 
14030 26 20 4d 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20  & MEM_Ephem)!=0 
14040 26 26 20 70 44 65 73 74 2d 3e 7a 20 29 7b 0a 20  && pDest->z ){. 
14050 20 20 20 66 78 20 3d 20 70 44 65 73 74 2d 3e 66     fx = pDest->f
14060 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
14070 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 20 20 61  MEM_Blob);.    a
14080 73 73 65 72 74 28 20 66 78 21 3d 30 20 29 3b 0a  ssert( fx!=0 );.
14090 20 20 20 20 7a 44 61 74 61 20 3d 20 28 63 6f 6e      zData = (con
140a0 73 74 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a 3b  st u8*)pDest->z;
140b0 0a 20 20 20 20 6c 65 6e 20 3d 20 70 44 65 73 74  .    len = pDest
140c0 2d 3e 6e 3b 0a 20 20 20 20 69 66 28 20 73 71 6c  ->n;.    if( sql
140d0 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72  ite3VdbeMemClear
140e0 41 6e 64 52 65 73 69 7a 65 28 70 44 65 73 74 2c  AndResize(pDest,
140f0 20 6c 65 6e 2b 32 29 20 29 20 67 6f 74 6f 20 6e   len+2) ) goto n
14100 6f 5f 6d 65 6d 3b 0a 20 20 20 20 6d 65 6d 63 70  o_mem;.    memcp
14110 79 28 70 44 65 73 74 2d 3e 7a 2c 20 7a 44 61 74  y(pDest->z, zDat
14120 61 2c 20 6c 65 6e 29 3b 0a 20 20 20 20 70 44 65  a, len);.    pDe
14130 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a  st->z[len] = 0;.
14140 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e      pDest->z[len
14150 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 70 44 65  +1] = 0;.    pDe
14160 73 74 2d 3e 66 6c 61 67 73 20 3d 20 66 78 7c 4d  st->flags = fx|M
14170 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d 0a 6f 70 5f  EM_Term;.  }.op_
14180 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3a 0a 20 20  column_error:.  
14190 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
141a0 49 5a 45 28 70 44 65 73 74 29 3b 0a 20 20 52 45  IZE(pDest);.  RE
141b0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
141c0 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20  ->p3, pDest);.  
141d0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
141e0 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50 31  ode: Affinity P1
141f0 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
14200 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74 79  nopsis: affinity
14210 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a  (r[P1@P2]).**.**
14220 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69 65   Apply affinitie
14230 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66 20  s to a range of 
14240 50 32 20 72 65 67 69 73 74 65 72 73 20 73 74 61  P2 registers sta
14250 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a  rting with P1..*
14260 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74 72  *.** P4 is a str
14270 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63  ing that is P2 c
14280 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20  haracters long. 
14290 54 68 65 20 6e 74 68 20 63 68 61 72 61 63 74 65  The nth characte
142a0 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69  r of the.** stri
142b0 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65  ng indicates the
142c0 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   column affinity
142d0 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20   that should be 
142e0 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68  used for the nth
142f0 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  .** memory cell 
14300 69 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f  in the range..*/
14310 0a 63 61 73 65 20 4f 50 5f 41 66 66 69 6e 69 74  .case OP_Affinit
14320 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  y: {.  const cha
14330 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20  r *zAffinity;   
14340 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
14350 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f  to be applied */
14360 0a 20 20 63 68 61 72 20 63 41 66 66 3b 20 20 20  .  char cAff;   
14370 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
14380 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65   single characte
14390 72 20 6f 66 20 61 66 66 69 6e 69 74 79 20 2a 2f  r of affinity */
143a0 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20  ..  zAffinity = 
143b0 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73  pOp->p4.z;.  ass
143c0 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 21 3d  ert( zAffinity!=
143d0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a  0 );.  assert( z
143e0 41 66 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32  Affinity[pOp->p2
143f0 5d 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d  ]==0 );.  pIn1 =
14400 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
14410 0a 20 20 77 68 69 6c 65 28 20 28 63 41 66 66 20  .  while( (cAff 
14420 3d 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29  = *(zAffinity++)
14430 29 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  )!=0 ){.    asse
14440 72 74 28 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e  rt( pIn1 <= &p->
14450 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  aMem[(p->nMem-p-
14460 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20  >nCursor)] );.  
14470 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
14480 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20  alid(pIn1) );.  
14490 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
144a0 70 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e 63 6f  pIn1, cAff, enco
144b0 64 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b  ding);.    pIn1+
144c0 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  +;.  }.  break;.
144d0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61  }../* Opcode: Ma
144e0 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32 20 50  keRecord P1 P2 P
144f0 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
14500 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65 63 28  is: r[P3]=mkrec(
14510 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  r[P1@P2]).**.** 
14520 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69 73  Convert P2 regis
14530 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  ters beginning w
14540 69 74 68 20 50 31 20 69 6e 74 6f 20 74 68 65 20  ith P1 into the 
14550 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a  [record format].
14560 2a 2a 20 75 73 65 20 61 73 20 61 20 64 61 74 61  ** use as a data
14570 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61 74   record in a dat
14580 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 61  abase table or a
14590 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e  s a key.** in an
145a0 20 69 6e 64 65 78 2e 20 20 54 68 65 20 4f 50 5f   index.  The OP_
145b0 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61  Column opcode ca
145c0 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72 65 63  n decode the rec
145d0 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a  ord later..**.**
145e0 20 50 34 20 6d 61 79 20 62 65 20 61 20 73 74 72   P4 may be a str
145f0 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63  ing that is P2 c
14600 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20  haracters long. 
14610 20 54 68 65 20 6e 74 68 20 63 68 61 72 61 63 74   The nth charact
14620 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72  er of the.** str
14630 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68  ing indicates th
14640 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  e column affinit
14650 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65  y that should be
14660 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74   used for the nt
14670 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68  h.** field of th
14680 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a  e index key..**.
14690 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66  ** The mapping f
146a0 72 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f  rom character to
146b0 20 61 66 66 69 6e 69 74 79 20 69 73 20 67 69 76   affinity is giv
146c0 65 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54 45  en by the SQLITE
146d0 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20  _AFF_.** macros 
146e0 64 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74  defined in sqlit
146f0 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66  eInt.h..**.** If
14700 20 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e   P4 is NULL then
14710 20 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64   all index field
14720 73 20 68 61 76 65 20 74 68 65 20 61 66 66 69 6e  s have the affin
14730 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73  ity NONE..*/.cas
14740 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a  e OP_MakeRecord:
14750 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65 63   {.  u8 *zNewRec
14760 6f 72 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ord;        /* A
14770 20 62 75 66 66 65 72 20 74 6f 20 68 6f 6c 64 20   buffer to hold 
14780 74 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 65  the data for the
14790 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20   new record */. 
147a0 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20   Mem *pRec;     
147b0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
147c0 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75  ew record */.  u
147d0 36 34 20 6e 44 61 74 61 3b 20 20 20 20 20 20 20  64 nData;       
147e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
147f0 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  of bytes of data
14800 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20   space */.  int 
14810 6e 48 64 72 3b 20 20 20 20 20 20 20 20 20 20 20  nHdr;           
14820 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14830 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20  bytes of header 
14840 73 70 61 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e  space */.  i64 n
14850 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  Byte;           
14860 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20    /* Data space 
14870 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
14880 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  s record */.  in
14890 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20  t nZero;        
148a0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
148b0 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20  f zero bytes at 
148c0 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72  the end of the r
148d0 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecord */.  int n
148e0 56 61 72 69 6e 74 3b 20 20 20 20 20 20 20 20 20  Varint;         
148f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
14900 79 74 65 73 20 69 6e 20 61 20 76 61 72 69 6e 74  ytes in a varint
14910 20 2a 2f 0a 20 20 75 33 32 20 73 65 72 69 61 6c   */.  u32 serial
14920 5f 74 79 70 65 3b 20 20 20 20 20 20 20 2f 2a 20  _type;       /* 
14930 54 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20  Type field */.  
14940 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20 20  Mem *pData0;    
14950 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
14960 66 69 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62  field to be comb
14970 69 6e 65 64 20 69 6e 74 6f 20 74 68 65 20 72 65  ined into the re
14980 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  cord */.  Mem *p
14990 4c 61 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Last;           
149a0 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64 20 6f   /* Last field o
149b0 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  f the record */.
149c0 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20    int nField;   
149d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
149e0 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20  er of fields in 
149f0 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
14a00 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b  char *zAffinity;
14a10 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66         /* The af
14a20 66 69 6e 69 74 79 20 73 74 72 69 6e 67 20 66 6f  finity string fo
14a30 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  r the record */.
14a40 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61    int file_forma
14a50 74 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65  t;       /* File
14a60 20 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66   format to use f
14a70 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  or encoding */. 
14a80 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20   int i;         
14a90 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
14aa0 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63   used in zNewRec
14ab0 6f 72 64 5b 5d 20 68 65 61 64 65 72 20 2a 2f 0a  ord[] header */.
14ac0 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20    int j;        
14ad0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
14ae0 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65  e used in zNewRe
14af0 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a  cord[] content *
14b00 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20  /.  int len;    
14b10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65             /* Le
14b20 6e 67 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20  ngth of a field 
14b30 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e  */..  /* Assumin
14b40 67 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e  g the record con
14b50 74 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20  tains N fields, 
14b60 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61  the record forma
14b70 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b  t looks.  ** lik
14b80 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a  e this:.  **.  *
14b90 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
14ba0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14bb0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14bc0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14bd0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20  ----------.  ** 
14be0 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79 70  | hdr-size | typ
14bf0 65 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e  e 0 | type 1 | .
14c00 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20  .. | type N-1 | 
14c10 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61  data0 | ... | da
14c20 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d  ta N-1 | .  ** -
14c30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14c40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14c50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14c60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14c70 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a  -------.  **.  *
14c80 2a 20 44 61 74 61 28 30 29 20 69 73 20 74 61 6b  * Data(0) is tak
14c90 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  en from register
14ca0 20 50 31 2e 20 20 44 61 74 61 28 31 29 20 63 6f   P1.  Data(1) co
14cb0 6d 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74 65  mes from registe
14cc0 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20  r P1+1.  ** and 
14cd0 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20  so forth..  **. 
14ce0 20 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66 69   ** Each type fi
14cf0 65 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74 20  eld is a varint 
14d00 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65  representing the
14d10 20 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20   serial type of 
14d20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73  the .  ** corres
14d30 70 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65  ponding data ele
14d40 6d 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65  ment (see sqlite
14d50 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28  3VdbeSerialType(
14d60 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72  )). The.  ** hdr
14d70 2d 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61  -size field is a
14d80 6c 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69  lso a varint whi
14d90 63 68 20 69 73 20 74 68 65 20 6f 66 66 73 65 74  ch is the offset
14da0 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
14db0 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20  ing.  ** of the 
14dc0 72 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e  record to data0.
14dd0 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20  .  */.  nData = 
14de0 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  0;         /* Nu
14df0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
14e00 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20   data space */. 
14e10 20 6e 48 64 72 20 3d 20 30 3b 20 20 20 20 20 20   nHdr = 0;      
14e20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
14e30 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72   bytes of header
14e40 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 5a 65 72   space */.  nZer
14e50 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  o = 0;         /
14e60 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f  * Number of zero
14e70 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e   bytes at the en
14e80 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
14e90 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  */.  nField = pO
14ea0 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69  p->p1;.  zAffini
14eb0 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  ty = pOp->p4.z;.
14ec0 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64    assert( nField
14ed0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20  >0 && pOp->p2>0 
14ee0 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c  && pOp->p2+nFiel
14ef0 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  d<=(p->nMem-p->n
14f00 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 70  Cursor)+1 );.  p
14f10 44 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b 6e 46  Data0 = &aMem[nF
14f20 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20  ield];.  nField 
14f30 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61  = pOp->p2;.  pLa
14f40 73 74 20 3d 20 26 70 44 61 74 61 30 5b 6e 46 69  st = &pData0[nFi
14f50 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66  eld-1];.  file_f
14f60 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72  ormat = p->minWr
14f70 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a  iteFileFormat;..
14f80 20 20 2f 2a 20 49 64 65 6e 74 69 66 79 20 74 68    /* Identify th
14f90 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
14fa0 72 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  r */.  assert( p
14fb0 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c  Op->p3<pOp->p1 |
14fc0 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e  | pOp->p3>=pOp->
14fd0 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20  p1+pOp->p2 );.  
14fe0 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
14ff0 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p3];.  memAbou
15000 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
15010 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70 6c 79 20  t);..  /* Apply 
15020 74 68 65 20 72 65 71 75 65 73 74 65 64 20 61 66  the requested af
15030 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c 20 69 6e  finity to all in
15040 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61 73 73 65  puts.  */.  asse
15050 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73  rt( pData0<=pLas
15060 74 20 29 3b 0a 20 20 69 66 28 20 7a 41 66 66 69  t );.  if( zAffi
15070 6e 69 74 79 20 29 7b 0a 20 20 20 20 70 52 65 63  nity ){.    pRec
15080 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 20 20 64   = pData0;.    d
15090 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66  o{.      applyAf
150a0 66 69 6e 69 74 79 28 70 52 65 63 2b 2b 2c 20 2a  finity(pRec++, *
150b0 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 2c 20 65  (zAffinity++), e
150c0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20  ncoding);.      
150d0 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74  assert( zAffinit
150e0 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52 65 63 3c  y[0]==0 || pRec<
150f0 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20 20 7d 77  =pLast );.    }w
15100 68 69 6c 65 28 20 7a 41 66 66 69 6e 69 74 79 5b  hile( zAffinity[
15110 30 5d 20 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  0] );.  }..  /* 
15120 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65  Loop through the
15130 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77   elements that w
15140 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20  ill make up the 
15150 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65  record to figure
15160 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75  .  ** out how mu
15170 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71 75  ch space is requ
15180 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77  ired for the new
15190 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20   record..  */.  
151a0 70 52 65 63 20 3d 20 70 4c 61 73 74 3b 0a 20 20  pRec = pLast;.  
151b0 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  do{.    assert( 
151c0 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29  memIsValid(pRec)
151d0 20 29 3b 0a 20 20 20 20 70 52 65 63 2d 3e 75 54   );.    pRec->uT
151e0 65 6d 70 20 3d 20 73 65 72 69 61 6c 5f 74 79 70  emp = serial_typ
151f0 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  e = sqlite3VdbeS
15200 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20  erialType(pRec, 
15210 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20  file_format);.  
15220 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56    len = sqlite3V
15230 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
15240 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20  (serial_type);. 
15250 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
15260 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b  gs & MEM_Zero ){
15270 0a 20 20 20 20 20 20 69 66 28 20 6e 44 61 74 61  .      if( nData
15280 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
15290 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64  te3VdbeMemExpand
152a0 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20 20 20  Blob(pRec);.    
152b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
152c0 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e   nZero += pRec->
152d0 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 20  u.nZero;.       
152e0 20 6c 65 6e 20 2d 3d 20 70 52 65 63 2d 3e 75 2e   len -= pRec->u.
152f0 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 7d 0a 20  nZero;.      }. 
15300 20 20 20 7d 0a 20 20 20 20 6e 44 61 74 61 20 2b     }.    nData +
15310 3d 20 6c 65 6e 3b 0a 20 20 20 20 74 65 73 74 63  = len;.    testc
15320 61 73 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65  ase( serial_type
15330 3d 3d 31 32 37 20 29 3b 0a 20 20 20 20 74 65 73  ==127 );.    tes
15340 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74 79  tcase( serial_ty
15350 70 65 3d 3d 31 32 38 20 29 3b 0a 20 20 20 20 6e  pe==128 );.    n
15360 48 64 72 20 2b 3d 20 73 65 72 69 61 6c 5f 74 79  Hdr += serial_ty
15370 70 65 3c 3d 31 32 37 20 3f 20 31 20 3a 20 73 71  pe<=127 ? 1 : sq
15380 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 73  lite3VarintLen(s
15390 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 7d  erial_type);.  }
153a0 77 68 69 6c 65 28 20 28 2d 2d 70 52 65 63 29 3e  while( (--pRec)>
153b0 3d 70 44 61 74 61 30 20 29 3b 0a 0a 20 20 2f 2a  =pData0 );..  /*
153c0 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
153d0 32 32 35 36 34 2d 31 31 36 34 37 20 54 68 65 20  22564-11647 The 
153e0 68 65 61 64 65 72 20 62 65 67 69 6e 73 20 77 69  header begins wi
153f0 74 68 20 61 20 73 69 6e 67 6c 65 20 76 61 72 69  th a single vari
15400 6e 74 0a 20 20 2a 2a 20 77 68 69 63 68 20 64 65  nt.  ** which de
15410 74 65 72 6d 69 6e 65 73 20 74 68 65 20 74 6f 74  termines the tot
15420 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  al number of byt
15430 65 73 20 69 6e 20 74 68 65 20 68 65 61 64 65 72  es in the header
15440 2e 20 54 68 65 20 76 61 72 69 6e 74 0a 20 20 2a  . The varint.  *
15450 2a 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 73  * value is the s
15460 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64 65  ize of the heade
15470 72 20 69 6e 20 62 79 74 65 73 20 69 6e 63 6c 75  r in bytes inclu
15480 64 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61  ding the size va
15490 72 69 6e 74 0a 20 20 2a 2a 20 69 74 73 65 6c 66  rint.  ** itself
154a0 2e 20 2a 2f 0a 20 20 74 65 73 74 63 61 73 65 28  . */.  testcase(
154b0 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b 0a 20 20   nHdr==126 );.  
154c0 74 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d  testcase( nHdr==
154d0 31 32 37 20 29 3b 0a 20 20 69 66 28 20 6e 48 64  127 );.  if( nHd
154e0 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20 20 2f 2a  r<=126 ){.    /*
154f0 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65   The common case
15500 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20   */.    nHdr += 
15510 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
15520 2f 2a 20 52 61 72 65 20 63 61 73 65 20 6f 66 20  /* Rare case of 
15530 61 20 72 65 61 6c 6c 79 20 6c 61 72 67 65 20 68  a really large h
15540 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 6e 56 61  eader */.    nVa
15550 72 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56 61  rint = sqlite3Va
15560 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20  rintLen(nHdr);. 
15570 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69     nHdr += nVari
15580 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e 56 61 72  nt;.    if( nVar
15590 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69 6e  int<sqlite3Varin
155a0 74 4c 65 6e 28 6e 48 64 72 29 20 29 20 6e 48 64  tLen(nHdr) ) nHd
155b0 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65  r++;.  }.  nByte
155c0 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 3b 0a 20   = nHdr+nData;. 
155d0 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61   if( nByte>db->a
155e0 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
155f0 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
15600 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
15610 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73    }..  /* Make s
15620 75 72 65 20 74 68 65 20 6f 75 74 70 75 74 20 72  ure the output r
15630 65 67 69 73 74 65 72 20 68 61 73 20 61 20 62 75  egister has a bu
15640 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f 75 67  ffer large enoug
15650 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a  h to store .  **
15660 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e   the new record.
15670 20 54 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   The output regi
15680 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29 20 69  ster (pOp->p3) i
15690 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f  s not allowed to
156a0 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20  .  ** be one of 
156b0 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
156c0 65 72 73 20 28 62 65 63 61 75 73 65 20 74 68 65  ers (because the
156d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20   following call 
156e0 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  to.  ** sqlite3V
156f0 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
15700 73 69 7a 65 28 29 20 63 6f 75 6c 64 20 63 6c 6f  size() could clo
15710 62 62 65 72 20 74 68 65 20 76 61 6c 75 65 20 62  bber the value b
15720 65 66 6f 72 65 20 69 74 20 69 73 20 75 73 65 64  efore it is used
15730 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71  )..  */.  if( sq
15740 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61  lite3VdbeMemClea
15750 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75 74 2c  rAndResize(pOut,
15760 20 28 69 6e 74 29 6e 42 79 74 65 29 20 29 7b 0a   (int)nByte) ){.
15770 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
15780 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72  .  }.  zNewRecor
15790 64 20 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e  d = (u8 *)pOut->
157a0 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20 74  z;..  /* Write t
157b0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
157c0 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 7a   = putVarint32(z
157d0 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48 64 72 29  NewRecord, nHdr)
157e0 3b 0a 20 20 6a 20 3d 20 6e 48 64 72 3b 0a 20 20  ;.  j = nHdr;.  
157f0 61 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d  assert( pData0<=
15800 70 4c 61 73 74 20 29 3b 0a 20 20 70 52 65 63 20  pLast );.  pRec 
15810 3d 20 70 44 61 74 61 30 3b 0a 20 20 64 6f 7b 0a  = pData0;.  do{.
15820 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20      serial_type 
15830 3d 20 70 52 65 63 2d 3e 75 54 65 6d 70 3b 0a 20  = pRec->uTemp;. 
15840 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f     /* EVIDENCE-O
15850 46 3a 20 52 2d 30 36 35 32 39 2d 34 37 33 36 32  F: R-06529-47362
15860 20 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 73   Following the s
15870 69 7a 65 20 76 61 72 69 6e 74 20 61 72 65 20 6f  ize varint are o
15880 6e 65 20 6f 72 20 6d 6f 72 65 0a 20 20 20 20 2a  ne or more.    *
15890 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72  * additional var
158a0 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20 63 6f  ints, one per co
158b0 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 20 20 69 20 2b  lumn. */.    i +
158c0 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 26 7a  = putVarint32(&z
158d0 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20 73 65  NewRecord[i], se
158e0 72 69 61 6c 5f 74 79 70 65 29 3b 20 20 20 20 20  rial_type);     
158f0 20 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c         /* serial
15900 20 74 79 70 65 20 2a 2f 0a 20 20 20 20 2f 2a 20   type */.    /* 
15910 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36  EVIDENCE-OF: R-6
15920 34 35 33 36 2d 35 31 37 32 38 20 54 68 65 20 76  4536-51728 The v
15930 61 6c 75 65 73 20 66 6f 72 20 65 61 63 68 20 63  alues for each c
15940 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72 65 63  olumn in the rec
15950 6f 72 64 0a 20 20 20 20 2a 2a 20 69 6d 6d 65 64  ord.    ** immed
15960 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 74 68  iately follow th
15970 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20  e header. */.   
15980 20 6a 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62   j += sqlite3Vdb
15990 65 53 65 72 69 61 6c 50 75 74 28 26 7a 4e 65 77  eSerialPut(&zNew
159a0 52 65 63 6f 72 64 5b 6a 5d 2c 20 70 52 65 63 2c  Record[j], pRec,
159b0 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 2f   serial_type); /
159c0 2a 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 7d  * content */.  }
159d0 77 68 69 6c 65 28 20 28 2b 2b 70 52 65 63 29 3c  while( (++pRec)<
159e0 3d 70 4c 61 73 74 20 29 3b 0a 20 20 61 73 73 65  =pLast );.  asse
159f0 72 74 28 20 69 3d 3d 6e 48 64 72 20 29 3b 0a 20  rt( i==nHdr );. 
15a00 20 61 73 73 65 72 74 28 20 6a 3d 3d 6e 42 79 74   assert( j==nByt
15a10 65 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  e );..  assert( 
15a20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
15a30 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
15a40 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
15a50 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e  pOut->n = (int)n
15a60 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  Byte;.  pOut->fl
15a70 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a  ags = MEM_Blob;.
15a80 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20    if( nZero ){. 
15a90 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f     pOut->u.nZero
15aa0 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f   = nZero;.    pO
15ab0 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
15ac0 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75  _Zero;.  }.  pOu
15ad0 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f  t->enc = SQLITE_
15ae0 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73  UTF8;  /* In cas
15af0 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76  e the blob is ev
15b00 65 72 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  er converted to 
15b10 74 65 78 74 20 2a 2f 0a 20 20 52 45 47 49 53 54  text */.  REGIST
15b20 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
15b30 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54  , pOut);.  UPDAT
15b40 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
15b50 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
15b60 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75  ../* Opcode: Cou
15b70 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nt P1 P2 * * *.*
15b80 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
15b90 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20  ]=count().**.** 
15ba0 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72  Store the number
15bb0 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20   of entries (an 
15bc0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20 69  integer value) i
15bd0 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
15be0 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20  ndex .** opened 
15bf0 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20  by cursor P1 in 
15c00 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23  register P2.*/.#
15c10 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
15c20 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61  IT_BTREECOUNT.ca
15c30 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20  se OP_Count: {  
15c40 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
15c50 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
15c60 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43  64 nEntry;.  BtC
15c70 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20  ursor *pCrsr;.. 
15c80 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73   pCrsr = p->apCs
15c90 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75 72  r[pOp->p1]->pCur
15ca0 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
15cb0 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72 79  Crsr );.  nEntry
15cc0 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
15cd0 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64  eded.  Only used
15ce0 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61   to silence a wa
15cf0 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d  rning. */.  rc =
15d00 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75   sqlite3BtreeCou
15d10 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72  nt(pCrsr, &nEntr
15d20 79 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  y);.  pOut->u.i 
15d30 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72 65 61  = nEntry;.  brea
15d40 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
15d50 4f 70 63 6f 64 65 3a 20 53 61 76 65 70 6f 69 6e  Opcode: Savepoin
15d60 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  t P1 * * P4 *.**
15d70 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65 61 73  .** Open, releas
15d80 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74 68  e or rollback th
15d90 65 20 73 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65  e savepoint name
15da0 64 20 62 79 20 70 61 72 61 6d 65 74 65 72 20 50  d by parameter P
15db0 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a 20  4, depending.** 
15dc0 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  on the value of 
15dd0 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20 6e 65  P1. To open a ne
15de0 77 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d  w savepoint, P1=
15df0 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73 65 20 28  =0. To release (
15e00 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20 65 78  commit) an.** ex
15e10 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74  isting savepoint
15e20 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f 20 72  , P1==1, or to r
15e30 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69 73 74  ollback an exist
15e40 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 20 50 31  ing savepoint P1
15e50 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ==2..*/.case OP_
15e60 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20 20 69  Savepoint: {.  i
15e70 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20  nt p1;          
15e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15e90 2a 20 56 61 6c 75 65 20 6f 66 20 50 31 20 6f 70  * Value of P1 op
15ea0 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61 72 20  erand */.  char 
15eb0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
15ec0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
15ed0 6d 65 20 6f 66 20 73 61 76 65 70 6f 69 6e 74 20  me of savepoint 
15ee0 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a  */.  int nName;.
15ef0 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65    Savepoint *pNe
15f00 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  w;.  Savepoint *
15f10 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 53 61  pSavepoint;.  Sa
15f20 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a 20  vepoint *pTmp;. 
15f30 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b   int iSavepoint;
15f40 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20 70 31  .  int ii;..  p1
15f50 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 4e   = pOp->p1;.  zN
15f60 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ame = pOp->p4.z;
15f70 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68  ..  /* Assert th
15f80 61 74 20 74 68 65 20 70 31 20 70 61 72 61 6d 65  at the p1 parame
15f90 74 65 72 20 69 73 20 76 61 6c 69 64 2e 20 41 6c  ter is valid. Al
15fa0 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 72 65  so that if there
15fb0 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a   is no open.  **
15fc0 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
15fd0 65 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f 74 20  en there cannot 
15fe0 62 65 20 61 6e 79 20 73 61 76 65 70 6f 69 6e 74  be any savepoint
15ff0 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  s. .  */.  asser
16000 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  t( db->pSavepoin
16010 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75 74 6f  t==0 || db->auto
16020 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61  Commit==0 );.  a
16030 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56 45 50  ssert( p1==SAVEP
16040 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d  OINT_BEGIN||p1==
16050 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
16060 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  E||p1==SAVEPOINT
16070 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20 61  _ROLLBACK );.  a
16080 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65  ssert( db->pSave
16090 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69 73 54  point || db->isT
160a0 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
160b0 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  int==0 );.  asse
160c0 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69  rt( checkSavepoi
160d0 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 20  ntCount(db) );. 
160e0 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
160f0 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66 28 20  eader );..  if( 
16100 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45  p1==SAVEPOINT_BE
16110 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28 20 64  GIN ){.    if( d
16120 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20  b->nVdbeWrite>0 
16130 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e 65  ){.      /* A ne
16140 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e  w savepoint cann
16150 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 69 66  ot be created if
16160 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76   there are activ
16170 65 20 77 72 69 74 65 20 0a 20 20 20 20 20 20 2a  e write .      *
16180 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28 69 2e  * statements (i.
16190 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77 72 69  e. open read/wri
161a0 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62  te incremental b
161b0 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20  lob handles)..  
161c0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c      */.      sql
161d0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
161e0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
161f0 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76 65  cannot open save
16200 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20 20 20  point - ".      
16210 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74    "SQL statement
16220 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b  s in progress");
16230 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
16240 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c  TE_BUSY;.    }el
16250 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20  se{.      nName 
16260 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
16270 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64  0(zName);..#ifnd
16280 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
16290 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 20 20  IRTUALTABLE.    
162a0 20 20 2f 2a 20 54 68 69 73 20 63 61 6c 6c 20 69    /* This call i
162b0 73 20 4f 6b 20 65 76 65 6e 20 69 66 20 74 68 69  s Ok even if thi
162c0 73 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61  s savepoint is a
162d0 63 74 75 61 6c 6c 79 20 61 20 74 72 61 6e 73 61  ctually a transa
162e0 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73  ction.      ** s
162f0 61 76 65 70 6f 69 6e 74 20 28 61 6e 64 20 74 68  avepoint (and th
16300 65 72 65 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e  erefore should n
16310 6f 74 20 70 72 6f 6d 70 74 20 78 53 61 76 65 70  ot prompt xSavep
16320 6f 69 6e 74 28 29 29 20 63 61 6c 6c 62 61 63 6b  oint()) callback
16330 73 2e 0a 20 20 20 20 20 20 2a 2a 20 49 66 20 74  s..      ** If t
16340 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63  his is a transac
16350 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 20 62  tion savepoint b
16360 65 69 6e 67 20 6f 70 65 6e 65 64 2c 20 69 74 20  eing opened, it 
16370 69 73 20 67 75 61 72 61 6e 74 65 65 64 0a 20 20  is guaranteed.  
16380 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20      ** that the 
16390 64 62 2d 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72  db->aVTrans[] ar
163a0 72 61 79 20 69 73 20 65 6d 70 74 79 2e 20 20 2a  ray is empty.  *
163b0 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
163c0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
163d0 30 20 7c 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73  0 || db->nVTrans
163e0 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 72 63 20  ==0 );.      rc 
163f0 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  = sqlite3VtabSav
16400 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50  epoint(db, SAVEP
16410 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20  OINT_BEGIN,.    
16420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16430 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e              db->
16440 6e 53 74 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e  nStatement+db->n
16450 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
16460 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
16470 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
16480 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23  _due_to_error;.#
16490 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20  endif..      /* 
164a0 43 72 65 61 74 65 20 61 20 6e 65 77 20 73 61 76  Create a new sav
164b0 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65  epoint structure
164c0 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20  . */.      pNew 
164d0 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
164e0 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28  cRaw(db, sizeof(
164f0 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65  Savepoint)+nName
16500 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  +1);.      if( p
16510 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70  New ){.        p
16520 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68  New->zName = (ch
16530 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20  ar *)&pNew[1];. 
16540 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e         memcpy(pN
16550 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65  ew->zName, zName
16560 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20  , nName+1);.    
16570 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  .        /* If t
16580 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20  here is no open 
16590 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
165a0 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61  n mark this as a
165b0 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20   special.       
165c0 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e   ** "transaction
165d0 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a   savepoint". */.
165e0 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e          if( db->
165f0 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20  autoCommit ){.  
16600 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
16610 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20  Commit = 0;.    
16620 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e        db->isTran
16630 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
16640 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
16650 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64  lse{.          d
16660 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b  b->nSavepoint++;
16670 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 0a  .        }.    .
16680 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20          /* Link 
16690 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  the new savepoin
166a0 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62  t into the datab
166b0 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c 69 73  ase handle's lis
166c0 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e  t. */.        pN
166d0 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e  ew->pNext = db->
166e0 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  pSavepoint;.    
166f0 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69      db->pSavepoi
16700 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20  nt = pNew;.     
16710 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72     pNew->nDeferr
16720 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  edCons = db->nDe
16730 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20  ferredCons;.    
16740 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72      pNew->nDefer
16750 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d  redImmCons = db-
16760 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
16770 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  s;.      }.    }
16780 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53  .  }else{.    iS
16790 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20  avepoint = 0;.. 
167a0 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e     /* Find the n
167b0 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20  amed savepoint. 
167c0 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73  If there is no s
167d0 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c 20 74  uch savepoint, t
167e0 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e  hen an.    ** an
167f0 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e   error is return
16800 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20  ed to the user. 
16810 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20 20   */.    for(.   
16820 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20     pSavepoint = 
16830 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
16840 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
16850 74 20 26 26 20 73 71 6c 69 74 65 33 53 74 72 49  t && sqlite3StrI
16860 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e  Cmp(pSavepoint->
16870 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20  zName, zName);. 
16880 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20       pSavepoint 
16890 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e  = pSavepoint->pN
168a0 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  ext.    ){.     
168b0 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20   iSavepoint++;. 
168c0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21 70 53     }.    if( !pS
168d0 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20  avepoint ){.    
168e0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
168f0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
16900 64 62 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76  db, "no such sav
16910 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61  epoint: %s", zNa
16920 6d 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  me);.      rc = 
16930 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
16940 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e    }else if( db->
16950 6e 56 64 62 65 57 72 69 74 65 3e 30 20 26 26 20  nVdbeWrite>0 && 
16960 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
16970 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 2f  LEASE ){.      /
16980 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73  * It is not poss
16990 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73 65 20  ible to release 
169a0 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76 65 70  (commit) a savep
169b0 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20 61 72  oint if there ar
169c0 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63 74 69  e .      ** acti
169d0 76 65 20 77 72 69 74 65 20 73 74 61 74 65 6d 65  ve write stateme
169e0 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  nts..      */.  
169f0 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
16a00 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
16a10 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20 22  , db, .        "
16a20 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73 65 20 73  cannot release s
16a30 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73  avepoint - SQL s
16a40 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
16a50 67 72 65 73 73 22 0a 20 20 20 20 20 20 29 3b 0a  gress".      );.
16a60 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
16a70 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73  E_BUSY;.    }els
16a80 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65 74  e{..      /* Det
16a90 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f  ermine whether o
16aa0 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20 61 20  r not this is a 
16ab0 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
16ac0 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20  point. If so,.  
16ad0 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69 73 20      ** and this 
16ae0 69 73 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d  is a RELEASE com
16af0 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 63  mand, then the c
16b00 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
16b10 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69 73 20  on .      ** is 
16b20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20 20  committed. .    
16b30 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 69    */.      int i
16b40 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70  sTransaction = p
16b50 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74  Savepoint->pNext
16b60 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54 72 61  ==0 && db->isTra
16b70 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
16b80 74 3b 0a 20 20 20 20 20 20 69 66 28 20 69 73 54  t;.      if( isT
16b90 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20 70 31  ransaction && p1
16ba0 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
16bb0 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ASE ){.        i
16bc0 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33  f( (rc = sqlite3
16bd0 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31  VdbeCheckFk(p, 1
16be0 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  ))!=SQLITE_OK ){
16bf0 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
16c00 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
16c10 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64       }.        d
16c20 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
16c30 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  1;.        if( s
16c40 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
16c50 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  )==SQLITE_BUSY )
16c60 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 70  {.          p->p
16c70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20  c = pc;.        
16c80 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
16c90 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
16ca0 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
16cb0 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20  ITE_BUSY;.      
16cc0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
16cd0 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a  turn;.        }.
16ce0 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72          db->isTr
16cf0 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
16d00 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  nt = 0;.        
16d10 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20  rc = p->rc;.    
16d20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
16d30 20 69 6e 74 20 69 73 53 63 68 65 6d 61 43 68 61   int isSchemaCha
16d40 6e 67 65 3b 0a 20 20 20 20 20 20 20 20 69 53 61  nge;.        iSa
16d50 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53  vepoint = db->nS
16d60 61 76 65 70 6f 69 6e 74 20 2d 20 69 53 61 76 65  avepoint - iSave
16d70 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20  point - 1;.     
16d80 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50     if( p1==SAVEP
16d90 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b  OINT_ROLLBACK ){
16da0 0a 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68  .          isSch
16db0 65 6d 61 43 68 61 6e 67 65 20 3d 20 28 64 62 2d  emaChange = (db-
16dc0 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
16dd0 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 21 3d  InternChanges)!=
16de0 30 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  0;.          for
16df0 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44  (ii=0; ii<db->nD
16e00 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  b; ii++){.      
16e10 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
16e20 65 33 42 74 72 65 65 54 72 69 70 41 6c 6c 43 75  e3BtreeTripAllCu
16e30 72 73 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69 69  rsors(db->aDb[ii
16e40 5d 2e 70 42 74 2c 0a 20 20 20 20 20 20 20 20 20  ].pBt,.         
16e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
16e70 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42  LITE_ABORT_ROLLB
16e80 41 43 4b 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ACK,.           
16e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ea0 20 20 20 20 20 20 20 20 20 20 20 20 69 73 53 63              isSc
16eb0 68 65 6d 61 43 68 61 6e 67 65 3d 3d 30 29 3b 0a  hemaChange==0);.
16ec0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
16ed0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
16ee0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
16ef0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
16f00 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c     }.        }el
16f10 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69 73  se{.          is
16f20 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d 20 30  SchemaChange = 0
16f30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
16f40 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
16f50 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b  <db->nDb; ii++){
16f60 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
16f70 73 71 6c 69 74 65 33 42 74 72 65 65 53 61 76 65  sqlite3BtreeSave
16f80 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69  point(db->aDb[ii
16f90 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65  ].pBt, p1, iSave
16fa0 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
16fb0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
16fc0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
16fd0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
16fe0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
16ff0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
17000 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 73  }.        if( is
17010 53 63 68 65 6d 61 43 68 61 6e 67 65 20 29 7b 0a  SchemaChange ){.
17020 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
17030 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
17040 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
17050 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
17060 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
17070 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b  fConnection(db);
17080 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 66  .          db->f
17090 6c 61 67 73 20 3d 20 28 64 62 2d 3e 66 6c 61 67  lags = (db->flag
170a0 73 20 7c 20 53 51 4c 49 54 45 5f 49 6e 74 65 72  s | SQLITE_Inter
170b0 6e 43 68 61 6e 67 65 73 29 3b 0a 20 20 20 20 20  nChanges);.     
170c0 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a     }.      }.  .
170d0 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c        /* Regardl
170e0 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 74  ess of whether t
170f0 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45  his is a RELEASE
17100 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65   or ROLLBACK, de
17110 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20  stroy all .     
17120 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e   ** savepoints n
17130 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20  ested inside of 
17140 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65  the savepoint be
17150 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e  ing operated on.
17160 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28   */.      while(
17170 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21   db->pSavepoint!
17180 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20  =pSavepoint ){. 
17190 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62         pTmp = db
171a0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ->pSavepoint;.  
171b0 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70        db->pSavep
171c0 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65  oint = pTmp->pNe
171d0 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  xt;.        sqli
171e0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 54  te3DbFree(db, pT
171f0 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  mp);.        db-
17200 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20  >nSavepoint--;. 
17210 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
17220 20 49 66 20 69 74 20 69 73 20 61 20 52 45 4c 45   If it is a RELE
17230 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f  ASE, then destro
17240 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  y the savepoint 
17250 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
17260 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e  n .      ** too.
17270 20 49 66 20 69 74 20 69 73 20 61 20 52 4f 4c 4c   If it is a ROLL
17280 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65  BACK TO, then se
17290 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
172a0 64 65 66 65 72 72 65 64 20 0a 20 20 20 20 20 20  deferred .      
172b0 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ** constraint vi
172c0 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74  olations present
172d0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
172e0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73 74   to the value st
172f0 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a 20 77 68  ored.      ** wh
17300 65 6e 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  en the savepoint
17310 20 77 61 73 20 63 72 65 61 74 65 64 2e 20 20 2a   was created.  *
17320 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d  /.      if( p1==
17330 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
17340 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  E ){.        ass
17350 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d  ert( pSavepoint=
17360 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20  =db->pSavepoint 
17370 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  );.        db->p
17380 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76  Savepoint = pSav
17390 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20  epoint->pNext;. 
173a0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
173b0 46 72 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f  Free(db, pSavepo
173c0 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  int);.        if
173d0 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  ( !isTransaction
173e0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62   ){.          db
173f0 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a  ->nSavepoint--;.
17400 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
17410 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64  }else{.        d
17420 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
17430 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e   = pSavepoint->n
17440 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
17450 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72        db->nDefer
17460 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61  redImmCons = pSa
17470 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72  vepoint->nDeferr
17480 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20  edImmCons;.     
17490 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 21 69   }..      if( !i
174a0 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a  sTransaction ){.
174b0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
174c0 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
174d0 74 28 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70  t(db, p1, iSavep
174e0 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69  oint);.        i
174f0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
17500 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
17510 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
17520 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20    }.    }.  }.. 
17530 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
17540 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74  code: AutoCommit
17550 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
17560 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62  ** Set the datab
17570 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20  ase auto-commit 
17580 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72  flag to P1 (1 or
17590 20 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72   0). If P2 is tr
175a0 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b  ue, roll.** back
175b0 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61   any currently a
175c0 63 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e  ctive btree tran
175d0 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65  sactions. If the
175e0 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76  re are any activ
175f0 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20  e.** VMs (apart 
17600 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20  from this one), 
17610 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20  then a ROLLBACK 
17620 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54  fails.  A COMMIT
17630 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65   fails if.** the
17640 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72  re are active wr
17650 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74  iting VMs or act
17660 69 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65  ive VMs that use
17670 20 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a   shared cache..*
17680 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
17690 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65  ction causes the
176a0 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a   VM to halt..*/.
176b0 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d  case OP_AutoComm
176c0 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69  it: {.  int desi
176d0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20  redAutoCommit;. 
176e0 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a   int iRollback;.
176f0 20 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a    int turnOnAC;.
17700 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  .  desiredAutoCo
17710 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  mmit = pOp->p1;.
17720 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f    iRollback = pO
17730 70 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41  p->p2;.  turnOnA
17740 43 20 3d 20 64 65 73 69 72 65 64 41 75 74 6f 43  C = desiredAutoC
17750 6f 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e 61 75  ommit && !db->au
17760 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65  toCommit;.  asse
17770 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
17780 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69  ommit==1 || desi
17790 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  redAutoCommit==0
177a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65   );.  assert( de
177b0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
177c0 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d  =1 || iRollback=
177d0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
177e0 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e  db->nVdbeActive>
177f0 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73  0 );  /* At leas
17800 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73  t this one VM is
17810 20 61 63 74 69 76 65 20 2a 2f 0a 20 20 61 73 73   active */.  ass
17820 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
17830 72 20 29 3b 0a 0a 23 69 66 20 30 0a 20 20 69 66  r );..#if 0.  if
17840 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 69 52  ( turnOnAC && iR
17850 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e  ollback && db->n
17860 56 64 62 65 41 63 74 69 76 65 3e 31 20 29 7b 0a  VdbeActive>1 ){.
17870 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
17880 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65  nstruction imple
17890 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b  ments a ROLLBACK
178a0 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61   and other VMs a
178b0 72 65 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20  re.    ** still 
178c0 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74  running, and a t
178d0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
178e0 74 69 76 65 2c 20 72 65 74 75 72 6e 20 61 6e 20  tive, return an 
178f0 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67  error indicating
17900 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65  .    ** that the
17910 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20   other VMs must 
17920 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20  complete first. 
17930 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69  .    */.    sqli
17940 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
17950 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63  >zErrMsg, db, "c
17960 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74  annot rollback t
17970 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20  ransaction - ". 
17980 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74         "SQL stat
17990 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
179a0 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53  ss");.    rc = S
179b0 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65  QLITE_BUSY;.  }e
179c0 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  lse.#endif.  if(
179d0 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 21 69 52   turnOnAC && !iR
179e0 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e  ollback && db->n
179f0 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20  VdbeWrite>0 ){. 
17a00 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e     /* If this in
17a10 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d  struction implem
17a20 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e  ents a COMMIT an
17a30 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20  d other VMs are 
17a40 77 72 69 74 69 6e 67 0a 20 20 20 20 2a 2a 20 72  writing.    ** r
17a50 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69  eturn an error i
17a60 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 74  ndicating that t
17a70 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73  he other VMs mus
17a80 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74  t complete first
17a90 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71  . .    */.    sq
17aa0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
17ab0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
17ac0 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74  "cannot commit t
17ad0 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20  ransaction - ". 
17ae0 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74         "SQL stat
17af0 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
17b00 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53  ss");.    rc = S
17b10 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65  QLITE_BUSY;.  }e
17b20 6c 73 65 20 69 66 28 20 64 65 73 69 72 65 64 41  lse if( desiredA
17b30 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61  utoCommit!=db->a
17b40 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
17b50 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29   if( iRollback )
17b60 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
17b70 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
17b80 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71  t==1 );.      sq
17b90 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c  lite3RollbackAll
17ba0 28 64 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52  (db, SQLITE_ABOR
17bb0 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20  T_ROLLBACK);.   
17bc0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
17bd0 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  t = 1;.    }else
17be0 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74   if( (rc = sqlit
17bf0 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c  e3VdbeCheckFk(p,
17c00 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20   1))!=SQLITE_OK 
17c10 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64  ){.      goto vd
17c20 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d  be_return;.    }
17c30 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
17c40 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38  autoCommit = (u8
17c50 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  )desiredAutoComm
17c60 69 74 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71  it;.      if( sq
17c70 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
17c80 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
17c90 0a 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d  .        p->pc =
17ca0 20 70 63 3b 0a 20 20 20 20 20 20 20 20 64 62 2d   pc;.        db-
17cb0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75  >autoCommit = (u
17cc0 38 29 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f  8)(1-desiredAuto
17cd0 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 20  Commit);.       
17ce0 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
17cf0 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
17d00 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
17d10 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  urn;.      }.   
17d20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 64   }.    assert( d
17d30 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30  b->nStatement==0
17d40 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43   );.    sqlite3C
17d50 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 64  loseSavepoints(d
17d60 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72  b);.    if( p->r
17d70 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
17d80 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
17d90 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73  E_DONE;.    }els
17da0 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  e{.      rc = SQ
17db0 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
17dc0 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f  }.    goto vdbe_
17dd0 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b  return;.  }else{
17de0 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
17df0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
17e00 67 2c 20 64 62 2c 0a 20 20 20 20 20 20 20 20 28  g, db,.        (
17e10 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  !desiredAutoComm
17e20 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72  it)?"cannot star
17e30 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  t a transaction 
17e40 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
17e50 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20 20  tion":(.        
17e60 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e  (iRollback)?"can
17e70 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e  not rollback - n
17e80 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
17e90 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20 20 20   active":.      
17ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 61               "ca
17eb0 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f  nnot commit - no
17ec0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
17ed0 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20 20 20  active"));.     
17ee0 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20 53 51      .    rc = SQ
17ef0 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a  LITE_ERROR;.  }.
17f00 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
17f10 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69  pcode: Transacti
17f20 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  on P1 P2 P3 P4 P
17f30 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20  5.**.** Begin a 
17f40 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 64  transaction on d
17f50 61 74 61 62 61 73 65 20 50 31 20 69 66 20 61 20  atabase P1 if a 
17f60 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
17f70 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20 61 63  ot already.** ac
17f80 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50 32 20 69  tive..** If P2 i
17f90 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
17fa0 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63   a write-transac
17fb0 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2c  tion is started,
17fc0 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20 72 65 61   or if a .** rea
17fd0 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  d-transaction is
17fe0 20 61 6c 72 65 61 64 79 20 61 63 74 69 76 65 2c   already active,
17ff0 20 69 74 20 69 73 20 75 70 67 72 61 64 65 64 20   it is upgraded 
18000 74 6f 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  to a write-trans
18010 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32  action..** If P2
18020 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61   is zero, then a
18030 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f   read-transactio
18040 6e 20 69 73 20 73 74 61 72 74 65 64 2e 0a 2a 2a  n is started..**
18050 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
18060 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
18070 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63  ase file on whic
18080 68 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  h the transactio
18090 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e  n is.** started.
180a0 20 20 49 6e 64 65 78 20 30 20 69 73 20 74 68 65    Index 0 is the
180b0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
180c0 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20  ile and index 1 
180d0 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75  is the.** file u
180e0 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72  sed for temporar
180f0 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63  y tables.  Indic
18100 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20  es of 2 or more 
18110 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20  are used for.** 
18120 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
18130 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77  es..**.** If a w
18140 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
18150 20 69 73 20 73 74 61 72 74 65 64 20 61 6e 64 20   is started and 
18160 74 68 65 20 56 64 62 65 2e 75 73 65 73 53 74 6d  the Vdbe.usesStm
18170 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69 73  tJournal flag is
18180 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73 20 66  .** true (this f
18190 6c 61 67 20 69 73 20 73 65 74 20 69 66 20 74 68  lag is set if th
181a0 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64 69 66  e Vdbe may modif
181b0 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  y more than one 
181c0 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74  row and may.** t
181d0 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
181e0 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74 61 74  ception), a stat
181f0 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
18200 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 70  n may also be op
18210 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70  ened..** More sp
18220 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20 73 74  ecifically, a st
18230 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
18240 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20 69 66  ion is opened if
18250 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  f the database.*
18260 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  * connection is 
18270 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e  currently not in
18280 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65   autocommit mode
18290 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61 72  , or if there ar
182a0 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69 76  e other.** activ
182b0 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 41 20  e statements. A 
182c0 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
182d0 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65  ction allows the
182e0 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79   changes made by
182f0 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f   this.** VDBE to
18300 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20   be rolled back 
18310 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77  after an error w
18320 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f  ithout having to
18330 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a   roll back the.*
18340 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63  * entire transac
18350 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f  tion. If no erro
18360 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  r is encountered
18370 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  , the statement 
18380 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77  transaction.** w
18390 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ill automaticall
183a0 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68  y commit when th
183b0 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a  e VDBE halts..**
183c0 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65  .** If P5!=0 the
183d0 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61 6c  n this opcode al
183e0 73 6f 20 63 68 65 63 6b 73 20 74 68 65 20 73 63  so checks the sc
183f0 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61 67 61 69  hema cookie agai
18400 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64 20 74 68  nst P3.** and th
18410 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74  e schema generat
18420 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61 67 61 69  ion counter agai
18430 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68 65 20 63  nst P4..** The c
18440 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74  ookie changes it
18450 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72  s value whenever
18460 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
18470 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a  hema changes..**
18480 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
18490 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 63  is used to detec
184a0 74 20 77 68 65 6e 20 74 68 61 74 20 74 68 65 20  t when that the 
184b0 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67  cookie has chang
184c0 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74  ed.** and that t
184d0 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  he current proce
184e0 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65  ss needs to rere
184f0 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e 20 20  ad the schema.  
18500 49 66 20 74 68 65 20 73 63 68 65 6d 61 0a 2a 2a  If the schema.**
18510 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33 20 64 69   cookie in P3 di
18520 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20 73  ffers from the s
18530 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69 6e 20  chema cookie in 
18540 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61  the database hea
18550 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20 74 68 65  der or.** if the
18560 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69   schema generati
18570 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e 20 50 34  on counter in P4
18580 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68   differs from th
18590 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20 67 65 6e  e current.** gen
185a0 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2c  eration counter,
185b0 20 74 68 65 6e 20 61 6e 20 53 51 4c 49 54 45 5f   then an SQLITE_
185c0 53 43 48 45 4d 41 20 65 72 72 6f 72 20 69 73 20  SCHEMA error is 
185d0 72 61 69 73 65 64 20 61 6e 64 20 65 78 65 63 75  raised and execu
185e0 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20 20  tion.** halts.  
185f0 54 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70  The sqlite3_step
18600 28 29 20 77 72 61 70 70 65 72 20 66 75 6e 63 74  () wrapper funct
18610 69 6f 6e 20 6d 69 67 68 74 20 74 68 65 6e 20 72  ion might then r
18620 65 70 72 65 70 61 72 65 20 74 68 65 0a 2a 2a 20  eprepare the.** 
18630 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65  statement and re
18640 72 75 6e 20 69 74 20 66 72 6f 6d 20 74 68 65 20  run it from the 
18650 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61  beginning..*/.ca
18660 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f  se OP_Transactio
18670 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42  n: {.  Btree *pB
18680 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a  t;.  int iMeta;.
18690 20 20 69 6e 74 20 69 47 65 6e 3b 0a 0a 20 20 61    int iGen;..  a
186a0 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
186b0 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  der );.  assert(
186c0 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
186d0 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b  || pOp->p2==0 );
186e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
186f0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
18700 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
18710 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
18720 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
18730 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 69 66 28  Op->p1) );.  if(
18740 20 70 4f 70 2d 3e 70 32 20 26 26 20 28 64 62 2d   pOp->p2 && (db-
18750 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
18760 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b  QueryOnly)!=0 ){
18770 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
18780 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67  _READONLY;.    g
18790 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
187a0 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42  _error;.  }.  pB
187b0 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
187c0 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28  >p1].pBt;..  if(
187d0 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d   pBt ){.    rc =
187e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
187f0 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70  inTrans(pBt, pOp
18800 2d 3e 70 32 29 3b 0a 20 20 20 20 69 66 28 20 72  ->p2);.    if( r
18810 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
18820 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20  {.      p->pc = 
18830 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20  pc;.      p->rc 
18840 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
18850 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76  SY;.      goto v
18860 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
18870 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  }.    if( rc!=SQ
18880 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
18890 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
188a0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
188b0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
188c0 20 26 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a   && p->usesStmtJ
188d0 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20  ournal .     && 
188e0 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d  (db->autoCommit=
188f0 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52  =0 || db->nVdbeR
18900 65 61 64 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20  ead>1) .    ){. 
18910 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
18920 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
18930 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20 20  ns(pBt) );.     
18940 20 69 66 28 20 70 2d 3e 69 53 74 61 74 65 6d 65   if( p->iStateme
18950 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  nt==0 ){.       
18960 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74   assert( db->nSt
18970 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62  atement>=0 && db
18980 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20  ->nSavepoint>=0 
18990 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  );.        db->n
189a0 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20  Statement++; .  
189b0 20 20 20 20 20 20 70 2d 3e 69 53 74 61 74 65 6d        p->iStatem
189c0 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70  ent = db->nSavep
189d0 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74  oint + db->nStat
189e0 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a  ement;.      }..
189f0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
18a00 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
18a10 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  db, SAVEPOINT_BE
18a20 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65  GIN, p->iStateme
18a30 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20 69 66 28  nt-1);.      if(
18a40 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
18a50 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
18a60 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
18a70 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74  Stmt(pBt, p->iSt
18a80 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20  atement);.      
18a90 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f 72  }..      /* Stor
18aa0 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61  e the current va
18ab0 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  lue of the datab
18ac0 61 73 65 20 68 61 6e 64 6c 65 73 20 64 65 66 65  ase handles defe
18ad0 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a  rred constraint.
18ae0 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72        ** counter
18af0 2e 20 49 66 20 74 68 65 20 73 74 61 74 65 6d 65  . If the stateme
18b00 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e  nt transaction n
18b10 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65  eeds to be rolle
18b20 64 20 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a  d back,.      **
18b30 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
18b40 69 73 20 63 6f 75 6e 74 65 72 20 6e 65 65 64 73  is counter needs
18b50 20 74 6f 20 62 65 20 72 65 73 74 6f 72 65 64 20   to be restored 
18b60 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70  too.  */.      p
18b70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d  ->nStmtDefCons =
18b80 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
18b90 6e 73 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74  ns;.      p->nSt
18ba0 6d 74 44 65 66 49 6d 6d 43 6f 6e 73 20 3d 20 64  mtDefImmCons = d
18bb0 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
18bc0 6f 6e 73 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ons;.    }..    
18bd0 2f 2a 20 47 61 74 68 65 72 20 74 68 65 20 73 63  /* Gather the sc
18be0 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d  hema version num
18bf0 62 65 72 20 66 6f 72 20 63 68 65 63 6b 69 6e 67  ber for checking
18c00 3a 0a 20 20 20 20 2a 2a 20 49 4d 50 4c 45 4d 45  :.    ** IMPLEME
18c10 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 33 32  NTATION-OF: R-32
18c20 31 39 35 2d 31 39 34 36 35 20 54 68 65 20 73 63  195-19465 The sc
18c30 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 69 73 20  hema version is 
18c40 75 73 65 64 20 62 79 20 53 51 4c 69 74 65 0a 20  used by SQLite. 
18c50 20 20 20 2a 2a 20 65 61 63 68 20 74 69 6d 65 20     ** each time 
18c60 61 20 71 75 65 72 79 20 69 73 20 65 78 65 63 75  a query is execu
18c70 74 65 64 20 74 6f 20 65 6e 73 75 72 65 20 74 68  ted to ensure th
18c80 61 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  at the internal 
18c90 63 61 63 68 65 20 6f 66 20 74 68 65 0a 20 20 20  cache of the.   
18ca0 20 2a 2a 20 73 63 68 65 6d 61 20 75 73 65 64 20   ** schema used 
18cb0 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74  when compiling t
18cc0 68 65 20 53 51 4c 20 71 75 65 72 79 20 6d 61 74  he SQL query mat
18cd0 63 68 65 73 20 74 68 65 20 73 63 68 65 6d 61 20  ches the schema 
18ce0 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 64 61  of the.    ** da
18cf0 74 61 62 61 73 65 20 61 67 61 69 6e 73 74 20 77  tabase against w
18d00 68 69 63 68 20 74 68 65 20 63 6f 6d 70 69 6c 65  hich the compile
18d10 64 20 71 75 65 72 79 20 69 73 20 61 63 74 75 61  d query is actua
18d20 6c 6c 79 20 65 78 65 63 75 74 65 64 2e 0a 20 20  lly executed..  
18d30 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33    */.    sqlite3
18d40 42 74 72 65 65 47 65 74 4d 65 74 61 28 70 42 74  BtreeGetMeta(pBt
18d50 2c 20 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56  , BTREE_SCHEMA_V
18d60 45 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26  ERSION, (u32 *)&
18d70 69 4d 65 74 61 29 3b 0a 20 20 20 20 69 47 65 6e  iMeta);.    iGen
18d80 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
18d90 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65  p1].pSchema->iGe
18da0 6e 65 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73  neration;.  }els
18db0 65 7b 0a 20 20 20 20 69 47 65 6e 20 3d 20 69 4d  e{.    iGen = iM
18dc0 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 61  eta = 0;.  }.  a
18dd0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
18de0 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65  0 || pOp->p4type
18df0 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
18e00 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 26 20 28  if( pOp->p5 && (
18e10 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 33 20 7c  iMeta!=pOp->p3 |
18e20 7c 20 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e  | iGen!=pOp->p4.
18e30 69 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  i) ){.    sqlite
18e40 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
18e50 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
18e60 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
18e70 33 44 62 53 74 72 44 75 70 28 64 62 2c 20 22 64  3DbStrDup(db, "d
18e80 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
18e90 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20  as changed");.  
18ea0 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65    /* If the sche
18eb0 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74  ma-cookie from t
18ec0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
18ed0 20 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f   matches the coo
18ee0 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72  kie .    ** stor
18ef0 65 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d  ed with the in-m
18f00 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61  emory representa
18f10 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65  tion of the sche
18f20 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f  ma, do.    ** no
18f30 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68  t reload the sch
18f40 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ema from the dat
18f50 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20  abase file..    
18f60 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72  **.    ** If vir
18f70 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20  tual-tables are 
18f80 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73 20  in use, this is 
18f90 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69  not just an opti
18fa0 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a  mization..    **
18fb0 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73   Often, v-tables
18fc0 20 73 74 6f 72 65 20 74 68 65 69 72 20 64 61 74   store their dat
18fd0 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74  a in other SQLit
18fe0 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a  e tables, which.
18ff0 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69      ** are queri
19000 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78  ed from within x
19010 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72  Next() and other
19020 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73   v-table methods
19030 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72   using.    ** pr
19040 65 70 61 72 65 64 20 71 75 65 72 69 65 73 2e 20  epared queries. 
19050 49 66 20 73 75 63 68 20 61 20 71 75 65 72 79 20  If such a query 
19060 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20  is out-of-date, 
19070 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  we do not want t
19080 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64  o.    ** discard
19090 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
190a0 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65  hema, as the use
190b0 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74  r code implement
190c0 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76  ing the.    ** v
190d0 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76  -table would hav
190e0 65 20 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f  e to be ready fo
190f0 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  r the sqlite3_vt
19100 61 62 20 73 74 72 75 63 74 75 72 65 20 69 74 73  ab structure its
19110 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65  elf.    ** to be
19120 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65   invalidated whe
19130 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74  never sqlite3_st
19140 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66  ep() is called f
19150 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20  rom within .    
19160 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74  ** a v-table met
19170 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  hod..    */.    
19180 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  if( db->aDb[pOp-
19190 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  >p1].pSchema->sc
191a0 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65  hema_cookie!=iMe
191b0 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ta ){.      sqli
191c0 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d  te3ResetOneSchem
191d0 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  a(db, pOp->p1);.
191e0 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 65 78 70      }.    p->exp
191f0 69 72 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 63  ired = 1;.    rc
19200 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41   = SQLITE_SCHEMA
19210 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
19220 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  ../* Opcode: Rea
19230 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  dCookie P1 P2 P3
19240 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20   * *.**.** Read 
19250 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33  cookie number P3
19260 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50   from database P
19270 31 20 61 6e 64 20 77 72 69 74 65 20 69 74 20 69  1 and write it i
19280 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
19290 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65  .** P3==1 is the
192a0 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e   schema version.
192b0 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64    P3==2 is the d
192c0 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a  atabase format..
192d0 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20  ** P3==3 is the 
192e0 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65  recommended page
192f0 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e  r cache size, an
19300 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d  d so forth.  P1=
19310 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69  =0 is.** the mai
19320 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
19330 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
19340 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75   database file u
19350 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  sed to store.** 
19360 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
19370 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75  ..**.** There mu
19380 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63  st be a read-loc
19390 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  k on the databas
193a0 65 20 28 65 69 74 68 65 72 20 61 20 74 72 61 6e  e (either a tran
193b0 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20  saction.** must 
193c0 62 65 20 73 74 61 72 74 65 64 20 6f 72 20 74 68  be started or th
193d0 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f  ere must be an o
193e0 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f  pen cursor) befo
193f0 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20  re.** executing 
19400 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
19410 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
19420 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20  dCookie: {      
19430 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
19440 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
19450 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e   int iMeta;.  in
19460 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f  t iDb;.  int iCo
19470 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72 74 28  okie;..  assert(
19480 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
19490 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  .  iDb = pOp->p1
194a0 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f  ;.  iCookie = pO
194b0 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
194c0 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f   pOp->p3<SQLITE_
194d0 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a  N_BTREE_META );.
194e0 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
194f0 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
19500 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
19510 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30  >aDb[iDb].pBt!=0
19520 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
19530 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
19540 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 0a  eMask, iDb) );..
19550 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65    sqlite3BtreeGe
19560 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44  tMeta(db->aDb[iD
19570 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c  b].pBt, iCookie,
19580 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b   (u32 *)&iMeta);
19590 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
195a0 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Meta;.  break;.}
195b0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74  ../* Opcode: Set
195c0 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20  Cookie P1 P2 P3 
195d0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
195e0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
195f0 65 67 69 73 74 65 72 20 50 33 20 28 69 6e 74 65  egister P3 (inte
19600 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69 6e  rpreted as an in
19610 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f 20 63  teger).** into c
19620 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32 20  ookie number P2 
19630 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  of database P1. 
19640 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63   P2==1 is the sc
19650 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 0a  hema version.  .
19660 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74 68 65 20  ** P2==2 is the 
19670 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e  database format.
19680 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65   P2==3 is the re
19690 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20  commended pager 
196a0 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20  cache .** size, 
196b0 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50  and so forth.  P
196c0 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e  1==0 is the main
196d0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
196e0 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20  nd P1==1 is the 
196f0 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c  .** database fil
19700 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
19710 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
19720 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61  ..**.** A transa
19730 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74  ction must be st
19740 61 72 74 65 64 20 62 65 66 6f 72 65 20 65 78 65  arted before exe
19750 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  cuting this opco
19760 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  de..*/.case OP_S
19770 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20  etCookie: {     
19780 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 44 62    /* in3 */.  Db
19790 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74 28   *pDb;.  assert(
197a0 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f   pOp->p2<SQLITE_
197b0 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a  N_BTREE_META );.
197c0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
197d0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
197e0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
197f0 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
19800 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
19810 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65  p->p1) );.  asse
19820 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
19830 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64  =0 );.  pDb = &d
19840 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b  b->aDb[pOp->p1];
19850 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e  .  assert( pDb->
19860 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  pBt!=0 );.  asse
19870 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
19880 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70  aMutexHeld(db, p
19890 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20  Op->p1, 0) );.  
198a0 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
198b0 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p3];.  sqlite3
198c0 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
198d0 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53 65  y(pIn3);.  /* Se
198e0 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e 64  e note about ind
198f0 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f  ex shifting on O
19900 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a  P_ReadCookie */.
19910 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
19920 72 65 65 55 70 64 61 74 65 4d 65 74 61 28 70 44  reeUpdateMeta(pD
19930 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c  b->pBt, pOp->p2,
19940 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 29   (int)pIn3->u.i)
19950 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d  ;.  if( pOp->p2=
19960 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45  =BTREE_SCHEMA_VE
19970 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20  RSION ){.    /* 
19980 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  When the schema 
19990 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20  cookie changes, 
199a0 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63  record the new c
199b0 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79  ookie internally
199c0 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63   */.    pDb->pSc
199d0 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f  hema->schema_coo
199e0 6b 69 65 20 3d 20 28 69 6e 74 29 70 49 6e 33 2d  kie = (int)pIn3-
199f0 3e 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66 6c  >u.i;.    db->fl
19a00 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e  ags |= SQLITE_In
19a10 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d  ternChanges;.  }
19a20 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32  else if( pOp->p2
19a30 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52  ==BTREE_FILE_FOR
19a40 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65  MAT ){.    /* Re
19a50 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20  cord changes in 
19a60 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  the file format 
19a70 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68  */.    pDb->pSch
19a80 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
19a90 20 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e 69   = (u8)pIn3->u.i
19aa0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
19ab0 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a  >p1==1 ){.    /*
19ac0 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20   Invalidate all 
19ad0 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
19ae0 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74 68 65  nts whenever the
19af0 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20   TEMP database. 
19b00 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20     ** schema is 
19b10 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74  changed.  Ticket
19b20 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71   #1644 */.    sq
19b30 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
19b40 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
19b50 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  );.    p->expire
19b60 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65  d = 0;.  }.  bre
19b70 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
19b80 3a 20 4f 70 65 6e 52 65 61 64 20 50 31 20 50 32  : OpenRead P1 P2
19b90 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
19ba0 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69  opsis: root=P2 i
19bb0 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  Db=P3.**.** Open
19bc0 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72   a read-only cur
19bd0 73 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74 61  sor for the data
19be0 62 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65  base table whose
19bf0 20 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a   root page is.**
19c00 20 50 32 20 69 6e 20 61 20 64 61 74 61 62 61 73   P2 in a databas
19c10 65 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74  e file.  The dat
19c20 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 64 65  abase file is de
19c30 74 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20  termined by P3. 
19c40 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20  .** P3==0 means 
19c50 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
19c60 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74  e, P3==1 means t
19c70 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64  he database used
19c80 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61   for .** tempora
19c90 72 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50  ry tables, and P
19ca0 33 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74  3>1 means used t
19cb0 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
19cc0 20 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74   attached.** dat
19cd0 61 62 61 73 65 2e 20 20 47 69 76 65 20 74 68 65  abase.  Give the
19ce0 20 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69   new cursor an i
19cf0 64 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e  dentifier of P1.
19d00 20 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75    The P1.** valu
19d10 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63  es need not be c
19d20 6f 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c  ontiguous but al
19d30 6c 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75  l P1 values shou
19d40 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65  ld be small inte
19d50 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61  gers..** It is a
19d60 6e 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74  n error for P1 t
19d70 6f 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a  o be negative..*
19d80 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68  *.** If P5!=0 th
19d90 65 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65  en use the conte
19da0 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
19db0 32 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61  2 as the root pa
19dc0 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76  ge, not.** the v
19dd0 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c  alue of P2 itsel
19de0 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77  f..**.** There w
19df0 69 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f  ill be a read lo
19e00 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ck on the databa
19e10 73 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 72  se whenever ther
19e20 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20  e is an.** open 
19e30 63 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20  cursor.  If the 
19e40 64 61 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c  database was unl
19e50 6f 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74  ocked prior to t
19e60 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  his instruction.
19e70 2a 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c  ** then a read l
19e80 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 20  ock is acquired 
19e90 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20  as part of this 
19ea0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20  instruction.  A 
19eb0 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c  read.** lock all
19ec0 6f 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73  ows other proces
19ed0 73 65 73 20 74 6f 20 72 65 61 64 20 74 68 65 20  ses to read the 
19ee0 64 61 74 61 62 61 73 65 20 62 75 74 20 70 72 6f  database but pro
19ef0 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74  hibits.** any ot
19f00 68 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d  her process from
19f10 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64   modifying the d
19f20 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 72 65  atabase.  The re
19f30 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65  ad lock is.** re
19f40 6c 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20  leased when all 
19f50 63 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73  cursors are clos
19f60 65 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73  ed.  If this ins
19f70 74 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74  truction attempt
19f80 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65  s.** to get a re
19f90 61 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c  ad lock but fail
19fa0 73 2c 20 74 68 65 20 73 63 72 69 70 74 20 74 65  s, the script te
19fb0 72 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e  rminates with an
19fc0 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20  .** SQLITE_BUSY 
19fd0 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a  error code..**.*
19fe0 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d  * The P4 value m
19ff0 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20  ay be either an 
1a000 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33  integer (P4_INT3
1a010 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20  2) or a pointer 
1a020 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20  to.** a KeyInfo 
1a030 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45  structure (P4_KE
1a040 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73  YINFO). If it is
1a050 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1a060 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75  KeyInfo .** stru
1a070 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64  cture, then said
1a080 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e   structure defin
1a090 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61  es the content a
1a0a0 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a  nd collating .**
1a0b0 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65   sequence of the
1a0c0 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65   index being ope
1a0d0 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ned. Otherwise, 
1a0e0 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65  if P4 is an inte
1a0f0 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69  ger .** value, i
1a100 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  t is set to the 
1a110 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1a120 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a  s in the table..
1a130 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1a140 4f 70 65 6e 57 72 69 74 65 2c 20 52 65 6f 70 65  OpenWrite, Reope
1a150 6e 49 64 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  nIdx.*/./* Opcod
1a160 65 3a 20 52 65 6f 70 65 6e 49 64 78 20 50 31 20  e: ReopenIdx P1 
1a170 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
1a180 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32  ynopsis: root=P2
1a190 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 54 68   iDb=P3.**.** Th
1a1a0 65 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f  e ReopenIdx opco
1a1b0 64 65 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79  de works exactly
1a1c0 20 6c 69 6b 65 20 52 65 61 64 4f 70 65 6e 20 65   like ReadOpen e
1a1d0 78 63 65 70 74 20 74 68 61 74 20 69 74 20 66 69  xcept that it fi
1a1e0 72 73 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 6f  rst.** checks to
1a1f0 20 73 65 65 20 69 66 20 74 68 65 20 63 75 72 73   see if the curs
1a200 6f 72 20 6f 6e 20 50 31 20 69 73 20 61 6c 72 65  or on P1 is alre
1a210 61 64 79 20 6f 70 65 6e 20 77 69 74 68 20 61 20  ady open with a 
1a220 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6e 75 6d  root page.** num
1a230 62 65 72 20 6f 66 20 50 32 20 61 6e 64 20 69 66  ber of P2 and if
1a240 20 69 74 20 69 73 20 74 68 69 73 20 6f 70 63 6f   it is this opco
1a250 64 65 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d  de becomes a no-
1a260 6f 70 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  op.  In other wo
1a270 72 64 73 2c 0a 2a 2a 20 69 66 20 74 68 65 20 63  rds,.** if the c
1a280 75 72 73 6f 72 20 69 73 20 61 6c 72 65 61 64 79  ursor is already
1a290 20 6f 70 65 6e 2c 20 64 6f 20 6e 6f 74 20 72 65   open, do not re
1a2a0 6f 70 65 6e 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54  open it..**.** T
1a2b0 68 65 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63  he ReopenIdx opc
1a2c0 6f 64 65 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20  ode may only be 
1a2d0 75 73 65 64 20 77 69 74 68 20 50 35 3d 3d 30 20  used with P5==0 
1a2e0 61 6e 64 20 77 69 74 68 20 50 34 20 62 65 69 6e  and with P4 bein
1a2f0 67 0a 2a 2a 20 61 20 50 34 5f 4b 45 59 49 4e 46  g.** a P4_KEYINF
1a300 4f 20 6f 62 6a 65 63 74 2e 20 20 46 75 72 74 68  O object.  Furth
1a310 65 72 6d 6f 72 65 2c 20 74 68 65 20 50 33 20 76  ermore, the P3 v
1a320 61 6c 75 65 20 6d 75 73 74 20 62 65 20 74 68 65  alue must be the
1a330 20 73 61 6d 65 20 61 73 0a 2a 2a 20 65 76 65 72   same as.** ever
1a340 79 20 6f 74 68 65 72 20 52 65 6f 70 65 6e 49 64  y other ReopenId
1a350 78 20 6f 72 20 4f 70 65 6e 52 65 61 64 20 66 6f  x or OpenRead fo
1a360 72 20 74 68 65 20 73 61 6d 65 20 63 75 72 73 6f  r the same curso
1a370 72 20 6e 75 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20  r number..**.** 
1a380 53 65 65 20 74 68 65 20 4f 70 65 6e 52 65 61 64  See the OpenRead
1a390 20 6f 70 63 6f 64 65 20 64 6f 63 75 6d 65 6e 74   opcode document
1a3a0 61 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69  ation for additi
1a3b0 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
1a3c0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
1a3d0 4f 70 65 6e 57 72 69 74 65 20 50 31 20 50 32 20  OpenWrite P1 P2 
1a3e0 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
1a3f0 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44  psis: root=P2 iD
1a400 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  b=P3.**.** Open 
1a410 61 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72  a read/write cur
1a420 73 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20  sor named P1 on 
1a430 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
1a440 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a  ex whose root.**
1a450 20 70 61 67 65 20 69 73 20 50 32 2e 20 20 4f 72   page is P2.  Or
1a460 20 69 66 20 50 35 21 3d 30 20 75 73 65 20 74 68   if P5!=0 use th
1a470 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
1a480 69 73 74 65 72 20 50 32 20 74 6f 20 66 69 6e 64  ister P2 to find
1a490 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61 67   the.** root pag
1a4a0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  e..**.** The P4 
1a4b0 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74  value may be eit
1a4c0 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28  her an integer (
1a4d0 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70  P4_INT32) or a p
1a4e0 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b  ointer to.** a K
1a4f0 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
1a500 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49   (P4_KEYINFO). I
1a510 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65  f it is a pointe
1a520 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a  r to a KeyInfo .
1a530 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68  ** structure, th
1a540 65 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72  en said structur
1a550 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f  e defines the co
1a560 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74  ntent and collat
1a570 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65  ing .** sequence
1a580 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65   of the index be
1a590 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65  ing opened. Othe
1a5a0 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20  rwise, if P4 is 
1a5b0 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76  an integer .** v
1a5c0 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20  alue, it is set 
1a5d0 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
1a5e0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
1a5f0 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68 65  table, or to the
1a600 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e 64 65  .** largest inde
1a610 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20  x of any column 
1a620 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
1a630 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20 75 73  t is actually us
1a640 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  ed..**.** This i
1a650 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73  nstruction works
1a660 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52   just like OpenR
1a670 65 61 64 20 65 78 63 65 70 74 20 74 68 61 74 20  ead except that 
1a680 69 74 20 6f 70 65 6e 73 20 74 68 65 20 63 75 72  it opens the cur
1a690 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77  sor.** in read/w
1a6a0 72 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20  rite mode.  For 
1a6b0 61 20 67 69 76 65 6e 20 74 61 62 6c 65 2c 20 74  a given table, t
1a6c0 68 65 72 65 20 63 61 6e 20 62 65 20 6f 6e 65 20  here can be one 
1a6d0 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c  or more read-onl
1a6e0 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72 20  y.** cursors or 
1a6f0 61 20 73 69 6e 67 6c 65 20 72 65 61 64 2f 77 72  a single read/wr
1a700 69 74 65 20 63 75 72 73 6f 72 20 62 75 74 20 6e  ite cursor but n
1a710 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53  ot both..**.** S
1a720 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64  ee also OpenRead
1a730 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6f  ..*/.case OP_Reo
1a740 70 65 6e 49 64 78 3a 20 7b 0a 20 20 56 64 62 65  penIdx: {.  Vdbe
1a750 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20  Cursor *pCur;.. 
1a760 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
1a770 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
1a780 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1a790 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70 43  _KEYINFO );.  pC
1a7a0 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
1a7b0 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43  p->p1];.  if( pC
1a7c0 75 72 20 26 26 20 70 43 75 72 2d 3e 70 67 6e 6f  ur && pCur->pgno
1a7d0 52 6f 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d 3e  Root==(u32)pOp->
1a7e0 70 32 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  p2 ){.    assert
1a7f0 28 20 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f 70  ( pCur->iDb==pOp
1a800 2d 3e 70 33 20 29 3b 20 20 20 20 20 20 2f 2a 20  ->p3 );      /* 
1a810 47 75 61 72 61 6e 74 65 65 64 20 62 79 20 74 68  Guaranteed by th
1a820 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
1a830 20 2a 2f 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20   */.    break;. 
1a840 20 7d 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63   }.  /* If the c
1a850 75 72 73 6f 72 20 69 73 20 6e 6f 74 20 63 75 72  ursor is not cur
1a860 72 65 6e 74 6c 79 20 6f 70 65 6e 20 6f 72 20 69  rently open or i
1a870 73 20 6f 70 65 6e 20 6f 6e 20 61 20 64 69 66 66  s open on a diff
1a880 65 72 65 6e 74 0a 20 20 2a 2a 20 69 6e 64 65 78  erent.  ** index
1a890 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  , then fall thro
1a8a0 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e  ugh into OP_Open
1a8b0 52 65 61 64 20 74 6f 20 66 6f 72 63 65 20 61 20  Read to force a 
1a8c0 72 65 6f 70 65 6e 20 2a 2f 0a 7d 0a 63 61 73 65  reopen */.}.case
1a8d0 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61   OP_OpenRead:.ca
1a8e0 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a  se OP_OpenWrite:
1a8f0 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b   {.  int nField;
1a900 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
1a910 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a  Info;.  int p2;.
1a920 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74    int iDb;.  int
1a930 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65   wrFlag;.  Btree
1a940 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73   *pX;.  VdbeCurs
1a950 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a  or *pCur;.  Db *
1a960 70 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pDb;..  assert( 
1a970 28 70 4f 70 2d 3e 70 35 26 28 4f 50 46 4c 41 47  (pOp->p5&(OPFLAG
1a980 5f 50 32 49 53 52 45 47 7c 4f 50 46 4c 41 47 5f  _P2ISREG|OPFLAG_
1a990 42 55 4c 4b 43 53 52 29 29 3d 3d 70 4f 70 2d 3e  BULKCSR))==pOp->
1a9a0 70 35 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  p5 );.  assert( 
1a9b0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1a9c0 4f 70 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70  OpenWrite || pOp
1a9d0 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 61 73 73  ->p5==0 );.  ass
1a9e0 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
1a9f0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1aa00 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
1aa10 70 65 6e 52 65 61 64 20 7c 7c 20 70 4f 70 2d 3e  penRead || pOp->
1aa20 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 65 6f 70 65  opcode==OP_Reope
1aa30 6e 49 64 78 0a 20 20 20 20 20 20 20 20 20 20 7c  nIdx.          |
1aa40 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  | p->readOnly==0
1aa50 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78   );..  if( p->ex
1aa60 70 69 72 65 64 20 29 7b 0a 20 20 20 20 72 63 20  pired ){.    rc 
1aa70 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52  = SQLITE_ABORT_R
1aa80 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 62 72 65  OLLBACK;.    bre
1aa90 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c  ak;.  }..  nFiel
1aaa0 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66  d = 0;.  pKeyInf
1aab0 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f  o = 0;.  p2 = pO
1aac0 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70  p->p2;.  iDb = p
1aad0 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
1aae0 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
1aaf0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
1ab00 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
1ab10 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44  p->btreeMask, iD
1ab20 62 29 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64  b) );.  pDb = &d
1ab30 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70  b->aDb[iDb];.  p
1ab40 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20  X = pDb->pBt;.  
1ab50 61 73 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b  assert( pX!=0 );
1ab60 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
1ab70 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65  de==OP_OpenWrite
1ab80 20 29 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d   ){.    wrFlag =
1ab90 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   1;.    assert( 
1aba0 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74  sqlite3SchemaMut
1abb0 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20  exHeld(db, iDb, 
1abc0 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 70 44  0) );.    if( pD
1abd0 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
1abe0 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e  _format < p->min
1abf0 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20  WriteFileFormat 
1ac00 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57  ){.      p->minW
1ac10 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d  riteFileFormat =
1ac20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
1ac30 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20  ile_format;.    
1ac40 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77  }.  }else{.    w
1ac50 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20  rFlag = 0;.  }. 
1ac60 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
1ac70 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 29 7b  PFLAG_P2ISREG ){
1ac80 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
1ac90 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
1aca0 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d   p2<=(p->nMem-p-
1acb0 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
1acc0 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32   pIn2 = &aMem[p2
1acd0 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ];.    assert( m
1ace0 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 32 29 20  emIsValid(pIn2) 
1acf0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
1ad00 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
1ad10 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20  M_Int)!=0 );.   
1ad20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
1ad30 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b  ntegerify(pIn2);
1ad40 0a 20 20 20 20 70 32 20 3d 20 28 69 6e 74 29 70  .    p2 = (int)p
1ad50 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a  In2->u.i;.    /*
1ad60 20 54 68 65 20 70 32 20 76 61 6c 75 65 20 61 6c   The p2 value al
1ad70 77 61 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20  ways comes from 
1ad80 61 20 70 72 69 6f 72 20 4f 50 5f 43 72 65 61 74  a prior OP_Creat
1ad90 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 61 6e  eTable opcode an
1ada0 64 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 6f 70  d.    ** that op
1adb0 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  code will always
1adc0 20 73 65 74 20 74 68 65 20 70 32 20 76 61 6c 75   set the p2 valu
1add0 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f  e to 2 or more o
1ade0 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20  r else fail..   
1adf0 20 2a 2a 20 49 66 20 74 68 65 72 65 20 77 65 72   ** If there wer
1ae00 65 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68 65  e a failure, the
1ae10 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
1ae20 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20 68  ent would have h
1ae30 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62 65 66  alted.    ** bef
1ae40 6f 72 65 20 72 65 61 63 68 69 6e 67 20 74 68 69  ore reaching thi
1ae50 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a  s instruction. *
1ae60 2f 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52 28  /.    if( NEVER(
1ae70 70 32 3c 32 29 20 29 20 7b 0a 20 20 20 20 20 20  p2<2) ) {.      
1ae80 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
1ae90 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20  UPT_BKPT;.      
1aea0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1aeb0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
1aec0 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34   }.  if( pOp->p4
1aed0 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f  type==P4_KEYINFO
1aee0 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f   ){.    pKeyInfo
1aef0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
1af00 6e 66 6f 3b 0a 20 20 20 20 61 73 73 65 72 74 28  nfo;.    assert(
1af10 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d   pKeyInfo->enc==
1af20 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 61  ENC(db) );.    a
1af30 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d  ssert( pKeyInfo-
1af40 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 6e  >db==db );.    n
1af50 46 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f  Field = pKeyInfo
1af60 2d 3e 6e 46 69 65 6c 64 2b 70 4b 65 79 49 6e 66  ->nField+pKeyInf
1af70 6f 2d 3e 6e 58 46 69 65 6c 64 3b 0a 20 20 7d 65  o->nXField;.  }e
1af80 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  lse if( pOp->p4t
1af90 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b  ype==P4_INT32 ){
1afa0 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  .    nField = pO
1afb0 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61  p->p4.i;.  }.  a
1afc0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1afd0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  0 );.  assert( n
1afe0 46 69 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74 65  Field>=0 );.  te
1aff0 73 74 63 61 73 65 28 20 6e 46 69 65 6c 64 3d 3d  stcase( nField==
1b000 30 20 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20 77  0 );  /* Table w
1b010 69 74 68 20 49 4e 54 45 47 45 52 20 50 52 49 4d  ith INTEGER PRIM
1b020 41 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74 68  ARY KEY and noth
1b030 69 6e 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70 43  ing else */.  pC
1b040 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  ur = allocateCur
1b050 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
1b060 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 31 29 3b  nField, iDb, 1);
1b070 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29  .  if( pCur==0 )
1b080 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1b090 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20  pCur->nullRow = 
1b0a0 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72 64  1;.  pCur->isOrd
1b0b0 65 72 65 64 20 3d 20 31 3b 0a 20 20 70 43 75 72  ered = 1;.  pCur
1b0c0 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b  ->pgnoRoot = p2;
1b0d0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1b0e0 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70  treeCursor(pX, p
1b0f0 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49  2, wrFlag, pKeyI
1b100 6e 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75 72 73  nfo, pCur->pCurs
1b110 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65  or);.  pCur->pKe
1b120 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f  yInfo = pKeyInfo
1b130 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c  ;.  assert( OPFL
1b140 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54 52 45  AG_BULKCSR==BTRE
1b150 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20  E_BULKLOAD );.  
1b160 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1b170 6f 72 48 69 6e 74 73 28 70 43 75 72 2d 3e 70 43  orHints(pCur->pC
1b180 75 72 73 6f 72 2c 20 28 70 4f 70 2d 3e 70 35 20  ursor, (pOp->p5 
1b190 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  & OPFLAG_BULKCSR
1b1a0 29 29 3b 0a 0a 20 20 2f 2a 20 53 65 74 20 74 68  ));..  /* Set th
1b1b0 65 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54  e VdbeCursor.isT
1b1c0 61 62 6c 65 20 76 61 72 69 61 62 6c 65 2e 20 50  able variable. P
1b1d0 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73  revious versions
1b1e0 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20   of.  ** SQLite 
1b1f0 75 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66  used to check if
1b200 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66   the root-page f
1b210 6c 61 67 73 20 77 65 72 65 20 73 61 6e 65 20 61  lags were sane a
1b220 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a  t this point.  *
1b230 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74  * and report dat
1b240 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e  abase corruption
1b250 20 69 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f   if they were no
1b260 74 2c 20 62 75 74 20 74 68 69 73 20 63 68 65 63  t, but this chec
1b270 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65  k has.  ** since
1b280 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20   moved into the 
1b290 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f  btree layer.  */
1b2a0 20 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62    .  pCur->isTab
1b2b0 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65  le = pOp->p4type
1b2c0 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20  !=P4_KEYINFO;.  
1b2d0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1b2e0 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72  ode: OpenEphemer
1b2f0 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 50 35  al P1 P2 * P4 P5
1b300 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43  .** Synopsis: nC
1b310 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f  olumn=P2.**.** O
1b320 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72  pen a new cursor
1b330 20 50 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65   P1 to a transie
1b340 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  nt table..** The
1b350 20 63 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79   cursor is alway
1b360 73 20 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72  s opened read/wr
1b370 69 74 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20  ite even if .** 
1b380 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
1b390 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20  e is read-only. 
1b3a0 20 54 68 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a   The ephemeral.*
1b3b0 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c 65 74  * table is delet
1b3c0 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
1b3d0 20 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   when the cursor
1b3e0 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a   is closed..**.*
1b3f0 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62  * P2 is the numb
1b400 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1b410 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74   the ephemeral t
1b420 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72  able..** The cur
1b430 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  sor points to a 
1b440 42 54 72 65 65 20 74 61 62 6c 65 20 69 66 20 50  BTree table if P
1b450 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54  4==0 and to a BT
1b460 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20  ree index.** if 
1b470 50 34 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66  P4 is not 0.  If
1b480 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P4 is not NULL,
1b490 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   it points to a 
1b4a0 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
1b4b0 65 0a 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65  e.** that define
1b4c0 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  s the format of 
1b4d0 6b 65 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65  keys in the inde
1b4e0 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20  x..**.** The P5 
1b4f0 70 61 72 61 6d 65 74 65 72 20 63 61 6e 20 62 65  parameter can be
1b500 20 61 20 6d 61 73 6b 20 6f 66 20 74 68 65 20 42   a mask of the B
1b510 54 52 45 45 5f 2a 20 66 6c 61 67 73 20 64 65 66  TREE_* flags def
1b520 69 6e 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65  ined.** in btree
1b530 2e 68 2e 20 20 54 68 65 73 65 20 66 6c 61 67 73  .h.  These flags
1b540 20 63 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74 73   control aspects
1b550 20 6f 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f   of the operatio
1b560 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72 65  n of.** the btre
1b570 65 2e 20 20 54 68 65 20 42 54 52 45 45 5f 4f 4d  e.  The BTREE_OM
1b580 49 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42  IT_JOURNAL and B
1b590 54 52 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67  TREE_SINGLE flag
1b5a0 73 20 61 72 65 0a 2a 2a 20 61 64 64 65 64 20 61  s are.** added a
1b5b0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f  utomatically..*/
1b5c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1b5d0 41 75 74 6f 69 6e 64 65 78 20 50 31 20 50 32 20  Autoindex P1 P2 
1b5e0 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
1b5f0 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a  is: nColumn=P2.*
1b600 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1b610 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20   works the same 
1b620 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  as OP_OpenEpheme
1b630 72 61 6c 2e 20 20 49 74 20 68 61 73 20 61 0a 2a  ral.  It has a.*
1b640 2a 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65  * different name
1b650 20 74 6f 20 64 69 73 74 69 6e 67 75 69 73 68 20   to distinguish 
1b660 69 74 73 20 75 73 65 2e 20 20 54 61 62 6c 65 73  its use.  Tables
1b670 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a   created using.*
1b680 2a 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  * by this opcode
1b690 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f   will be used fo
1b6a0 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  r automatically 
1b6b0 63 72 65 61 74 65 64 20 74 72 61 6e 73 69 65 6e  created transien
1b6c0 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e 20  t.** indices in 
1b6d0 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  joins..*/.case O
1b6e0 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a  P_OpenAutoindex:
1b6f0 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70   .case OP_OpenEp
1b700 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62  hemeral: {.  Vdb
1b710 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20  eCursor *pCx;.  
1b720 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
1b730 6f 3b 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e  o;..  static con
1b740 73 74 20 69 6e 74 20 76 66 73 46 6c 61 67 73 20  st int vfsFlags 
1b750 3d 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  = .      SQLITE_
1b760 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c  OPEN_READWRITE |
1b770 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1b780 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20  EN_CREATE |.    
1b790 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58    SQLITE_OPEN_EX
1b7a0 43 4c 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20  CLUSIVE |.      
1b7b0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45  SQLITE_OPEN_DELE
1b7c0 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20  TEONCLOSE |.    
1b7d0 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52    SQLITE_OPEN_TR
1b7e0 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 20 20 61 73  ANSIENT_DB;.  as
1b7f0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1b800 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1b810 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p2>=0 );.  pC
1b820 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
1b830 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
1b840 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a  Op->p2, -1, 1);.
1b850 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1b860 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1b870 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
1b880 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65 72    pCx->isEphemer
1b890 61 6c 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73  al = 1;.  rc = s
1b8a0 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28  qlite3BtreeOpen(
1b8b0 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c  db->pVfs, 0, db,
1b8c0 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20 20   &pCx->pBt, .   
1b8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8e0 20 20 20 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f       BTREE_OMIT_
1b8f0 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f  JOURNAL | BTREE_
1b900 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35  SINGLE | pOp->p5
1b910 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a 20 20 69  , vfsFlags);.  i
1b920 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1b930 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
1b940 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72  ite3BtreeBeginTr
1b950 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20 31 29  ans(pCx->pBt, 1)
1b960 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d  ;.  }.  if( rc==
1b970 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1b980 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65   /* If a transie
1b990 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65 71 75  nt index is requ
1b9a0 69 72 65 64 2c 20 63 72 65 61 74 65 20 69 74 20  ired, create it 
1b9b0 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a  by calling.    *
1b9c0 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  * sqlite3BtreeCr
1b9d0 65 61 74 65 54 61 62 6c 65 28 29 20 77 69 74 68  eateTable() with
1b9e0 20 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b   the BTREE_BLOBK
1b9f0 45 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20  EY flag before. 
1ba00 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74     ** opening it
1ba10 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74  . If a transient
1ba20 20 74 61 62 6c 65 20 69 73 20 72 65 71 75 69 72   table is requir
1ba30 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65  ed, just use the
1ba40 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69  .    ** automati
1ba50 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61  cally created ta
1ba60 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61  ble with root-pa
1ba70 67 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e  ge 1 (an BLOB_IN
1ba80 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20  TKEY table)..   
1ba90 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 4b 65   */.    if( (pKe
1baa0 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
1bab0 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a  pKeyInfo)!=0 ){.
1bac0 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a        int pgno;.
1bad0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
1bae0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45  p->p4type==P4_KE
1baf0 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72  YINFO );.      r
1bb00 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1bb10 43 72 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d  CreateTable(pCx-
1bb20 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52  >pBt, &pgno, BTR
1bb30 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70  EE_BLOBKEY | pOp
1bb40 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 69 66  ->p5); .      if
1bb50 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1bb60 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
1bb70 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f  t( pgno==MASTER_
1bb80 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20  ROOT+1 );.      
1bb90 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
1bba0 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20  fo->db==db );.  
1bbb0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b        assert( pK
1bbc0 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43  eyInfo->enc==ENC
1bbd0 28 64 62 29 20 29 3b 0a 20 20 20 20 20 20 20 20  (db) );.        
1bbe0 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  pCx->pKeyInfo = 
1bbf0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20  pKeyInfo;.      
1bc00 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1bc10 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70  reeCursor(pCx->p
1bc20 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 70 4b 65  Bt, pgno, 1, pKe
1bc30 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 70 43 75 72  yInfo, pCx->pCur
1bc40 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  sor);.      }.  
1bc50 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
1bc60 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 0;.    }else{
1bc70 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1bc80 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
1bc90 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f  Cx->pBt, MASTER_
1bca0 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d  ROOT, 1, 0, pCx-
1bcb0 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  >pCursor);.     
1bcc0 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
1bcd0 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  1;.    }.  }.  p
1bce0 43 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20  Cx->isOrdered = 
1bcf0 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f  (pOp->p5!=BTREE_
1bd00 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 62 72  UNORDERED);.  br
1bd10 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1bd20 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e 20 50 31  e: SorterOpen P1
1bd30 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
1bd40 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
1bd50 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e  rks like OP_Open
1bd60 45 70 68 65 6d 65 72 61 6c 20 65 78 63 65 70 74  Ephemeral except
1bd70 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a   that it opens.*
1bd80 2a 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  * a transient in
1bd90 64 65 78 20 74 68 61 74 20 69 73 20 73 70 65 63  dex that is spec
1bda0 69 66 69 63 61 6c 6c 79 20 64 65 73 69 67 6e 65  ifically designe
1bdb0 64 20 74 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a  d to sort large.
1bdc0 2a 2a 20 74 61 62 6c 65 73 20 75 73 69 6e 67 20  ** tables using 
1bdd0 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65 72 67  an external merg
1bde0 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d  e-sort algorithm
1bdf0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 72 67 75 6d  ..**.** If argum
1be00 65 6e 74 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65  ent P3 is non-ze
1be10 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 6e 64 69  ro, then it indi
1be20 63 61 74 65 73 20 74 68 61 74 20 74 68 65 20 73  cates that the s
1be30 6f 72 74 65 72 20 6d 61 79 0a 2a 2a 20 61 73 73  orter may.** ass
1be40 75 6d 65 20 74 68 61 74 20 61 20 73 74 61 62 6c  ume that a stabl
1be50 65 20 73 6f 72 74 20 63 6f 6e 73 69 64 65 72 69  e sort consideri
1be60 6e 67 20 74 68 65 20 66 69 72 73 74 20 50 33 20  ng the first P3 
1be70 66 69 65 6c 64 73 20 6f 66 20 65 61 63 68 0a 2a  fields of each.*
1be80 2a 20 6b 65 79 20 69 73 20 73 75 66 66 69 63 69  * key is suffici
1be90 65 6e 74 20 74 6f 20 70 72 6f 64 75 63 65 20 74  ent to produce t
1bea0 68 65 20 72 65 71 75 69 72 65 64 20 72 65 73 75  he required resu
1beb0 6c 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lts..*/.case OP_
1bec0 53 6f 72 74 65 72 4f 70 65 6e 3a 20 7b 0a 20 20  SorterOpen: {.  
1bed0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1bee0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1bef0 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1bf00 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29  rt( pOp->p2>=0 )
1bf10 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
1bf20 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1bf30 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31  >p1, pOp->p2, -1
1bf40 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  , 1);.  if( pCx=
1bf50 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1bf60 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  ;.  pCx->pKeyInf
1bf70 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
1bf80 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20  Info;.  assert( 
1bf90 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64  pCx->pKeyInfo->d
1bfa0 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73 73 65 72  b==db );.  asser
1bfb0 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  t( pCx->pKeyInfo
1bfc0 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29  ->enc==ENC(db) )
1bfd0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1bfe0 56 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28 64  VdbeSorterInit(d
1bff0 62 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 43 78 29  b, pOp->p3, pCx)
1c000 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1c010 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63   Opcode: Sequenc
1c020 65 54 65 73 74 20 50 31 20 50 32 20 2a 20 2a 20  eTest P1 P2 * * 
1c030 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
1c040 66 28 20 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74  f( cursor[P1].ct
1c050 72 2b 2b 20 29 20 70 63 20 3d 20 50 32 0a 2a 2a  r++ ) pc = P2.**
1c060 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74  .** P1 is a sort
1c070 65 72 20 63 75 72 73 6f 72 2e 20 49 66 20 74 68  er cursor. If th
1c080 65 20 73 65 71 75 65 6e 63 65 20 63 6f 75 6e 74  e sequence count
1c090 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  er is currently 
1c0a0 7a 65 72 6f 2c 20 6a 75 6d 70 0a 2a 2a 20 74 6f  zero, jump.** to
1c0b0 20 50 32 2e 20 52 65 67 61 72 64 6c 65 73 73 20   P2. Regardless 
1c0c0 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  of whether or no
1c0d0 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
1c0e0 6b 65 6e 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74  ken, increment t
1c0f0 68 65 0a 2a 2a 20 74 68 65 20 73 65 71 75 65 6e  he.** the sequen
1c100 63 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73  ce value..*/.cas
1c110 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 54 65 73  e OP_SequenceTes
1c120 74 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  t: {.  VdbeCurso
1c130 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28  r *pC;.  assert(
1c140 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1c150 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1c160 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
1c170 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1c180 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 53 6f   assert( pC->pSo
1c190 72 74 65 72 20 29 3b 0a 20 20 69 66 28 20 28 70  rter );.  if( (p
1c1a0 43 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 29 3d 3d  C->seqCount++)==
1c1b0 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  0 ){.    pc = pO
1c1c0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
1c1d0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1c1e0 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f  code: OpenPseudo
1c1f0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1c200 20 53 79 6e 6f 70 73 69 73 3a 20 50 33 20 63 6f   Synopsis: P3 co
1c210 6c 75 6d 6e 73 20 69 6e 20 72 5b 50 32 5d 0a 2a  lumns in r[P2].*
1c220 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20  *.** Open a new 
1c230 63 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e  cursor that poin
1c240 74 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62  ts to a fake tab
1c250 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  le that contains
1c260 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77   a single.** row
1c270 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 63   of data.  The c
1c280 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20 6f  ontent of that o
1c290 6e 65 20 72 6f 77 20 69 73 20 74 68 65 20 63 6f  ne row is the co
1c2a0 6e 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a  ntent of memory.
1c2b0 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  ** register P2. 
1c2c0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1c2d0 20 63 75 72 73 6f 72 20 50 31 20 62 65 63 6f 6d   cursor P1 becom
1c2e0 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  es an alias for 
1c2f0 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62  the .** MEM_Blob
1c300 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e   content contain
1c310 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
1c320 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64  2..**.** A pseud
1c330 6f 2d 74 61 62 6c 65 20 63 72 65 61 74 65 64 20  o-table created 
1c340 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  by this opcode i
1c350 73 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61  s used to hold a
1c360 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f   single.** row o
1c370 75 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20 73  utput from the s
1c380 6f 72 74 65 72 20 73 6f 20 74 68 61 74 20 74 68  orter so that th
1c390 65 20 72 6f 77 20 63 61 6e 20 62 65 20 64 65 63  e row can be dec
1c3a0 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20  omposed into.** 
1c3b0 69 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d  individual colum
1c3c0 6e 73 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f  ns using the OP_
1c3d0 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20  Column opcode.  
1c3e0 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  The OP_Column op
1c3f0 63 6f 64 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f  code.** is the o
1c400 6e 6c 79 20 63 75 72 73 6f 72 20 6f 70 63 6f 64  nly cursor opcod
1c410 65 20 74 68 61 74 20 77 6f 72 6b 73 20 77 69 74  e that works wit
1c420 68 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  h a pseudo-table
1c430 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68  ..**.** P3 is th
1c440 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  e number of fiel
1c450 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ds in the record
1c460 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 73  s that will be s
1c470 74 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68 65 20  tored by.** the 
1c480 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f  pseudo-table..*/
1c490 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65  .case OP_OpenPse
1c4a0 75 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  udo: {.  VdbeCur
1c4b0 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73  sor *pCx;..  ass
1c4c0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1c4d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1c4e0 2d 3e 70 33 3e 3d 30 20 29 3b 0a 20 20 70 43 78  ->p3>=0 );.  pCx
1c4f0 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1c500 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  r(p, pOp->p1, pO
1c510 70 2d 3e 70 33 2c 20 2d 31 2c 20 30 29 3b 0a 20  p->p3, -1, 0);. 
1c520 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
1c530 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
1c540 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
1c550 20 70 43 78 2d 3e 70 73 65 75 64 6f 54 61 62 6c   pCx->pseudoTabl
1c560 65 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  eReg = pOp->p2;.
1c570 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1c580 20 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   1;.  assert( pO
1c590 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 62 72  p->p5==0 );.  br
1c5a0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1c5b0 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20  e: Close P1 * * 
1c5c0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20  * *.**.** Close 
1c5d0 61 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75  a cursor previou
1c5e0 73 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50 31  sly opened as P1
1c5f0 2e 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74 0a  .  If P1 is not.
1c600 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  ** currently ope
1c610 6e 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  n, this instruct
1c620 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a  ion is a no-op..
1c630 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65  */.case OP_Close
1c640 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
1c650 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1c660 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1c670 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 46  ;.  sqlite3VdbeF
1c680 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e  reeCursor(p, p->
1c690 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b  apCsr[pOp->p1]);
1c6a0 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  .  p->apCsr[pOp-
1c6b0 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61  >p1] = 0;.  brea
1c6c0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1c6d0 20 53 65 65 6b 47 45 20 50 31 20 50 32 20 50 33   SeekGE P1 P2 P3
1c6e0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
1c6f0 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1c700 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1c710 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1c720 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1c730 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1c740 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1c750 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1c760 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 74  register P3 as t
1c770 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73  he key.  If curs
1c780 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1c790 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1c7a0 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1c7b0 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1c7c0 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1c7d0 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1c7e0 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1c7f0 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1c800 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1c810 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1c820 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
1c830 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e   the smallest en
1c840 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1c850 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
1c860 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
1c870 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
1c880 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1c890 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e  .** greater than
1c8a0 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
1c8b0 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1c8c0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1c8d0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1c8e0 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
1c8f0 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
1c900 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
1c910 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65   in forward orde
1c920 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62  r,.** from the b
1c930 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20  eginning toward 
1c940 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68  the end.  In oth
1c950 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
1c960 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
1c970 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78  gured to use Nex
1c980 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a  t, not Prev..**.
1c990 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1c9a0 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65  nd, NotFound, Se
1c9b0 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53 65  ekLt, SeekGt, Se
1c9c0 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1c9d0 65 3a 20 53 65 65 6b 47 54 20 50 31 20 50 32 20  e: SeekGT P1 P2 
1c9e0 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1c9f0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1ca00 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1ca10 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1ca20 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1ca30 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1ca40 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1ca50 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1ca60 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1ca70 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1ca80 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1ca90 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1caa0 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1cab0 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1cac0 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1cad0 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1cae0 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1caf0 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1cb00 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1cb10 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1cb20 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
1cb30 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74  the smallest ent
1cb40 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67  ry that .** is g
1cb50 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
1cb60 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1cb70 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1cb80 64 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  ds greater than 
1cb90 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20  .** the key and 
1cba0 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1cbb0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1cbc0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1cbd0 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
1cbe0 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
1cbf0 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61  to move in forwa
1cc00 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  rd order,.** fro
1cc10 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
1cc20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20  toward the end. 
1cc30 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1cc40 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
1cc50 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
1cc60 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72  use Next, not Pr
1cc70 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ev..**.** See al
1cc80 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1cc90 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65  und, SeekLt, See
1cca0 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f  kGe, SeekLe.*/./
1ccb0 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 54  * Opcode: SeekLT
1ccc0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 20 0a   P1 P2 P3 P4 * .
1ccd0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1cce0 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1ccf0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1cd00 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1cd10 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1cd20 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1cd30 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1cd40 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1cd50 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
1cd60 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1cd70 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1cd80 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1cd90 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1cda0 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1cdb0 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1cdc0 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1cdd0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1cde0 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1cdf0 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1ce00 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
1ce10 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67  ints to the larg
1ce20 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1ce30 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ** is less than 
1ce40 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
1ce50 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
1ce60 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61 6e  ecords less than
1ce70 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64   .** the key and
1ce80 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1ce90 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1cea0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
1ceb0 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
1cec0 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
1ced0 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65   to move in reve
1cee0 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  rse order,.** fr
1cef0 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72  om the end towar
1cf00 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e  d the beginning.
1cf10 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1cf20 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
1cf30 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
1cf40 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e   use Prev, not N
1cf50 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ext..**.** See a
1cf60 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1cf70 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65  ound, SeekGt, Se
1cf80 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGe, SeekLe.*/.
1cf90 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c  /* Opcode: SeekL
1cfa0 45 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  E P1 P2 P3 P4 *.
1cfb0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1cfc0 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1cfd0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1cfe0 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1cff0 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1d000 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1d010 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1d020 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1d030 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
1d040 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1d050 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1d060 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1d070 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1d080 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1d090 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1d0a0 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1d0b0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1d0c0 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1d0d0 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1d0e0 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  1 so that it poi
1d0f0 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65  nts to the large
1d100 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1d110 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  * is less than o
1d120 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1d130 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
1d140 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1d150 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20  s .** less than 
1d160 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1d170 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1d180 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1d190 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  p to P2..**.** T
1d1a0 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
1d1b0 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
1d1c0 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
1d1d0 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72  in reverse order
1d1e0 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e  ,.** from the en
1d1f0 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67  d toward the beg
1d200 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65  inning.  In othe
1d210 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
1d220 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
1d230 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76  ured to use Prev
1d240 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a  , not Next..**.*
1d250 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1d260 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65  d, NotFound, See
1d270 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kGt, SeekGe, See
1d280 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  kLt.*/.case OP_S
1d290 65 65 6b 4c 54 3a 20 20 20 20 20 20 20 20 20 2f  eekLT:         /
1d2a0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1d2b0 61 73 65 20 4f 50 5f 53 65 65 6b 4c 45 3a 20 20  ase OP_SeekLE:  
1d2c0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1d2d0 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
1d2e0 65 65 6b 47 45 3a 20 20 20 20 20 20 20 20 20 2f  eekGE:         /
1d2f0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1d300 61 73 65 20 4f 50 5f 53 65 65 6b 47 54 3a 20 7b  ase OP_SeekGT: {
1d310 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1d320 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73  in3 */.  int res
1d330 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a 20 20 56 64  ;.  int oc;.  Vd
1d340 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1d350 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
1d360 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a  ;.  int nField;.
1d370 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20    i64 iKey;     
1d380 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77 65   /* The rowid we
1d390 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f 20   are to seek to 
1d3a0 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  */..  assert( pO
1d3b0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1d3c0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1d3d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1d3e0 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d  >p2!=0 );.  pC =
1d3f0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1d400 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1d410 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1d420 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
1d430 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Reg==0 );.  asse
1d440 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d 3d  rt( OP_SeekLE ==
1d450 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b 0a   OP_SeekLT+1 );.
1d460 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1d470 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54  kGE == OP_SeekLT
1d480 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +2 );.  assert( 
1d490 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50 5f  OP_SeekGT == OP_
1d4a0 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61 73  SeekLT+3 );.  as
1d4b0 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65  sert( pC->isOrde
1d4c0 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28  red );.  assert(
1d4d0 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
1d4e0 29 3b 0a 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f  );.  oc = pOp->o
1d4f0 70 63 6f 64 65 3b 0a 20 20 70 43 2d 3e 6e 75 6c  pcode;.  pC->nul
1d500 6c 52 6f 77 20 3d 20 30 3b 0a 23 69 66 64 65 66  lRow = 0;.#ifdef
1d510 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
1d520 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70  pC->seekOp = pOp
1d530 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66  ->opcode;.#endif
1d540 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62  .  if( pC->isTab
1d550 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  le ){.    /* The
1d560 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20   input value in 
1d570 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61  P3 might be of a
1d580 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72  ny type: integer
1d590 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a  , real, string,.
1d5a0 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20      ** blob, or 
1d5b0 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e 65  NULL.  But it ne
1d5c0 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  eds to be an int
1d5d0 65 67 65 72 20 62 65 66 6f 72 65 20 77 65 20 63  eger before we c
1d5e0 61 6e 20 64 6f 0a 20 20 20 20 2a 2a 20 74 68 65  an do.    ** the
1d5f0 20 73 65 65 6b 2c 20 73 6f 20 63 6f 6e 76 65 72   seek, so conver
1d600 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20 70 49 6e  t it. */.    pIn
1d610 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
1d620 33 5d 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  3];.    if( (pIn
1d630 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  3->flags & (MEM_
1d640 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d  Int|MEM_Real|MEM
1d650 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  _Str))==MEM_Str 
1d660 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 4e 75  ){.      applyNu
1d670 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
1d680 6e 33 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20  n3, 0);.    }.  
1d690 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33    iKey = sqlite3
1d6a0 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
1d6b0 33 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74  3);..    /* If t
1d6c0 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c  he P3 value coul
1d6d0 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  d not be convert
1d6e0 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67  ed into an integ
1d6f0 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20 2a  er without.    *
1d700 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  * loss of inform
1d710 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63  ation, then spec
1d720 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69  ial processing i
1d730 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f  s required... */
1d740 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e  .    if( (pIn3->
1d750 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
1d760 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
1d770 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
1d780 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a  MEM_Real)==0 ){.
1d790 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68          /* If th
1d7a0 65 20 50 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f  e P3 value canno
1d7b0 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
1d7c0 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20  nto any kind of 
1d7d0 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20 20  a number,.      
1d7e0 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 73 65    ** then the se
1d7f0 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62  ek is not possib
1d800 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50  le, so jump to P
1d810 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 63 20  2 */.        pc 
1d820 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 20 20  = pOp->p2 - 1;  
1d830 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
1d840 31 2c 32 29 3b 0a 20 20 20 20 20 20 20 20 62 72  1,2);.        br
1d850 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  eak;.      }..  
1d860 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70      /* If the ap
1d870 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79  proximation iKey
1d880 20 69 73 20 6c 61 72 67 65 72 20 74 68 61 6e 20   is larger than 
1d890 74 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20  the actual real 
1d8a0 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20  search.      ** 
1d8b0 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65  term, substitute
1d8c0 20 3e 3d 20 66 6f 72 20 3e 20 61 6e 64 20 3c 20   >= for > and < 
1d8d0 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e 20 69 66 20  for <=. e.g. if 
1d8e0 74 68 65 20 73 65 61 72 63 68 20 74 65 72 6d 0a  the search term.
1d8f0 20 20 20 20 20 20 2a 2a 20 69 73 20 34 2e 39 20        ** is 4.9 
1d900 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72 20  and the integer 
1d910 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 35 3a  approximation 5:
1d920 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20  .      **.      
1d930 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3e 20 20  **        (x >  
1d940 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28  4.9)    ->     (
1d950 78 20 3e 3d 20 35 29 0a 20 20 20 20 20 20 2a 2a  x >= 5).      **
1d960 20 20 20 20 20 20 20 20 28 78 20 3c 3d 20 34 2e          (x <= 4.
1d970 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20  9)    ->     (x 
1d980 3c 20 20 35 29 0a 20 20 20 20 20 20 2a 2f 0a 20  <  5).      */. 
1d990 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75       if( pIn3->u
1d9a0 2e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79 20  .r<(double)iKey 
1d9b0 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
1d9c0 74 28 20 4f 50 5f 53 65 65 6b 47 45 3d 3d 28 4f  t( OP_SeekGE==(O
1d9d0 50 5f 53 65 65 6b 47 54 2d 31 29 20 29 3b 0a 20  P_SeekGT-1) );. 
1d9e0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f         assert( O
1d9f0 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f 50 5f 53 65  P_SeekLT==(OP_Se
1da00 65 6b 4c 45 2d 31 29 20 29 3b 0a 20 20 20 20 20  ekLE-1) );.     
1da10 20 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53     assert( (OP_S
1da20 65 65 6b 4c 45 20 26 20 30 78 30 30 30 31 29 3d  eekLE & 0x0001)=
1da30 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78  =(OP_SeekGT & 0x
1da40 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20  0001) );.       
1da50 20 69 66 28 20 28 6f 63 20 26 20 30 78 30 30 30   if( (oc & 0x000
1da60 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26  1)==(OP_SeekGT &
1da70 20 30 78 30 30 30 31 29 20 29 20 6f 63 2d 2d 3b   0x0001) ) oc--;
1da80 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
1da90 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f 78  /* If the approx
1daa0 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20  imation iKey is 
1dab0 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 74 68 65  smaller than the
1dac0 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61   actual real sea
1dad0 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72  rch.      ** ter
1dae0 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20 3c 3d  m, substitute <=
1daf0 20 66 6f 72 20 3c 20 61 6e 64 20 3e 20 66 6f 72   for < and > for
1db00 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 65   >=.  */.      e
1db10 6c 73 65 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e  lse if( pIn3->u.
1db20 72 3e 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29  r>(double)iKey )
1db30 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
1db40 28 20 4f 50 5f 53 65 65 6b 4c 45 3d 3d 28 4f 50  ( OP_SeekLE==(OP
1db50 5f 53 65 65 6b 4c 54 2b 31 29 20 29 3b 0a 20 20  _SeekLT+1) );.  
1db60 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
1db70 5f 53 65 65 6b 47 54 3d 3d 28 4f 50 5f 53 65 65  _SeekGT==(OP_See
1db80 6b 47 45 2b 31 29 20 29 3b 0a 20 20 20 20 20 20  kGE+1) );.      
1db90 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65    assert( (OP_Se
1dba0 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29 3d 3d  ekLT & 0x0001)==
1dbb0 28 4f 50 5f 53 65 65 6b 47 45 20 26 20 30 78 30  (OP_SeekGE & 0x0
1dbc0 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  001) );.        
1dbd0 69 66 28 20 28 6f 63 20 26 20 30 78 30 30 30 31  if( (oc & 0x0001
1dbe0 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20  )==(OP_SeekLT & 
1dbf0 30 78 30 30 30 31 29 20 29 20 6f 63 2b 2b 3b 0a  0x0001) ) oc++;.
1dc00 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 0a 20        }.    } . 
1dc10 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1dc20 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1dc30 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
1dc40 30 2c 20 28 75 36 34 29 69 4b 65 79 2c 20 30 2c  0, (u64)iKey, 0,
1dc50 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e   &res);.    pC->
1dc60 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 69  movetoTarget = i
1dc70 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64 20 62 79  Key;  /* Used by
1dc80 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20   OP_Delete */.  
1dc90 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1dca0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
1dcb0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1dcc0 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  rror;.    }.  }e
1dcd0 6c 73 65 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20  lse{.    nField 
1dce0 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  = pOp->p4.i;.   
1dcf0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
1dd00 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
1dd10 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e 46  ;.    assert( nF
1dd20 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e  ield>0 );.    r.
1dd30 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
1dd40 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e  KeyInfo;.    r.n
1dd50 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69  Field = (u16)nFi
1dd60 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65  eld;..    /* The
1dd70 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f   next line of co
1dd80 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66  de computes as f
1dd90 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73  ollows, only fas
1dda0 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66  ter:.    **   if
1ddb0 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20  ( oc==OP_SeekGT 
1ddc0 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45  || oc==OP_SeekLE
1ddd0 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72   ){.    **     r
1dde0 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31  .default_rc = -1
1ddf0 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65  ;.    **   }else
1de00 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64  {.    **     r.d
1de10 65 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a  efault_rc = +1;.
1de20 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a      **   }.    *
1de30 2f 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  /.    r.default_
1de40 72 63 20 3d 20 28 28 31 20 26 20 28 6f 63 20 2d  rc = ((1 & (oc -
1de50 20 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d   OP_SeekLT)) ? -
1de60 31 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73 73  1 : +1);.    ass
1de70 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1de80 47 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  GT || r.default_
1de90 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73  rc==-1 );.    as
1dea0 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1deb0 6b 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kLE || r.default
1dec0 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61  _rc==-1 );.    a
1ded0 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
1dee0 65 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekGE || r.defaul
1def0 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20  t_rc==+1 );.    
1df00 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
1df10 65 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75  eekLT || r.defau
1df20 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20  lt_rc==+1 );..  
1df30 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
1df40 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
1df50 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1df60 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28     { int i; for(
1df70 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
1df80 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
1df90 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
1dfa0 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
1dfb0 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28  .    ExpandBlob(
1dfc0 72 2e 61 4d 65 6d 29 3b 0a 20 20 20 20 72 63 20  r.aMem);.    rc 
1dfd0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1dfe0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1dff0 3e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c  >pCursor, &r, 0,
1e000 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69   0, &res);.    i
1e010 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1e020 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
1e030 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1e040 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  r;.    }.  }.  p
1e050 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1e060 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  o = 0;.  pC->cac
1e070 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1e080 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53  _STALE;.#ifdef S
1e090 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c  QLITE_TEST.  sql
1e0a0 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
1e0b0 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  t++;.#endif.  if
1e0c0 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 45 20  ( oc>=OP_SeekGE 
1e0d0 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d  ){  assert( oc==
1e0e0 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 6f 63 3d  OP_SeekGE || oc=
1e0f0 3d 4f 50 5f 53 65 65 6b 47 54 20 29 3b 0a 20 20  =OP_SeekGT );.  
1e100 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c 20 28    if( res<0 || (
1e110 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50  res==0 && oc==OP
1e120 5f 53 65 65 6b 47 54 29 20 29 7b 0a 20 20 20 20  _SeekGT) ){.    
1e130 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20    res = 0;.     
1e140 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1e150 65 65 4e 65 78 74 28 70 43 2d 3e 70 43 75 72 73  eeNext(pC->pCurs
1e160 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
1e170 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1e180 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
1e190 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1e1a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
1e1b0 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  es = 0;.    }.  
1e1c0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
1e1d0 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54  t( oc==OP_SeekLT
1e1e0 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   || oc==OP_SeekL
1e1f0 45 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  E );.    if( res
1e200 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26  >0 || (res==0 &&
1e210 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29 20   oc==OP_SeekLT) 
1e220 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30  ){.      res = 0
1e230 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
1e240 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
1e250 73 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  s(pC->pCursor, &
1e260 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20  res);.      if( 
1e270 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
1e280 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1e290 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c  o_error;.    }el
1e2a0 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72 65 73  se{.      /* res
1e2b0 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74 69   might be negati
1e2c0 76 65 20 62 65 63 61 75 73 65 20 74 68 65 20 74  ve because the t
1e2d0 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20  able is empty.  
1e2e0 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 2a  Check to.      *
1e2f0 2a 20 73 65 65 20 69 66 20 74 68 69 73 20 69 73  * see if this is
1e300 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20   the case..     
1e310 20 2a 2f 0a 20 20 20 20 20 20 72 65 73 20 3d 20   */.      res = 
1e320 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28  sqlite3BtreeEof(
1e330 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
1e340 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72 74    }.  }.  assert
1e350 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
1e360 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
1e370 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66  (res!=0,2);.  if
1e380 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20  ( res ){.    pc 
1e390 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1e3a0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1e3b0 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20 50  * Opcode: Seek P
1e3c0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
1e3d0 6e 6f 70 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d  nopsis:  intkey=
1e3e0 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69  r[P2].**.** P1 i
1e3f0 73 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c 65 20  s an open table 
1e400 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73  cursor and P2 is
1e410 20 61 20 72 6f 77 69 64 20 69 6e 74 65 67 65 72   a rowid integer
1e420 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20 66 6f  .  Arrange.** fo
1e430 72 20 50 31 20 74 6f 20 6d 6f 76 65 20 73 6f 20  r P1 to move so 
1e440 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
1e450 6f 20 74 68 65 20 72 6f 77 69 64 20 67 69 76 65  o the rowid give
1e460 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  n by P2..**.** T
1e470 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c 79 20  his is actually 
1e480 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 2e  a deferred seek.
1e490 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61 6c    Nothing actual
1e4a0 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69 6c  ly happens until
1e4b0 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 69  .** the cursor i
1e4c0 73 20 75 73 65 64 20 74 6f 20 72 65 61 64 20 61  s used to read a
1e4d0 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20 77   record.  That w
1e4e0 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73 0a  ay, if no reads.
1e4f0 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e  ** occur, no unn
1e500 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61 70  ecessary I/O hap
1e510 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  pens..*/.case OP
1e520 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a 20 69  _Seek: {    /* i
1e530 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  n2 */.  VdbeCurs
1e540 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72  or *pC;..  asser
1e550 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1e560 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1e570 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
1e580 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1e590 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1e5a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1e5b0 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  ->pCursor!=0 );.
1e5c0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1e5d0 54 61 62 6c 65 20 29 3b 0a 20 20 70 43 2d 3e 6e  Table );.  pC->n
1e5e0 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 49  ullRow = 0;.  pI
1e5f0 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
1e600 70 32 5d 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74  p2];.  pC->movet
1e610 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65  oTarget = sqlite
1e620 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
1e630 6e 32 29 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72  n2);.  pC->defer
1e640 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20  redMoveto = 1;. 
1e650 20 62 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a   break;.}.  ../*
1e660 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50   Opcode: Found P
1e670 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
1e680 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
1e690 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
1e6a0 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73  P4==0 then regis
1e6b0 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
1e6c0 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
1e6d0 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
1e6e0 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20  If.** P4>0 then 
1e6f0 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  register P3 is t
1e700 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
1e710 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
1e720 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
1e730 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20  * record..**.** 
1e740 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20  Cursor P1 is on 
1e750 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20  an index btree. 
1e760 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69   If the record i
1e770 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20  dentified by P3 
1e780 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61 20 70  and P4.** is a p
1e790 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74  refix of any ent
1e7a0 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20  ry in P1 then a 
1e7b0 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20  jump is made to 
1e7c0 50 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20  P2 and.** P1 is 
1e7d0 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
1e7e0 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e   the matching en
1e7f0 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  try..**.** This 
1e800 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73  operation leaves
1e810 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61   the cursor in a
1e820 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20   state where it 
1e830 63 61 6e 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63  can be.** advanc
1e840 65 64 20 69 6e 20 74 68 65 20 66 6f 72 77 61 72  ed in the forwar
1e850 64 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 54 68  d direction.  Th
1e860 65 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e Next instructi
1e870 6f 6e 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a  on will work,.**
1e880 20 62 75 74 20 6e 6f 74 20 74 68 65 20 50 72 65   but not the Pre
1e890 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  v instruction..*
1e8a0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e  *.** See also: N
1e8b0 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c  otFound, NoConfl
1e8c0 69 63 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e 20  ict, NotExists. 
1e8d0 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekGe.*/./* Opc
1e8e0 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31  ode: NotFound P1
1e8f0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1e900 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1e910 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50  3@P4].**.** If P
1e920 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74  4==0 then regist
1e930 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
1e940 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
1e950 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49  y MakeRecord.  I
1e960 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72  f.** P4>0 then r
1e970 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
1e980 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65  e first of P4 re
1e990 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72  gisters that for
1e9a0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a  m an unpacked.**
1e9b0 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20   record..** .** 
1e9c0 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20  Cursor P1 is on 
1e9d0 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20  an index btree. 
1e9e0 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69   If the record i
1e9f0 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20  dentified by P3 
1ea00 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74  and P4.** is not
1ea10 20 74 68 65 20 70 72 65 66 69 78 20 6f 66 20 61   the prefix of a
1ea20 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74  ny entry in P1 t
1ea30 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61  hen a jump is ma
1ea40 64 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31  de to P2.  If P1
1ea50 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69   .** does contai
1ea60 6e 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65  n an entry whose
1ea70 20 70 72 65 66 69 78 20 6d 61 74 63 68 65 73 20   prefix matches 
1ea80 74 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64  the P3/P4 record
1ea90 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a   then control.**
1eaa0 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74   falls through t
1eab0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
1eac0 75 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73  uction and P1 is
1ead0 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
1eae0 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e  t the.** matchin
1eaf0 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54  g entry..**.** T
1eb00 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65  his operation le
1eb10 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
1eb20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65  in a state where
1eb30 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a   it cannot be.**
1eb40 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74   advanced in eit
1eb50 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20  her direction.  
1eb60 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1eb70 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65  the Next and Pre
1eb80 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20  v.** opcodes do 
1eb90 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74  not work after t
1eba0 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a  his operation..*
1ebb0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
1ebc0 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c  ound, NotExists,
1ebd0 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 2f   NoConflict.*/./
1ebe0 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66  * Opcode: NoConf
1ebf0 6c 69 63 74 20 50 31 20 50 32 20 50 33 20 50 34  lict P1 P2 P3 P4
1ec00 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1ec10 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
1ec20 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e  ** If P4==0 then
1ec30 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c   register P3 hol
1ec40 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  ds a blob constr
1ec50 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63  ucted by MakeRec
1ec60 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30  ord.  If.** P4>0
1ec70 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
1ec80 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f  3 is the first o
1ec90 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74  f P4 registers t
1eca0 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61  hat form an unpa
1ecb0 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a  cked.** record..
1ecc0 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31  ** .** Cursor P1
1ecd0 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20   is on an index 
1ece0 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72  btree.  If the r
1ecf0 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64  ecord identified
1ed00 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a   by P3 and P4.**
1ed10 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 4e 55   contains any NU
1ed20 4c 4c 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69  LL value, jump i
1ed30 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
1ed40 2e 20 20 49 66 20 61 6c 6c 20 74 65 72 6d 73 20  .  If all terms 
1ed50 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64  of the.** record
1ed60 20 61 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68   are not-NULL th
1ed70 65 6e 20 61 20 63 68 65 63 6b 20 69 73 20 64 6f  en a check is do
1ed80 6e 65 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ne to determine 
1ed90 69 66 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68  if any row in th
1eda0 65 0a 2a 2a 20 50 31 20 69 6e 64 65 78 20 62 74  e.** P1 index bt
1edb0 72 65 65 20 68 61 73 20 61 20 6d 61 74 63 68 69  ree has a matchi
1edc0 6e 67 20 6b 65 79 20 70 72 65 66 69 78 2e 20 20  ng key prefix.  
1edd0 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1ede0 6d 61 74 63 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a  matches, jump.**
1edf0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
1ee00 50 32 2e 20 20 49 66 20 74 68 65 72 65 20 69 73  P2.  If there is
1ee10 20 61 20 6d 61 74 63 68 2c 20 66 61 6c 6c 20 74   a match, fall t
1ee20 68 72 6f 75 67 68 20 61 6e 64 20 6c 65 61 76 65  hrough and leave
1ee30 20 74 68 65 20 50 31 0a 2a 2a 20 63 75 72 73 6f   the P1.** curso
1ee40 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68  r pointing to th
1ee50 65 20 6d 61 74 63 68 69 6e 67 20 72 6f 77 2e 0a  e matching row..
1ee60 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1ee70 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20  e is similar to 
1ee80 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 77 69 74 68  OP_NotFound with
1ee90 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20   the exceptions 
1eea0 74 68 61 74 20 74 68 65 0a 2a 2a 20 62 72 61 6e  that the.** bran
1eeb0 63 68 20 69 73 20 61 6c 77 61 79 73 20 74 61 6b  ch is always tak
1eec0 65 6e 20 69 66 20 61 6e 79 20 70 61 72 74 20 6f  en if any part o
1eed0 66 20 74 68 65 20 73 65 61 72 63 68 20 6b 65 79  f the search key
1eee0 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 0a   input is NULL..
1eef0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  **.** This opera
1ef00 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20  tion leaves the 
1ef10 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74  cursor in a stat
1ef20 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f  e where it canno
1ef30 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64  t be.** advanced
1ef40 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63   in either direc
1ef50 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20  tion.  In other 
1ef60 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20  words, the Next 
1ef70 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f  and Prev.** opco
1ef80 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20  des do not work 
1ef90 61 66 74 65 72 20 74 68 69 73 20 6f 70 65 72 61  after this opera
1efa0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  tion..**.** See 
1efb0 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20  also: NotFound, 
1efc0 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73  Found, NotExists
1efd0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 43 6f  .*/.case OP_NoCo
1efe0 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20 6a  nflict:     /* j
1eff0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1f000 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20   OP_NotFound:   
1f010 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1f020 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e   */.case OP_Foun
1f030 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
1f040 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  ump, in3 */.  in
1f050 74 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b  t alreadyExists;
1f060 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20 56 64 62  .  int ii;.  Vdb
1f070 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
1f080 6e 74 20 72 65 73 3b 0a 20 20 63 68 61 72 20 2a  nt res;.  char *
1f090 70 46 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b 65  pFree;.  Unpacke
1f0a0 64 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79  dRecord *pIdxKey
1f0b0 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
1f0c0 72 64 20 72 3b 0a 20 20 63 68 61 72 20 61 54 65  rd r;.  char aTe
1f0d0 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28 73 69 7a  mpRec[ROUND8(siz
1f0e0 65 6f 66 28 55 6e 70 61 63 6b 65 64 52 65 63 6f  eof(UnpackedReco
1f0f0 72 64 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65  rd)) + sizeof(Me
1f100 6d 29 2a 34 20 2b 20 37 5d 3b 0a 0a 23 69 66 64  m)*4 + 7];..#ifd
1f110 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
1f120 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
1f130 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20  !=OP_NoConflict 
1f140 29 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  ) sqlite3_found_
1f150 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a  count++;.#endif.
1f160 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1f170 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1f180 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1f190 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
1f1a0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
1f1b0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1f1c0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1f1d0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23  sert( pC!=0 );.#
1f1e0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
1f1f0 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20  UG.  pC->seekOp 
1f200 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23  = pOp->opcode;.#
1f210 65 6e 64 69 66 0a 20 20 70 49 6e 33 20 3d 20 26  endif.  pIn3 = &
1f220 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
1f230 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
1f240 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  rsor!=0 );.  ass
1f250 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1f260 3d 3d 30 20 29 3b 0a 20 20 70 46 72 65 65 20 3d  ==0 );.  pFree =
1f270 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64   0;  /* Not need
1f280 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74  ed.  Only used t
1f290 6f 20 73 75 70 70 72 65 73 73 20 61 20 63 6f 6d  o suppress a com
1f2a0 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a  piler warning. *
1f2b0 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e  /.  if( pOp->p4.
1f2c0 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65  i>0 ){.    r.pKe
1f2d0 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
1f2e0 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65  Info;.    r.nFie
1f2f0 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70  ld = (u16)pOp->p
1f300 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20  4.i;.    r.aMem 
1f310 3d 20 70 49 6e 33 3b 0a 20 20 20 20 66 6f 72 28  = pIn3;.    for(
1f320 69 69 3d 30 3b 20 69 69 3c 72 2e 6e 46 69 65 6c  ii=0; ii<r.nFiel
1f330 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  d; ii++){.      
1f340 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
1f350 69 64 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 20  id(&r.aMem[ii]) 
1f360 29 3b 0a 20 20 20 20 20 20 45 78 70 61 6e 64 42  );.      ExpandB
1f370 6c 6f 62 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29  lob(&r.aMem[ii])
1f380 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1f390 44 45 42 55 47 0a 20 20 20 20 20 20 69 66 28 20  DEBUG.      if( 
1f3a0 69 69 20 29 20 52 45 47 49 53 54 45 52 5f 54 52  ii ) REGISTER_TR
1f3b0 41 43 45 28 70 4f 70 2d 3e 70 33 2b 69 69 2c 20  ACE(pOp->p3+ii, 
1f3c0 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 65  &r.aMem[ii]);.#e
1f3d0 6e 64 69 66 0a 20 20 20 20 7d 0a 20 20 20 20 70  ndif.    }.    p
1f3e0 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20 7d  IdxKey = &r;.  }
1f3f0 65 6c 73 65 7b 0a 20 20 20 20 70 49 64 78 4b 65  else{.    pIdxKe
1f400 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  y = sqlite3VdbeA
1f410 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63 6f  llocUnpackedReco
1f420 72 64 28 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  rd(.        pC->
1f430 70 4b 65 79 49 6e 66 6f 2c 20 61 54 65 6d 70 52  pKeyInfo, aTempR
1f440 65 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70  ec, sizeof(aTemp
1f450 52 65 63 29 2c 20 26 70 46 72 65 65 0a 20 20 20  Rec), &pFree.   
1f460 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78   );.    if( pIdx
1f470 4b 65 79 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  Key==0 ) goto no
1f480 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74  _mem;.    assert
1f490 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
1f4a0 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20  MEM_Blob );.    
1f4b0 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29  ExpandBlob(pIn3)
1f4c0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
1f4d0 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28 70 43  eRecordUnpack(pC
1f4e0 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33  ->pKeyInfo, pIn3
1f4f0 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49  ->n, pIn3->z, pI
1f500 64 78 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 70 49  dxKey);.  }.  pI
1f510 64 78 4b 65 79 2d 3e 64 65 66 61 75 6c 74 5f 72  dxKey->default_r
1f520 63 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70  c = 0;.  if( pOp
1f530 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43  ->opcode==OP_NoC
1f540 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20 20 2f  onflict ){.    /
1f550 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f 4e 6f 43  * For the OP_NoC
1f560 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64 65 2c 20  onflict opcode, 
1f570 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
1f580 20 61 6e 79 20 6f 66 20 74 68 65 0a 20 20 20 20   any of the.    
1f590 2a 2a 20 69 6e 70 75 74 20 66 69 65 6c 64 73 20  ** input fields 
1f5a0 61 72 65 20 4e 55 4c 4c 2c 20 73 69 6e 63 65 20  are NULL, since 
1f5b0 61 6e 79 20 6b 65 79 20 77 69 74 68 20 61 20 4e  any key with a N
1f5c0 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20 20 20  ULL will not.   
1f5d0 20 2a 2a 20 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a   ** conflict */.
1f5e0 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
1f5f0 3c 70 49 64 78 4b 65 79 2d 3e 6e 46 69 65 6c 64  <pIdxKey->nField
1f600 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69  ; ii++){.      i
1f610 66 28 20 70 49 64 78 4b 65 79 2d 3e 61 4d 65 6d  f( pIdxKey->aMem
1f620 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  [ii].flags & MEM
1f630 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20  _Null ){.       
1f640 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1f650 31 3b 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  1; VdbeBranchTak
1f660 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20 20 20 20  en(1,2);.       
1f670 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
1f680 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d      }.  }.  rc =
1f690 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1f6a0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
1f6b0 70 43 75 72 73 6f 72 2c 20 70 49 64 78 4b 65 79  pCursor, pIdxKey
1f6c0 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  , 0, 0, &res);. 
1f6d0 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3d 3d   if( pOp->p4.i==
1f6e0 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
1f6f0 44 62 46 72 65 65 28 64 62 2c 20 70 46 72 65 65  DbFree(db, pFree
1f700 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 21  );.  }.  if( rc!
1f710 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1f720 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70    break;.  }.  p
1f730 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
1f740 72 65 73 3b 0a 20 20 61 6c 72 65 61 64 79 45 78  res;.  alreadyEx
1f750 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b  ists = (res==0);
1f760 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
1f770 20 31 2d 61 6c 72 65 61 64 79 45 78 69 73 74 73   1-alreadyExists
1f780 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
1f790 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
1f7a0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1f7b0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69  CACHE_STALE;.  i
1f7c0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
1f7d0 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20  OP_Found ){.    
1f7e0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
1f7f0 61 6c 72 65 61 64 79 45 78 69 73 74 73 21 3d 30  alreadyExists!=0
1f800 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 61 6c 72  ,2);.    if( alr
1f810 65 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20  eadyExists ) pc 
1f820 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1f830 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65   }else{.    Vdbe
1f840 42 72 61 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65  BranchTaken(alre
1f850 61 64 79 45 78 69 73 74 73 3d 3d 30 2c 32 29 3b  adyExists==0,2);
1f860 0a 20 20 20 20 69 66 28 20 21 61 6c 72 65 61 64  .    if( !alread
1f870 79 45 78 69 73 74 73 20 29 20 70 63 20 3d 20 70  yExists ) pc = p
1f880 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
1f890 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1f8a0 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74 73  pcode: NotExists
1f8b0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1f8c0 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65   Synopsis: intke
1f8d0 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31  y=r[P3].**.** P1
1f8e0 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
1f8f0 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f   a cursor open o
1f900 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 62  n an SQL table b
1f910 74 72 65 65 20 28 77 69 74 68 20 69 6e 74 65 67  tree (with integ
1f920 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33  er.** keys).  P3
1f930 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72   is an integer r
1f940 6f 77 69 64 2e 20 20 49 66 20 50 31 20 64 6f 65  owid.  If P1 doe
1f950 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20  s not contain a 
1f960 72 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72  record with.** r
1f970 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75 6d  owid P3 then jum
1f980 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
1f990 20 50 32 2e 20 20 49 66 20 50 31 20 64 6f 65 73   P2.  If P1 does
1f9a0 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72   contain a recor
1f9b0 64 0a 2a 2a 20 77 69 74 68 20 72 6f 77 69 64 20  d.** with rowid 
1f9c0 50 33 20 74 68 65 6e 20 6c 65 61 76 65 20 74 68  P3 then leave th
1f9d0 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  e cursor pointin
1f9e0 67 20 61 74 20 74 68 61 74 20 72 65 63 6f 72 64  g at that record
1f9f0 20 61 6e 64 20 66 61 6c 6c 0a 2a 2a 20 74 68 72   and fall.** thr
1fa00 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
1fa10 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
1fa20 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f  .** The OP_NotFo
1fa30 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72 66 6f  und opcode perfo
1fa40 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65  rms the same ope
1fa50 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20  ration on index 
1fa60 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74 68 20  btrees.** (with 
1fa70 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74 69 2d  arbitrary multi-
1fa80 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a  value keys)..**.
1fa90 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
1faa0 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1fab0 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
1fac0 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 61  e it cannot be a
1fad0 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69  dvanced.** in ei
1fae0 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20  ther direction. 
1faf0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1fb00 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72   the Next and Pr
1fb10 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a  ev opcodes will.
1fb20 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c  ** not work foll
1fb30 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  owing this opcod
1fb40 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
1fb50 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1fb60 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a  nd, NoConflict.*
1fb70 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69  /.case OP_NotExi
1fb80 73 74 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  sts: {        /*
1fb90 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
1fba0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1fbb0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
1fbc0 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  r;.  int res;.  
1fbd0 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e  u64 iKey;..  pIn
1fbe0 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
1fbf0 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  3];.  assert( pI
1fc00 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1fc10 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Int );.  assert(
1fc20 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1fc30 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1fc40 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
1fc50 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1fc60 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1fc70 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1fc80 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
1fc90 4f 70 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20  Op = 0;.#endif. 
1fca0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
1fcb0 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74  able );.  assert
1fcc0 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
1fcd0 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 70 43 72  eReg==0 );.  pCr
1fce0 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
1fcf0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
1fd00 72 21 3d 30 20 29 3b 0a 20 20 72 65 73 20 3d 20  r!=0 );.  res = 
1fd10 30 3b 0a 20 20 69 4b 65 79 20 3d 20 70 49 6e 33  0;.  iKey = pIn3
1fd20 2d 3e 75 2e 69 3b 0a 20 20 72 63 20 3d 20 73 71  ->u.i;.  rc = sq
1fd30 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1fd40 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20  Unpacked(pCrsr, 
1fd50 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72 65 73  0, iKey, 0, &res
1fd60 29 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  );.  pC->movetoT
1fd70 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f  arget = iKey;  /
1fd80 2a 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c  * Used by OP_Del
1fd90 65 74 65 20 2a 2f 0a 20 20 70 43 2d 3e 6e 75 6c  ete */.  pC->nul
1fda0 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  lRow = 0;.  pC->
1fdb0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1fdc0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d  CHE_STALE;.  pC-
1fdd0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
1fde0 3d 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  = 0;.  VdbeBranc
1fdf0 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
1fe00 3b 0a 20 20 69 66 28 20 72 65 73 21 3d 30 20 29  ;.  if( res!=0 )
1fe10 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
1fe20 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 70 43  p2 - 1;.  }.  pC
1fe30 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72  ->seekResult = r
1fe40 65 73 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  es;.  break;.}..
1fe50 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65  /* Opcode: Seque
1fe60 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  nce P1 P2 * * *.
1fe70 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
1fe80 32 5d 3d 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74  2]=cursor[P1].ct
1fe90 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74  r++.**.** Find t
1fea0 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61 62 6c  he next availabl
1feb0 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  e sequence numbe
1fec0 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e  r for cursor P1.
1fed0 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 73 65  .** Write the se
1fee0 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e  quence number in
1fef0 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
1ff00 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63 65 20  ** The sequence 
1ff10 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20 63 75  number on the cu
1ff20 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d 65 6e  rsor is incremen
1ff30 74 65 64 20 61 66 74 65 72 20 74 68 69 73 0a 2a  ted after this.*
1ff40 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  * instruction.  
1ff50 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75  .*/.case OP_Sequ
1ff60 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20  ence: {         
1ff70 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
1ff80 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  ease */.  assert
1ff90 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1ffa0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1ffb0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
1ffc0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1ffd0 5d 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  ]!=0 );.  pOut->
1ffe0 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  u.i = p->apCsr[p
1fff0 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e  Op->p1]->seqCoun
20000 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  t++;.  break;.}.
20010 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77  ../* Opcode: New
20020 52 6f 77 69 64 20 50 31 20 50 32 20 50 33 20 2a  Rowid P1 P2 P3 *
20030 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
20040 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a  r[P2]=rowid.**.*
20050 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65  * Get a new inte
20060 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ger record numbe
20070 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22  r (a.k.a "rowid"
20080 29 20 75 73 65 64 20 61 73 20 74 68 65 20 6b 65  ) used as the ke
20090 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a  y to a table..**
200a0 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62   The record numb
200b0 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f  er is not previo
200c0 75 73 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b  usly used as a k
200d0 65 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ey in the databa
200e0 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74  se.** table that
200f0 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74   cursor P1 point
20100 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72  s to.  The new r
20110 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20  ecord number is 
20120 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74  written.** writt
20130 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  en to register P
20140 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30  2..**.** If P3>0
20150 20 74 68 65 6e 20 50 33 20 69 73 20 61 20 72 65   then P3 is a re
20160 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f  gister in the ro
20170 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73  ot frame of this
20180 20 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73   VDBE that holds
20190 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74   .** the largest
201a0 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65   previously gene
201b0 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d  rated record num
201c0 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f  ber. No new reco
201d0 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a  rd numbers are.*
201e0 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20  * allowed to be 
201f0 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 76  less than this v
20200 61 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20  alue. When this 
20210 76 61 6c 75 65 20 72 65 61 63 68 65 73 20 69 74  value reaches it
20220 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61  s maximum, .** a
20230 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72  n SQLITE_FULL er
20240 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65 64  ror is generated
20250 2e 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65  . The P3 registe
20260 72 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74  r is updated wit
20270 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72  h the '.** gener
20280 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62  ated record numb
20290 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68  er. This P3 mech
202a0 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f  anism is used to
202b0 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20   help implement 
202c0 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45  the.** AUTOINCRE
202d0 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f  MENT feature..*/
202e0 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69  .case OP_NewRowi
202f0 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  d: {           /
20300 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
20310 65 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20  e */.  i64 v;   
20320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20330 20 54 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a   The new rowid *
20340 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
20350 70 43 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75  pC;        /* Cu
20360 72 73 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f  rsor of table to
20370 20 67 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77   get the new row
20380 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b  id */.  int res;
20390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
203a0 2a 20 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73  * Result of an s
203b0 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
203c0 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20  ) */.  int cnt; 
203d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
203e0 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69   Counter to limi
203f0 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
20400 73 65 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65  searches */.  Me
20410 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *pMem;        
20420 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
20430 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74   holding largest
20440 20 72 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49   rowid for AUTOI
20450 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64  NCREMENT */.  Vd
20460 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
20470 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61       /* Root fra
20480 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20  me of VDBE */.. 
20490 20 76 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20   v = 0;.  res = 
204a0 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
204b0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
204c0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
204d0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
204e0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
204f0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
20500 69 66 28 20 4e 45 56 45 52 28 70 43 2d 3e 70 43  if( NEVER(pC->pC
20510 75 72 73 6f 72 3d 3d 30 29 20 29 7b 0a 20 20 20  ursor==0) ){.   
20520 20 2f 2a 20 54 68 65 20 7a 65 72 6f 20 69 6e 69   /* The zero ini
20530 74 69 61 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76  tialization abov
20540 65 20 69 73 20 61 6c 6c 20 74 68 61 74 20 69 73  e is all that is
20550 20 6e 65 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c   needed */.  }el
20560 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e  se{.    /* The n
20570 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63  ext rowid or rec
20580 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66  ord number (diff
20590 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20  erent terms for 
205a0 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20  the same.    ** 
205b0 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e  thing) is obtain
205c0 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70  ed in a two-step
205d0 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20   algorithm..    
205e0 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20  **.    ** First 
205f0 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69  we attempt to fi
20600 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  nd the largest e
20610 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e  xisting rowid an
20620 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a  d add one.    **
20630 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69   to that.  But i
20640 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78  f the largest ex
20650 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20  isting rowid is 
20660 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61 78 69  already the maxi
20670 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74  mum.    ** posit
20680 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20  ive integer, we 
20690 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72  have to fall thr
206a0 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f  ough to the seco
206b0 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62  nd.    ** probab
206c0 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68  ilistic algorith
206d0 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  m.    **.    ** 
206e0 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72  The second algor
206f0 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63  ithm is to selec
20700 74 20 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e  t a rowid at ran
20710 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20  dom and see if. 
20720 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79     ** it already
20730 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 20 74   exists in the t
20740 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65  able.  If it doe
20750 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20  s not exist, we 
20760 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63  have.    ** succ
20770 65 65 64 65 64 2e 20 20 49 66 20 74 68 65 20 72  eeded.  If the r
20780 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73  andom rowid does
20790 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63   exist, we selec
207a0 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20  t a new one.    
207b0 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e  ** and try again
207c0 2c 20 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65  , up to 100 time
207d0 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73  s..    */.    as
207e0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
207f0 65 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  e );..#ifdef SQL
20800 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a  ITE_32BIT_ROWID.
20810 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52  #   define MAX_R
20820 4f 57 49 44 20 30 78 37 66 66 66 66 66 66 66 0a  OWID 0x7fffffff.
20830 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d  #else.    /* Som
20840 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70  e compilers comp
20850 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74  lain about const
20860 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  ants of the form
20870 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66   0x7ffffffffffff
20880 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65  fff..    ** Othe
20890 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75  rs complain abou
208a0 74 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66  t 0x7fffffffffff
208b0 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f  fffffLL.  The fo
208c0 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65  llowing macro se
208d0 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72  ems.    ** to pr
208e0 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61  ovide the consta
208f0 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20  nt while making 
20900 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61  all compilers ha
20910 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20  ppy..    */.#   
20920 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44  define MAX_ROWID
20930 20 20 28 69 36 34 29 28 20 28 28 28 75 36 34 29    (i64)( (((u64)
20940 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29  0x7fffffff)<<32)
20950 20 7c 20 28 75 36 34 29 30 78 66 66 66 66 66 66   | (u64)0xffffff
20960 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20  ff ).#endif..   
20970 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e   if( !pC->useRan
20980 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
20990 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
209a0 72 65 65 4c 61 73 74 28 70 43 2d 3e 70 43 75 72  reeLast(pC->pCur
209b0 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
209c0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
209d0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
209e0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
209f0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
20a00 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b        if( res ){
20a10 0a 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20  .        v = 1; 
20a20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31    /* IMP: R-6191
20a30 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20  4-48074 */.     
20a40 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
20a50 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
20a60 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
20a70 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 20 29  d(pC->pCursor) )
20a80 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
20a90 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
20aa0 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ze(pC->pCursor, 
20ab0 26 76 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  &v);.        ass
20ac0 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
20ad0 4f 4b 20 29 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f  OK );   /* Canno
20ae0 74 20 66 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67  t fail following
20af0 20 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a   BtreeLast() */.
20b00 20 20 20 20 20 20 20 20 69 66 28 20 76 3e 3d 4d          if( v>=M
20b10 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20  AX_ROWID ){.    
20b20 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e        pC->useRan
20b30 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20  domRowid = 1;.  
20b40 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
20b50 20 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a         v++;   /*
20b60 20 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34   IMP: R-29538-34
20b70 39 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d  987 */.        }
20b80 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a  .      }.    }..
20b90 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
20ba0 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
20bb0 54 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  T.    if( pOp->p
20bc0 33 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73  3 ){.      /* As
20bd0 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
20be0 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
20bf0 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73  ell. */.      as
20c00 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
20c10 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  );.      if( p->
20c20 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20  pFrame ){.      
20c30 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
20c40 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e  pFrame; pFrame->
20c50 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d  pParent; pFrame=
20c60 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
20c70 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73  ;.        /* Ass
20c80 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
20c90 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
20ca0 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61  ll. */.        a
20cb0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
20cc0 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a  pFrame->nMem );.
20cd0 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26          pMem = &
20ce0 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
20cf0 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c  ->p3];.      }el
20d00 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41  se{.        /* A
20d10 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
20d20 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
20d30 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20  cell. */.       
20d40 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
20d50 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
20d60 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
20d70 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70    pMem = &aMem[p
20d80 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20  Op->p3];.       
20d90 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
20da0 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20  e(p, pMem);.    
20db0 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74    }.      assert
20dc0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d 65  ( memIsValid(pMe
20dd0 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20 52 45 47  m) );..      REG
20de0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
20df0 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20  >p3, pMem);.    
20e00 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
20e10 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29  Integerify(pMem)
20e20 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
20e30 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d  (pMem->flags & M
20e40 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f  EM_Int)!=0 );  /
20e50 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20  * mem(P3) holds 
20e60 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20  an integer */.  
20e70 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e      if( pMem->u.
20e80 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20  i==MAX_ROWID || 
20e90 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
20ea0 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  id ){.        rc
20eb0 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20   = SQLITE_FULL; 
20ec0 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 32 32 37    /* IMP: R-1227
20ed0 35 2d 36 31 33 33 38 20 2a 2f 0a 20 20 20 20 20  5-61338 */.     
20ee0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
20ef0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
20f00 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 76 3c    }.      if( v<
20f10 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20  pMem->u.i+1 ){. 
20f20 20 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d         v = pMem-
20f30 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20  >u.i + 1;.      
20f40 7d 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e  }.      pMem->u.
20f50 69 20 3d 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e  i = v;.    }.#en
20f60 64 69 66 0a 20 20 20 20 69 66 28 20 70 43 2d 3e  dif.    if( pC->
20f70 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
20f80 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45  {.      /* IMPLE
20f90 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d  MENTATION-OF: R-
20fa0 30 37 36 37 37 2d 34 31 38 38 31 20 49 66 20 74  07677-41881 If t
20fb0 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44  he largest ROWID
20fc0 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65   is equal to the
20fd0 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 73  .      ** larges
20fe0 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67  t possible integ
20ff0 65 72 20 28 39 32 32 33 33 37 32 30 33 36 38 35  er (922337203685
21000 34 37 37 35 38 30 37 29 20 74 68 65 6e 20 74 68  4775807) then th
21010 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20  e database.     
21020 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72 74   ** engine start
21030 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69 74 69  s picking positi
21040 76 65 20 63 61 6e 64 69 64 61 74 65 20 52 4f 57  ve candidate ROW
21050 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e  IDs at random un
21060 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74 20  til.      ** it 
21070 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74 20 69  finds one that i
21080 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
21090 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20   used. */.      
210a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d  assert( pOp->p3=
210b0 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e  =0 );  /* We can
210c0 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d  not be in random
210d0 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74   rowid mode if t
210e0 68 69 73 20 69 73 0a 20 20 20 20 20 20 20 20 20  his is.         
210f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21100 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e      ** an AUTOIN
21110 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a  CREMENT table. *
21120 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b  /.      cnt = 0;
21130 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20  .      do{.     
21140 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f     sqlite3_rando
21150 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c  mness(sizeof(v),
21160 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 76 20   &v);.        v 
21170 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31  &= (MAX_ROWID>>1
21180 29 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75  ); v++;  /* Ensu
21190 72 65 20 74 68 61 74 20 76 20 69 73 20 67 72 65  re that v is gre
211a0 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 20 2a  ater than zero *
211b0 2f 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20  /.      }while( 
211c0 20 28 28 72 63 20 3d 20 73 71 6c 69 74 65 33 42   ((rc = sqlite3B
211d0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
211e0 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
211f0 30 2c 20 28 75 36 34 29 76 2c 0a 20 20 20 20 20  0, (u64)v,.     
21200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21220 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 26              0, &
21230 72 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b  res))==SQLITE_OK
21240 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26  ).            &&
21250 20 28 72 65 73 3d 3d 30 29 0a 20 20 20 20 20 20   (res==0).      
21260 20 20 20 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c        && (++cnt<
21270 31 30 30 29 29 3b 0a 20 20 20 20 20 20 69 66 28  100));.      if(
21280 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
21290 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  & res==0 ){.    
212a0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
212b0 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20  FULL;   /* IMP: 
212c0 52 2d 33 38 32 31 39 2d 35 33 30 30 32 20 2a 2f  R-38219-53002 */
212d0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
212e0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
212f0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
21300 61 73 73 65 72 74 28 20 76 3e 30 20 29 3b 20 20  assert( v>0 );  
21310 2f 2a 20 45 56 3a 20 52 2d 34 30 38 31 32 2d 30  /* EV: R-40812-0
21320 33 35 37 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20  3570 */.    }.  
21330 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
21340 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
21350 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
21360 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
21370 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76  .  pOut->u.i = v
21380 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
21390 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20   Opcode: Insert 
213a0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
213b0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b  * Synopsis: intk
213c0 65 79 3d 72 5b 50 33 5d 20 64 61 74 61 3d 72 5b  ey=r[P3] data=r[
213d0 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  P2].**.** Write 
213e0 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68  an entry into th
213f0 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f  e table of curso
21400 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74  r P1.  A new ent
21410 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64  ry is.** created
21420 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61   if it doesn't a
21430 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f 72 20  lready exist or 
21440 74 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20  the data for an 
21450 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72  existing.** entr
21460 79 20 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e  y is overwritten
21470 2e 20 20 54 68 65 20 64 61 74 61 20 69 73 20 74  .  The data is t
21480 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f  he value MEM_Blo
21490 62 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  b stored in regi
214a0 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  ster.** number P
214b0 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73 74  2. The key is st
214c0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
214d0 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73   P3. The key mus
214e0 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e  t.** be a MEM_In
214f0 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
21500 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66  OPFLAG_NCHANGE f
21510 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
21520 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63  , then the row c
21530 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a  hange count is.*
21540 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f  * incremented (o
21550 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20  therwise not).  
21560 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41  If the OPFLAG_LA
21570 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20  STROWID flag of 
21580 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68  P5 is set,.** th
21590 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72  en rowid is stor
215a0 65 64 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e  ed for subsequen
215b0 74 20 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a  t return by the.
215c0 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  ** sqlite3_last_
215d0 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66  insert_rowid() f
215e0 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69  unction (otherwi
215f0 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66  se it is unmodif
21600 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ied)..**.** If t
21610 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  he OPFLAG_USESEE
21620 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20  KRESULT flag of 
21630 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 69 66  P5 is set and if
21640 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a   the result of.*
21650 2a 20 74 68 65 20 6c 61 73 74 20 73 65 65 6b 20  * the last seek 
21660 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50 5f 4e 6f  operation (OP_No
21670 74 45 78 69 73 74 73 29 20 77 61 73 20 61 20 73  tExists) was a s
21680 75 63 63 65 73 73 2c 20 74 68 65 6e 20 74 68 69  uccess, then thi
21690 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 77  s.** operation w
216a0 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d 70 74 20  ill not attempt 
216b0 74 6f 20 66 69 6e 64 20 74 68 65 20 61 70 70 72  to find the appr
216c0 6f 70 72 69 61 74 65 20 72 6f 77 20 62 65 66 6f  opriate row befo
216d0 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74 68 65 20  re doing.** the 
216e0 69 6e 73 65 72 74 20 62 75 74 20 77 69 6c 6c 20  insert but will 
216f0 69 6e 73 74 65 61 64 20 6f 76 65 72 77 72 69 74  instead overwrit
21700 65 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 74  e the row that t
21710 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
21720 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
21730 6e 67 20 74 6f 2e 20 20 50 72 65 73 75 6d 61 62  ng to.  Presumab
21740 6c 79 2c 20 74 68 65 20 70 72 69 6f 72 20 4f 50  ly, the prior OP
21750 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63 6f 64  _NotExists opcod
21760 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65 61 64 79  e.** has already
21770 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20   positioned the 
21780 63 75 72 73 6f 72 20 63 6f 72 72 65 63 74 6c 79  cursor correctly
21790 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70  .  This is an op
217a0 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 68  timization.** th
217b0 61 74 20 62 6f 6f 73 74 73 20 70 65 72 66 6f 72  at boosts perfor
217c0 6d 61 6e 63 65 20 62 79 20 61 76 6f 69 64 69 6e  mance by avoidin
217d0 67 20 72 65 64 75 6e 64 61 6e 74 20 73 65 65 6b  g redundant seek
217e0 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  s..**.** If the 
217f0 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20  OPFLAG_ISUPDATE 
21800 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65  flag is set, the
21810 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  n this opcode is
21820 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55   part of an.** U
21830 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e  PDATE operation.
21840 20 20 4f 74 68 65 72 77 69 73 65 20 28 69 66 20    Otherwise (if 
21850 74 68 65 20 66 6c 61 67 20 69 73 20 63 6c 65 61  the flag is clea
21860 72 29 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  r) then this opc
21870 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f  ode.** is part o
21880 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 70 65 72  f an INSERT oper
21890 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 69 66 66  ation.  The diff
218a0 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69  erence is only i
218b0 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74  mportant to.** t
218c0 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a  he update hook..
218d0 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20  **.** Parameter 
218e0 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20  P4 may point to 
218f0 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  a string contain
21900 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2d 6e 61  ing the table-na
21910 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20 62 65  me, or.** may be
21920 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69 73 20   NULL. If it is 
21930 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  not NULL, then t
21940 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 0a  he update-hook .
21950 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78 55 70 64  ** (sqlite3.xUpd
21960 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69 73 20  ateCallback) is 
21970 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77 69 6e  invoked followin
21980 67 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 69  g a successful i
21990 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41  nsert..**.** (WA
219a0 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50  RNING/TODO: If P
219b0 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 63 75  1 is a pseudo-cu
219c0 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20 64  rsor and P2 is d
219d0 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c  ynamically.** al
219e0 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20 6f 77  located, then ow
219f0 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20 69 73  nership of P2 is
21a00 20 74 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20   transferred to 
21a10 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72 73 6f  the pseudo-curso
21a20 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73 74 65  r.** and registe
21a30 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65 70 68  r P2 becomes eph
21a40 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68 65 20  emeral.  If the 
21a50 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e 67 65  cursor is change
21a60 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  d, the.** value 
21a70 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 77  of register P2 w
21a80 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67 65 2e  ill then change.
21a90 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73    Make sure this
21aa0 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75   does not.** cau
21ab0 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e  se any problems.
21ac0 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ).**.** This ins
21ad0 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f  truction only wo
21ae0 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20  rks on tables.  
21af0 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69  The equivalent i
21b00 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f  nstruction.** fo
21b10 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f 50 5f  r indices is OP_
21b20 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a  IdxInsert..*/./*
21b30 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 49   Opcode: InsertI
21b40 6e 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  nt P1 P2 P3 P4 P
21b50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  5.** Synopsis:  
21b60 69 6e 74 6b 65 79 3d 50 33 20 64 61 74 61 3d 72  intkey=P3 data=r
21b70 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  [P2].**.** This 
21b80 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69  works exactly li
21b90 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20 65 78 63  ke OP_Insert exc
21ba0 65 70 74 20 74 68 61 74 20 74 68 65 20 6b 65 79  ept that the key
21bb0 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67   is the.** integ
21bc0 65 72 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74  er value P3, not
21bd0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
21be0 65 20 69 6e 74 65 67 65 72 20 73 74 6f 72 65 64  e integer stored
21bf0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
21c00 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65  .*/.case OP_Inse
21c10 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73  rt: .case OP_Ins
21c20 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20  ertInt: {.  Mem 
21c30 2a 70 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a  *pData;       /*
21c40 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e   MEM cell holdin
21c50 67 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 72  g data for the r
21c60 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65  ecord to be inse
21c70 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rted */.  Mem *p
21c80 4b 65 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  Key;        /* M
21c90 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20  EM cell holding 
21ca0 6b 65 79 20 20 66 6f 72 20 74 68 65 20 72 65 63  key  for the rec
21cb0 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65  ord */.  i64 iKe
21cc0 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  y;         /* Th
21cd0 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20  e integer ROWID 
21ce0 6f 72 20 6b 65 79 20 66 6f 72 20 74 68 65 20 72  or key for the r
21cf0 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65  ecord to be inse
21d00 72 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75  rted */.  VdbeCu
21d10 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43  rsor *pC;   /* C
21d20 75 72 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69  ursor to table i
21d30 6e 74 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74  nto which insert
21d40 20 69 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20   is written */. 
21d50 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20   int nZero;     
21d60 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
21d70 7a 65 72 6f 2d 62 79 74 65 73 20 74 6f 20 61 70  zero-bytes to ap
21d80 70 65 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 73 65  pend */.  int se
21d90 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52  ekResult;   /* R
21da0 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20 73  esult of prior s
21db0 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20 55  eek or 0 if no U
21dc0 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
21dd0 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  g */.  const cha
21de0 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61  r *zDb;  /* data
21df0 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65 64  base name - used
21e00 20 62 79 20 74 68 65 20 75 70 64 61 74 65 20 68   by the update h
21e10 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ook */.  const c
21e20 68 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a 20 54 61  har *zTbl; /* Ta
21e30 62 6c 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20  ble name - used 
21e40 62 79 20 74 68 65 20 6f 70 64 61 74 65 20 68 6f  by the opdate ho
21e50 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20  ok */.  int op; 
21e60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63            /* Opc
21e70 6f 64 65 20 66 6f 72 20 75 70 64 61 74 65 20 68  ode for update h
21e80 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50 44 41  ook: SQLITE_UPDA
21e90 54 45 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53  TE or SQLITE_INS
21ea0 45 52 54 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20  ERT */..  pData 
21eb0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
21ec0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
21ed0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
21ee0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
21ef0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
21f00 61 6c 69 64 28 70 44 61 74 61 29 20 29 3b 0a 20  alid(pData) );. 
21f10 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
21f20 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
21f30 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
21f40 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
21f50 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
21f60 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
21f70 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73  eReg==0 );.  ass
21f80 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
21f90 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
21fa0 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44  RACE(pOp->p2, pD
21fb0 61 74 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70  ata);..  if( pOp
21fc0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73  ->opcode==OP_Ins
21fd0 65 72 74 20 29 7b 0a 20 20 20 20 70 4b 65 79 20  ert ){.    pKey 
21fe0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
21ff0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b  ;.    assert( pK
22000 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ey->flags & MEM_
22010 49 6e 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72  Int );.    asser
22020 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b  t( memIsValid(pK
22030 65 79 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53  ey) );.    REGIS
22040 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
22050 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20 69 4b  3, pKey);.    iK
22060 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a  ey = pKey->u.i;.
22070 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
22080 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
22090 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29  ==OP_InsertInt )
220a0 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4f 70  ;.    iKey = pOp
220b0 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  ->p3;.  }..  if(
220c0 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
220d0 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e  G_NCHANGE ) p->n
220e0 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20  Change++;.  if( 
220f0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
22100 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d  _LASTROWID ) db-
22110 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73  >lastRowid = las
22120 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20  tRowid = iKey;. 
22130 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67   if( pData->flag
22140 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
22150 20 20 20 20 70 44 61 74 61 2d 3e 7a 20 3d 20 30      pData->z = 0
22160 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e 6e 20 3d  ;.    pData->n =
22170 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   0;.  }else{.   
22180 20 61 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e   assert( pData->
22190 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f  flags & (MEM_Blo
221a0 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20  b|MEM_Str) );.  
221b0 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d  }.  seekResult =
221c0 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
221d0 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
221e0 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73  T) ? pC->seekRes
221f0 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20  ult : 0);.  if( 
22200 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d  pData->flags & M
22210 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 6e  EM_Zero ){.    n
22220 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e  Zero = pData->u.
22230 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a  nZero;.  }else{.
22240 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20      nZero = 0;. 
22250 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
22260 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d  3BtreeInsert(pC-
22270 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65  >pCursor, 0, iKe
22280 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y,.             
22290 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44 61               pDa
222a0 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c  ta->z, pData->n,
222b0 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20 20   nZero,.        
222c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222d0 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46    (pOp->p5 & OPF
222e0 4c 41 47 5f 41 50 50 45 4e 44 29 21 3d 30 2c 20  LAG_APPEND)!=0, 
222f0 73 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a  seekResult.  );.
22300 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
22310 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
22320 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
22330 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a  CHE_STALE;..  /*
22340 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61   Invoke the upda
22350 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69  te-hook if requi
22360 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63  red. */.  if( rc
22370 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64  ==SQLITE_OK && d
22380 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
22390 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20  ck && pOp->p4.z 
223a0 29 7b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d  ){.    zDb = db-
223b0 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e  >aDb[pC->iDb].zN
223c0 61 6d 65 3b 0a 20 20 20 20 7a 54 62 6c 20 3d 20  ame;.    zTbl = 
223d0 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f  pOp->p4.z;.    o
223e0 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  p = ((pOp->p5 & 
223f0 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29  OPFLAG_ISUPDATE)
22400 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45   ? SQLITE_UPDATE
22410 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54   : SQLITE_INSERT
22420 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
22430 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
22440 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c    db->xUpdateCal
22450 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74  lback(db->pUpdat
22460 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a  eArg, op, zDb, z
22470 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20  Tbl, iKey);.    
22480 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e  assert( pC->iDb>
22490 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  =0 );.  }.  brea
224a0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
224b0 20 44 65 6c 65 74 65 20 50 31 20 50 32 20 2a 20   Delete P1 P2 * 
224c0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  P4 *.**.** Delet
224d0 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20  e the record at 
224e0 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72  which the P1 cur
224f0 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  sor is currently
22500 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a   pointing..**.**
22510 20 54 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c   The cursor will
22520 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   be left pointin
22530 67 20 61 74 20 65 69 74 68 65 72 20 74 68 65 20  g at either the 
22540 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72 65 76  next or the prev
22550 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69  ious.** record i
22560 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20  n the table. If 
22570 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  it is left point
22580 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74 20  ing at the next 
22590 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20  record, then.** 
225a0 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e  the next Next in
225b0 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62  struction will b
225c0 65 20 61 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63  e a no-op.  Henc
225d0 65 20 69 74 20 69 73 20 4f 4b 20 74 6f 20 64 65  e it is OK to de
225e0 6c 65 74 65 0a 2a 2a 20 61 20 72 65 63 6f 72 64  lete.** a record
225f0 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 4e   from within a N
22600 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20  ext loop..**.** 
22610 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
22620 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32  HANGE flag of P2
22630 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
22640 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75  e row change cou
22650 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  nt is.** increme
22660 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20  nted (otherwise 
22670 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d  not)..**.** P1 m
22680 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64  ust not be pseud
22690 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73  o-table.  It has
226a0 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61   to be a real ta
226b0 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74  ble with.** mult
226c0 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a  iple rows..**.**
226d0 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
226e0 4c 4c 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74  LL, then it is t
226f0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
22700 61 62 6c 65 20 74 68 61 74 20 50 31 20 69 73 0a  able that P1 is.
22710 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20  ** pointing to. 
22720 20 54 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b   The update hook
22730 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64   will be invoked
22740 2c 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a  , if it exists..
22750 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
22760 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 50 31  NULL then the P1
22770 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76   cursor must hav
22780 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65  e been positione
22790 64 0a 2a 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f  d.** using OP_No
227a0 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20  tFound prior to 
227b0 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70  invoking this op
227c0 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  code..*/.case OP
227d0 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62  _Delete: {.  Vdb
227e0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
227f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
22800 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
22810 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
22820 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
22830 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
22840 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
22850 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
22860 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61  0 );  /* Only va
22870 6c 69 64 20 66 6f 72 20 72 65 61 6c 20 74 61 62  lid for real tab
22880 6c 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61  les, no pseudota
22890 62 6c 65 73 20 2a 2f 0a 20 20 61 73 73 65 72 74  bles */.  assert
228a0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
228b0 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 23 69 66 64  veto==0 );..#ifd
228c0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
228d0 20 20 2f 2a 20 54 68 65 20 73 65 65 6b 20 6f 70    /* The seek op
228e0 65 72 61 74 69 6f 6e 20 74 68 61 74 20 70 6f 73  eration that pos
228f0 69 74 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73  itioned the curs
22900 6f 72 20 70 72 69 6f 72 20 74 6f 20 4f 50 5f 44  or prior to OP_D
22910 65 6c 65 74 65 20 77 69 6c 6c 0a 20 20 2a 2a 20  elete will.  ** 
22920 68 61 76 65 20 61 6c 73 6f 20 73 65 74 20 74 68  have also set th
22930 65 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  e pC->movetoTarg
22940 65 74 20 66 69 65 6c 64 20 74 6f 20 74 68 65 20  et field to the 
22950 72 6f 77 69 64 20 6f 66 20 74 68 65 20 72 6f 77  rowid of the row
22960 20 74 68 61 74 0a 20 20 2a 2a 20 69 73 20 62 65   that.  ** is be
22970 69 6e 67 20 64 65 6c 65 74 65 64 20 2a 2f 0a 20  ing deleted */. 
22980 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 26   if( pOp->p4.z &
22990 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b  & pC->isTable ){
229a0 0a 20 20 20 20 69 36 34 20 69 4b 65 79 20 3d 20  .    i64 iKey = 
229b0 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  0;.    sqlite3Bt
229c0 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70  reeKeySize(pC->p
229d0 43 75 72 73 6f 72 2c 20 26 69 4b 65 79 29 3b 0a  Cursor, &iKey);.
229e0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
229f0 6d 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d 69 4b  movetoTarget==iK
22a00 65 79 20 29 3b 20 0a 20 20 7d 0a 23 65 6e 64 69  ey ); .  }.#endi
22a10 66 0a 20 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  f. .  rc = sqlit
22a20 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43  e3BtreeDelete(pC
22a30 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43  ->pCursor);.  pC
22a40 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
22a50 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20  CACHE_STALE;..  
22a60 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70  /* Invoke the up
22a70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71  date-hook if req
22a80 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20  uired. */.  if( 
22a90 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
22aa0 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
22ab0 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e  back && pOp->p4.
22ac0 7a 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65  z && pC->isTable
22ad0 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64   ){.    db->xUpd
22ae0 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e  ateCallback(db->
22af0 70 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49  pUpdateArg, SQLI
22b00 54 45 5f 44 45 4c 45 54 45 2c 0a 20 20 20 20 20  TE_DELETE,.     
22b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b20 20 20 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69     db->aDb[pC->i
22b30 44 62 5d 2e 7a 4e 61 6d 65 2c 20 70 4f 70 2d 3e  Db].zName, pOp->
22b40 70 34 2e 7a 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f  p4.z, pC->moveto
22b50 54 61 72 67 65 74 29 3b 0a 20 20 20 20 61 73 73  Target);.    ass
22b60 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20  ert( pC->iDb>=0 
22b70 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  );.  }.  if( pOp
22b80 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p2 & OPFLAG_NC
22b90 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e  HANGE ) p->nChan
22ba0 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ge++;.  break;.}
22bb0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65  ./* Opcode: Rese
22bc0 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a  tCount * * * * *
22bd0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  .**.** The value
22be0 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63   of the change c
22bf0 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64  ounter is copied
22c00 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
22c10 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67   handle.** chang
22c20 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72  e counter (retur
22c30 6e 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e  ned by subsequen
22c40 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74  t calls to sqlit
22c50 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a  e3_changes())..*
22c60 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69  * Then the VMs i
22c70 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63  nternal change c
22c80 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f  ounter resets to
22c90 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75   0..** This is u
22ca0 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70  sed by trigger p
22cb0 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65  rograms..*/.case
22cc0 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20   OP_ResetCount: 
22cd0 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53  {.  sqlite3VdbeS
22ce0 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
22cf0 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e  >nChange);.  p->
22d00 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62  nChange = 0;.  b
22d10 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
22d20 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61 72  de: SorterCompar
22d30 65 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a  e P1 P2 P3 P4.**
22d40 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 6b   Synopsis:  if k
22d50 65 79 28 50 31 29 21 3d 74 72 69 6d 28 72 5b 50  ey(P1)!=trim(r[P
22d60 33 5d 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a  3],P4) goto P2.*
22d70 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72  *.** P1 is a sor
22d80 74 65 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73  ter cursor. This
22d90 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d   instruction com
22da0 70 61 72 65 73 20 61 20 70 72 65 66 69 78 20 6f  pares a prefix o
22db0 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20  f the.** record 
22dc0 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72  blob in register
22dd0 20 50 33 20 61 67 61 69 6e 73 74 20 61 20 70 72   P3 against a pr
22de0 65 66 69 78 20 6f 66 20 74 68 65 20 65 6e 74 72  efix of the entr
22df0 79 20 74 68 61 74 20 0a 2a 2a 20 74 68 65 20 73  y that .** the s
22e00 6f 72 74 65 72 20 63 75 72 73 6f 72 20 63 75 72  orter cursor cur
22e10 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f  rently points to
22e20 2e 20 20 4f 6e 6c 79 20 74 68 65 20 66 69 72 73  .  Only the firs
22e30 74 20 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20 6f  t P4 fields.** o
22e40 66 20 72 5b 50 33 5d 20 61 6e 64 20 74 68 65 20  f r[P3] and the 
22e50 73 6f 72 74 65 72 20 72 65 63 6f 72 64 20 61 72  sorter record ar
22e60 65 20 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a  e compared..**.*
22e70 2a 20 49 66 20 65 69 74 68 65 72 20 50 33 20 6f  * If either P3 o
22e80 72 20 74 68 65 20 73 6f 72 74 65 72 20 63 6f 6e  r the sorter con
22e90 74 61 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20  tains a NULL in 
22ea0 6f 6e 65 20 6f 66 20 74 68 65 69 72 20 73 69 67  one of their sig
22eb0 6e 69 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c  nificant.** fiel
22ec0 64 73 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67  ds (not counting
22ed0 20 74 68 65 20 50 34 20 66 69 65 6c 64 73 20 61   the P4 fields a
22ee0 74 20 74 68 65 20 65 6e 64 20 77 68 69 63 68 20  t the end which 
22ef0 61 72 65 20 69 67 6e 6f 72 65 64 29 20 74 68 65  are ignored) the
22f00 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69  n.** the compari
22f10 73 6f 6e 20 69 73 20 61 73 73 75 6d 65 64 20 74  son is assumed t
22f20 6f 20 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a  o be equal..**.*
22f30 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  * Fall through t
22f40 6f 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  o next instructi
22f50 6f 6e 20 69 66 20 74 68 65 20 74 77 6f 20 72 65  on if the two re
22f60 63 6f 72 64 73 20 63 6f 6d 70 61 72 65 20 65 71  cords compare eq
22f70 75 61 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f  ual to.** each o
22f80 74 68 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50  ther.  Jump to P
22f90 32 20 69 66 20 74 68 65 79 20 61 72 65 20 64 69  2 if they are di
22fa0 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65  fferent..*/.case
22fb0 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72   OP_SorterCompar
22fc0 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
22fd0 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
22fe0 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b  ;.  int nKeyCol;
22ff0 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ..  pC = p->apCs
23000 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
23010 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
23020 43 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  C) );.  assert( 
23030 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
23040 49 4e 54 33 32 20 29 3b 0a 20 20 70 49 6e 33 20  INT32 );.  pIn3 
23050 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
23060 3b 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f  ;.  nKeyCol = pO
23070 70 2d 3e 70 34 2e 69 3b 0a 20 20 72 65 73 20 3d  p->p4.i;.  res =
23080 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   0;.  rc = sqlit
23090 65 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70  e3VdbeSorterComp
230a0 61 72 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e 4b  are(pC, pIn3, nK
230b0 65 79 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20 20  eyCol, &res);.  
230c0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
230d0 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28  res!=0,2);.  if(
230e0 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d   res ){.    pc =
230f0 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a   pOp->p2-1;.  }.
23100 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20    break;.};../* 
23110 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 44 61  Opcode: SorterDa
23120 74 61 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ta P1 P2 P3 * *.
23130 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
23140 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72  2]=data.**.** Wr
23150 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
23160 72 20 50 32 20 74 68 65 20 63 75 72 72 65 6e 74  r P2 the current
23170 20 73 6f 72 74 65 72 20 64 61 74 61 20 66 6f 72   sorter data for
23180 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20 50   sorter cursor P
23190 31 2e 0a 2a 2a 20 54 68 65 6e 20 63 6c 65 61 72  1..** Then clear
231a0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 65 61 64   the column head
231b0 65 72 20 63 61 63 68 65 20 6f 6e 20 63 75 72 73  er cache on curs
231c0 6f 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  or P3..**.** Thi
231d0 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 72 6d  s opcode is norm
231e0 61 6c 6c 79 20 75 73 65 20 74 6f 20 6d 6f 76 65  ally use to move
231f0 20 61 20 72 65 63 6f 72 64 20 6f 75 74 20 6f 66   a record out of
23200 20 74 68 65 20 73 6f 72 74 65 72 20 61 6e 64 20   the sorter and 
23210 69 6e 74 6f 0a 2a 2a 20 61 20 72 65 67 69 73 74  into.** a regist
23220 65 72 20 74 68 61 74 20 69 73 20 74 68 65 20 73  er that is the s
23230 6f 75 72 63 65 20 66 6f 72 20 61 20 70 73 65 75  ource for a pseu
23240 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 20  do-table cursor 
23250 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a  created using.**
23260 20 4f 70 65 6e 50 73 65 75 64 6f 2e 20 20 54 68   OpenPseudo.  Th
23270 61 74 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20  at pseudo-table 
23280 63 75 72 73 6f 72 20 69 73 20 74 68 65 20 6f 6e  cursor is the on
23290 65 20 74 68 61 74 20 69 73 20 69 64 65 6e 74 69  e that is identi
232a0 66 69 65 64 20 62 79 0a 2a 2a 20 70 61 72 61 6d  fied by.** param
232b0 65 74 65 72 20 50 33 2e 20 20 43 6c 65 61 72 69  eter P3.  Cleari
232c0 6e 67 20 74 68 65 20 50 33 20 63 6f 6c 75 6d 6e  ng the P3 column
232d0 20 63 61 63 68 65 20 61 73 20 70 61 72 74 20 6f   cache as part o
232e0 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73 61  f this opcode sa
232f0 76 65 73 0a 2a 2a 20 75 73 20 66 72 6f 6d 20 68  ves.** us from h
23300 61 76 69 6e 67 20 74 6f 20 69 73 73 75 65 20 61  aving to issue a
23310 20 73 65 70 61 72 61 74 65 20 4e 75 6c 6c 52 6f   separate NullRo
23320 77 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f  w instruction to
23330 20 63 6c 65 61 72 20 74 68 61 74 20 63 61 63 68   clear that cach
23340 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  e..*/.case OP_So
23350 72 74 65 72 44 61 74 61 3a 20 7b 0a 20 20 56 64  rterData: {.  Vd
23360 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
23370 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
23380 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d 20 70  p->p2];.  pC = p
23390 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
233a0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
233b0 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72 63  rter(pC) );.  rc
233c0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
233d0 72 74 65 72 52 6f 77 6b 65 79 28 70 43 2c 20 70  rterRowkey(pC, p
233e0 4f 75 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Out);.  assert( 
233f0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc!=SQLITE_OK ||
23400 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20   (pOut->flags & 
23410 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20 20 61  MEM_Blob) );.  a
23420 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
23430 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
23440 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 2d 3e  nCursor );.  p->
23450 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 2d 3e  apCsr[pOp->p3]->
23460 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
23470 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65  CHE_STALE;.  bre
23480 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
23490 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50 32 20  : RowData P1 P2 
234a0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
234b0 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a  s: r[P2]=data.**
234c0 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
234d0 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63  egister P2 the c
234e0 6f 6d 70 6c 65 74 65 20 72 6f 77 20 64 61 74 61  omplete row data
234f0 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a   for cursor P1..
23500 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69  ** There is no i
23510 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
23520 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20   the data.  .** 
23530 49 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65  It is just copie
23540 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65  d onto the P2 re
23550 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61  gister exactly a
23560 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e  s .** it is foun
23570 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
23580 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  e file..**.** If
23590 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
235a0 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20  ust be pointing 
235b0 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28  to a valid row (
235c0 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a  not a NULL row).
235d0 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62  ** of a real tab
235e0 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
235f0 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70  -table..*/./* Op
23600 63 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50 31 20  code: RowKey P1 
23610 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
23620 70 73 69 73 3a 20 72 5b 50 32 5d 3d 6b 65 79 0a  psis: r[P2]=key.
23630 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
23640 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65   register P2 the
23650 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 6b 65   complete row ke
23660 79 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e  y for cursor P1.
23670 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20  .** There is no 
23680 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f  interpretation o
23690 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a  f the data.  .**
236a0 20 54 68 65 20 6b 65 79 20 69 73 20 63 6f 70 69   The key is copi
236b0 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72  ed onto the P2 r
236c0 65 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20  egister exactly 
236d0 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75  as .** it is fou
236e0 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nd in the databa
236f0 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  se file..**.** I
23700 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  f the P1 cursor 
23710 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67  must be pointing
23720 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20   to a valid row 
23730 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29  (not a NULL row)
23740 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61  .** of a real ta
23750 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
23760 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  o-table..*/.case
23770 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73 65   OP_RowKey:.case
23780 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20   OP_RowData: {. 
23790 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
237a0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
237b0 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 20 20 69  sr;.  u32 n;.  i
237c0 36 34 20 6e 36 34 3b 0a 0a 20 20 70 4f 75 74 20  64 n64;..  pOut 
237d0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
237e0 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
237f0 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a  ange(p, pOut);..
23800 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20 52    /* Note that R
23810 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77 44 61 74  owKey and RowDat
23820 61 20 61 72 65 20 72 65 61 6c 6c 79 20 65 78 61  a are really exa
23830 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 69 6e  ctly the same in
23840 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61  struction */.  a
23850 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
23860 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
23870 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
23880 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
23890 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69  p1];.  assert( i
238a0 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 30 20 29  sSorter(pC)==0 )
238b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
238c0 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e  isTable || pOp->
238d0 6f 70 63 6f 64 65 21 3d 4f 50 5f 52 6f 77 44 61  opcode!=OP_RowDa
238e0 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ta );.  assert( 
238f0 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 7c  pC->isTable==0 |
23900 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
23910 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61  P_RowData );.  a
23920 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
23930 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75    assert( pC->nu
23940 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73  llRow==0 );.  as
23950 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
23960 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20  TableReg==0 );. 
23970 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
23980 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72  rsor!=0 );.  pCr
23990 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
239a0 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52  ;..  /* The OP_R
239b0 6f 77 4b 65 79 20 61 6e 64 20 4f 50 5f 52 6f 77  owKey and OP_Row
239c0 44 61 74 61 20 6f 70 63 6f 64 65 73 20 61 6c 77  Data opcodes alw
239d0 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f  ays follow OP_No
239e0 74 45 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20  tExists or.  ** 
239f0 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78  OP_Rewind/Op_Nex
23a00 74 20 77 69 74 68 20 6e 6f 20 69 6e 74 65 72 76  t with no interv
23a10 65 6e 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  ening instructio
23a20 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 69 6e  ns that might in
23a30 76 61 6c 69 64 61 74 65 0a 20 20 2a 2a 20 74 68  validate.  ** th
23a40 65 20 63 75 72 73 6f 72 2e 20 20 49 66 20 74 68  e cursor.  If th
23a50 69 73 20 77 68 65 72 65 20 6e 6f 74 20 74 68 65  is where not the
23a60 20 63 61 73 65 2c 20 6f 6e 20 6f 66 20 74 68 65   case, on of the
23a70 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72   following asser
23a80 74 28 29 73 0a 20 20 2a 2a 20 77 6f 75 6c 64 20  t()s.  ** would 
23a90 66 61 69 6c 2e 20 20 53 68 6f 75 6c 64 20 74 68  fail.  Should th
23aa0 69 73 20 65 76 65 72 20 63 68 61 6e 67 65 20 28  is ever change (
23ab0 62 65 63 61 75 73 65 20 6f 66 20 63 68 61 6e 67  because of chang
23ac0 65 73 20 69 6e 20 74 68 65 20 63 6f 64 65 0a 20  es in the code. 
23ad0 20 2a 2a 20 67 65 6e 65 72 61 74 6f 72 29 20 74   ** generator) t
23ae0 68 65 6e 20 74 68 65 20 66 69 78 20 77 6f 75 6c  hen the fix woul
23af0 64 20 62 65 20 74 6f 20 69 6e 73 65 72 74 20 61  d be to insert a
23b00 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71   call to.  ** sq
23b10 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
23b20 6f 76 65 74 6f 28 29 2e 0a 20 20 2a 2f 0a 20 20  oveto()..  */.  
23b30 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
23b40 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
23b50 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
23b60 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
23b70 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 23  alid(pCrsr) );.#
23b80 69 66 20 30 20 20 2f 2a 20 4e 6f 74 20 72 65 71  if 0  /* Not req
23b90 75 69 72 65 64 20 64 75 65 20 74 6f 20 74 68 65  uired due to the
23ba0 20 70 72 65 76 69 6f 75 73 20 74 6f 20 61 73 73   previous to ass
23bb0 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
23bc0 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
23bd0 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
23be0 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63  to(pC);.  if( rc
23bf0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
23c00 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
23c10 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20  error;.#endif.. 
23c20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65   if( pC->isTable
23c30 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  ==0 ){.    asser
23c40 74 28 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 20  t( !pC->isTable 
23c50 29 3b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28  );.    VVA_ONLY(
23c60 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72  rc =) sqlite3Btr
23c70 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c  eeKeySize(pCrsr,
23c80 20 26 6e 36 34 29 3b 0a 20 20 20 20 61 73 73 65   &n64);.    asse
23c90 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
23ca0 4b 20 29 3b 20 20 20 20 2f 2a 20 54 72 75 65 20  K );    /* True 
23cb0 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f  because of Curso
23cc0 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61  rMoveto() call a
23cd0 62 6f 76 65 20 2a 2f 0a 20 20 20 20 69 66 28 20  bove */.    if( 
23ce0 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  n64>db->aLimit[S
23cf0 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
23d00 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  TH] ){.      got
23d10 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d  o too_big;.    }
23d20 0a 20 20 20 20 6e 20 3d 20 28 75 33 32 29 6e 36  .    n = (u32)n6
23d30 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  4;.  }else{.    
23d40 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73  VVA_ONLY(rc =) s
23d50 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 53  qlite3BtreeDataS
23d60 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 29 3b 0a  ize(pCrsr, &n);.
23d70 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
23d80 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20  SQLITE_OK );    
23d90 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63 61  /* DataSize() ca
23da0 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20  nnot fail */.   
23db0 20 69 66 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e   if( n>(u32)db->
23dc0 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
23dd0 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
23de0 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
23df0 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 74  g;.    }.  }.  t
23e00 65 73 74 63 61 73 65 28 20 6e 3d 3d 30 20 29 3b  estcase( n==0 );
23e10 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
23e20 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73  beMemClearAndRes
23e30 69 7a 65 28 70 4f 75 74 2c 20 4d 41 58 28 6e 2c  ize(pOut, MAX(n,
23e40 33 32 29 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  32)) ){.    goto
23e50 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70   no_mem;.  }.  p
23e60 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65  Out->n = n;.  Me
23e70 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
23e80 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20  t, MEM_Blob);.  
23e90 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  if( pC->isTable=
23ea0 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  =0 ){.    rc = s
23eb0 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 28 70  qlite3BtreeKey(p
23ec0 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74  Crsr, 0, n, pOut
23ed0 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ->z);.  }else{. 
23ee0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
23ef0 74 72 65 65 44 61 74 61 28 70 43 72 73 72 2c 20  treeData(pCrsr, 
23f00 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a  0, n, pOut->z);.
23f10 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20    }.  pOut->enc 
23f20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20  = SQLITE_UTF8;  
23f30 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20 62  /* In case the b
23f40 6c 6f 62 20 69 73 20 65 76 65 72 20 63 61 73 74  lob is ever cast
23f50 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 55 50   to text */.  UP
23f60 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
23f70 45 28 70 4f 75 74 29 3b 0a 20 20 52 45 47 49 53  E(pOut);.  REGIS
23f80 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
23f90 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  2, pOut);.  brea
23fa0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
23fb0 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a   Rowid P1 P2 * *
23fc0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
23fd0 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a  r[P2]=rowid.**.*
23fe0 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67 69 73  * Store in regis
23ff0 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65  ter P2 an intege
24000 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6b  r which is the k
24010 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ey of the table 
24020 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 50 31  entry that.** P1
24030 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
24040 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31  int to..**.** P1
24050 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 61   can be either a
24060 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65  n ordinary table
24070 20 6f 72 20 61 20 76 69 72 74 75 61 6c 20 74 61   or a virtual ta
24080 62 6c 65 2e 20 20 54 68 65 72 65 20 75 73 65 64  ble.  There used
24090 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65 70 61   to.** be a sepa
240a0 72 61 74 65 20 4f 50 5f 56 52 6f 77 69 64 20 6f  rate OP_VRowid o
240b0 70 63 6f 64 65 20 66 6f 72 20 75 73 65 20 77 69  pcode for use wi
240c0 74 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  th virtual table
240d0 73 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a 20 6f  s, but this.** o
240e0 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20 77 6f  ne opcode now wo
240f0 72 6b 73 20 66 6f 72 20 62 6f 74 68 20 74 61 62  rks for both tab
24100 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63 61 73  le types..*/.cas
24110 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20 20 20  e OP_Rowid: {   
24120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24130 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
24140 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
24150 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20   *pC;.  i64 v;. 
24160 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
24170 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
24180 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
24190 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74  odule;..  assert
241a0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
241b0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
241c0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
241d0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
241e0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
241f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
24200 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d  >pseudoTableReg=
24210 3d 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f  =0 || pC->nullRo
24220 77 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e  w );.  if( pC->n
24230 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 70 4f  ullRow ){.    pO
24240 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
24250 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Null;.    break;
24260 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d  .  }else if( pC-
24270 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
24280 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d  ){.    v = pC->m
24290 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 23 69 66  ovetoTarget;.#if
242a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
242b0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
242c0 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 70 56  }else if( pC->pV
242d0 74 61 62 43 75 72 73 6f 72 20 29 7b 0a 20 20 20  tabCursor ){.   
242e0 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 70 56 74   pVtab = pC->pVt
242f0 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b  abCursor->pVtab;
24300 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  .    pModule = p
24310 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
24320 20 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75     assert( pModu
24330 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20  le->xRowid );.  
24340 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
24350 78 52 6f 77 69 64 28 70 43 2d 3e 70 56 74 61 62  xRowid(pC->pVtab
24360 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20  Cursor, &v);.   
24370 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
24380 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
24390 62 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  b);.#endif /* SQ
243a0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
243b0 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73  LTABLE */.  }els
243c0 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
243d0 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
243e0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
243f0 33 56 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f  3VdbeCursorResto
24400 72 65 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20  re(pC);.    if( 
24410 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
24420 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
24430 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
24440 77 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d  w ){.      pOut-
24450 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
24460 6c 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  l;.      break;.
24470 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73      }.    rc = s
24480 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
24490 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ze(pC->pCursor, 
244a0 26 76 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  &v);.    assert(
244b0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
244c0 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f 20  ;  /* Always so 
244d0 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f  because of Curso
244e0 72 52 65 73 74 6f 72 65 28 29 20 61 62 6f 76 65  rRestore() above
244f0 20 2a 2f 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e   */.  }.  pOut->
24500 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b  u.i = v;.  break
24510 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
24520 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a  NullRow P1 * * *
24530 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68   *.**.** Move th
24540 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61  e cursor P1 to a
24550 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20   null row.  Any 
24560 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74  OP_Column operat
24570 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63  ions.** that occ
24580 75 72 20 77 68 69 6c 65 20 74 68 65 20 63 75 72  ur while the cur
24590 73 6f 72 20 69 73 20 6f 6e 20 74 68 65 20 6e 75  sor is on the nu
245a0 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61  ll row will alwa
245b0 79 73 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e 55  ys.** write a NU
245c0 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  LL..*/.case OP_N
245d0 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65  ullRow: {.  Vdbe
245e0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61  Cursor *pC;..  a
245f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
24600 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
24610 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
24620 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
24630 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
24640 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75  C!=0 );.  pC->nu
24650 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d  llRow = 1;.  pC-
24660 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
24670 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66  ACHE_STALE;.  if
24680 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b  ( pC->pCursor ){
24690 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
246a0 65 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d  eClearCursor(pC-
246b0 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20  >pCursor);.  }. 
246c0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
246d0 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32  code: Last P1 P2
246e0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
246f0 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
24700 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
24710 20 6f 72 20 50 72 65 76 20 69 6e 73 74 72 75 63   or Prev instruc
24720 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
24730 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
24740 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20  e last entry in 
24750 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
24760 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
24770 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
24780 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61  index is empty a
24790 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75  nd P2>0, then ju
247a0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
247b0 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69  o P2..** If P2 i
247c0 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61  s 0 or if the ta
247d0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
247e0 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20  not empty, fall 
247f0 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
24800 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
24810 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ruction..**.** T
24820 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
24830 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
24840 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
24850 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72  in reverse order
24860 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e  ,.** from the en
24870 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67  d toward the beg
24880 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65  inning.  In othe
24890 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
248a0 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
248b0 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76  ured to use Prev
248c0 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63  , not Next..*/.c
248d0 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20  ase OP_Last: {  
248e0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
248f0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
24900 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
24910 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
24920 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
24930 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
24940 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
24950 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
24960 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
24970 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70  rt( pC!=0 );.  p
24980 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
24990 6f 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20  or;.  res = 0;. 
249a0 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d   assert( pCrsr!=
249b0 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
249c0 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 72  te3BtreeLast(pCr
249d0 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d  sr, &res);.  pC-
249e0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72  >nullRow = (u8)r
249f0 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72  es;.  pC->deferr
24a00 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
24a10 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
24a20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23  = CACHE_STALE;.#
24a30 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
24a40 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20  UG.  pC->seekOp 
24a50 3d 20 4f 50 5f 4c 61 73 74 3b 0a 23 65 6e 64 69  = OP_Last;.#endi
24a60 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e  f.  if( pOp->p2>
24a70 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61  0 ){.    VdbeBra
24a80 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
24a90 32 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20  2);.    if( res 
24aa0 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d  ) pc = pOp->p2 -
24ab0 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
24ac0 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
24ad0 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Sort P1 P2 * * *
24ae0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
24af0 64 65 20 64 6f 65 73 20 65 78 61 63 74 6c 79 20  de does exactly 
24b00 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61  the same thing a
24b10 73 20 4f 50 5f 52 65 77 69 6e 64 20 65 78 63 65  s OP_Rewind exce
24b20 70 74 20 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e  pt that.** it in
24b30 63 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f  crements an undo
24b40 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20  cumented global 
24b50 76 61 72 69 61 62 6c 65 20 75 73 65 64 20 66 6f  variable used fo
24b60 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a  r testing..**.**
24b70 20 53 6f 72 74 69 6e 67 20 69 73 20 61 63 63 6f   Sorting is acco
24b80 6d 70 6c 69 73 68 65 64 20 62 79 20 77 72 69 74  mplished by writ
24b90 69 6e 67 20 72 65 63 6f 72 64 73 20 69 6e 74 6f  ing records into
24ba0 20 61 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78   a sorting index
24bb0 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e 64  ,.** then rewind
24bc0 69 6e 67 20 74 68 61 74 20 69 6e 64 65 78 20 61  ing that index a
24bd0 6e 64 20 70 6c 61 79 69 6e 67 20 69 74 20 62 61  nd playing it ba
24be0 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e  ck from beginnin
24bf0 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65  g to.** end.  We
24c00 20 75 73 65 20 74 68 65 20 4f 50 5f 53 6f 72 74   use the OP_Sort
24c10 20 6f 70 63 6f 64 65 20 69 6e 73 74 65 61 64 20   opcode instead 
24c20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20  of OP_Rewind to 
24c30 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64  do the.** rewind
24c40 69 6e 67 20 73 6f 20 74 68 61 74 20 74 68 65 20  ing so that the 
24c50 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
24c60 77 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e  will be incremen
24c70 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65  ted and.** regre
24c80 73 73 69 6f 6e 20 74 65 73 74 73 20 63 61 6e 20  ssion tests can 
24c90 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  determine whethe
24ca0 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70 74  r or not the opt
24cb0 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72  imizer is.** cor
24cc0 72 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e  rectly optimizin
24cd0 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a  g out sorts..*/.
24ce0 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f  case OP_SorterSo
24cf0 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a  rt:    /* jump *
24d00 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20  /.case OP_Sort: 
24d10 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
24d20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
24d30 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33  E_TEST.  sqlite3
24d40 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20  _sort_count++;. 
24d50 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
24d60 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a  count--;.#endif.
24d70 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51    p->aCounter[SQ
24d80 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
24d90 53 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61  SORT]++;.  /* Fa
24da0 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20  ll through into 
24db0 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f  OP_Rewind */.}./
24dc0 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e 64  * Opcode: Rewind
24dd0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
24de0 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20  ** The next use 
24df0 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20  of the Rowid or 
24e00 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69  Column or Next i
24e10 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50  nstruction for P
24e20 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72  1 .** will refer
24e30 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6e   to the first en
24e40 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  try in the datab
24e50 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
24e60 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61  ex..** If the ta
24e70 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
24e80 65 6d 70 74 79 2c 20 6a 75 6d 70 20 69 6d 6d 65  empty, jump imme
24e90 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
24ea0 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f  * If the table o
24eb0 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65  r index is not e
24ec0 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75  mpty, fall throu
24ed0 67 68 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  gh to the follow
24ee0 69 6e 67 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74  ing .** instruct
24ef0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ion..**.** This 
24f00 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
24f10 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
24f20 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66  red to move in f
24f30 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a  orward order,.**
24f40 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
24f50 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65  ing toward the e
24f60 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  nd.  In other wo
24f70 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
24f80 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
24f90 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f   to use Next, no
24fa0 74 20 50 72 65 76 2e 0a 2a 2f 0a 63 61 73 65 20  t Prev..*/.case 
24fb0 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20 20  OP_Rewind: {    
24fc0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
24fd0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
24fe0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
24ff0 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a  sr;.  int res;..
25000 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25010 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
25020 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
25030 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
25040 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
25050 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
25060 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
25070 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  )==(pOp->opcode=
25080 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 29 20  =OP_SorterSort) 
25090 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a 23 69  );.  res = 1;.#i
250a0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
250b0 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
250c0 20 4f 50 5f 52 65 77 69 6e 64 3b 0a 23 65 6e 64   OP_Rewind;.#end
250d0 69 66 0a 20 20 69 66 28 20 69 73 53 6f 72 74 65  if.  if( isSorte
250e0 72 28 70 43 29 20 29 7b 0a 20 20 20 20 72 63 20  r(pC) ){.    rc 
250f0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
25100 74 65 72 52 65 77 69 6e 64 28 70 43 2c 20 26 72  terRewind(pC, &r
25110 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  es);.  }else{.  
25120 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
25130 75 72 73 6f 72 3b 0a 20 20 20 20 61 73 73 65 72  ursor;.    asser
25140 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20  t( pCrsr );.    
25150 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
25160 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26 72  eFirst(pCrsr, &r
25170 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  es);.    pC->def
25180 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
25190 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
251a0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
251b0 4c 45 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75  LE;.  }.  pC->nu
251c0 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b  llRow = (u8)res;
251d0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
251e0 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c  p2>0 && pOp->p2<
251f0 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 56 64 62 65  p->nOp );.  Vdbe
25200 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
25210 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73  =0,2);.  if( res
25220 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
25230 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
25240 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
25250 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50 32 20  ode: Next P1 P2 
25260 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41  P3 P4 P5.**.** A
25270 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31  dvance cursor P1
25280 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
25290 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b  ts to the next k
252a0 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20  ey/data pair in 
252b0 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  its.** table or 
252c0 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65  index.  If there
252d0 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79   are no more key
252e0 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65  /value pairs the
252f0 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  n fall through.*
25300 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
25310 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ng instruction. 
25320 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73   But if the curs
25330 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73 20 73  or advance was s
25340 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75  uccessful,.** ju
25350 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
25360 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  o P2..**.** The 
25370 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f  Next opcode is o
25380 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77  nly valid follow
25390 69 6e 67 20 61 6e 20 53 65 65 6b 47 54 2c 20 53  ing an SeekGT, S
253a0 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f  eekGE, or.** OP_
253b0 52 65 77 69 6e 64 20 6f 70 63 6f 64 65 20 75 73  Rewind opcode us
253c0 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74  ed to position t
253d0 68 65 20 63 75 72 73 6f 72 2e 20 20 4e 65 78 74  he cursor.  Next
253e0 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a   is not allowed.
253f0 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65  ** to follow See
25400 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 20  kLT, SeekLE, or 
25410 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54  OP_Last..**.** T
25420 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
25430 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20  t be for a real 
25440 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
25450 75 64 6f 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d  udo-table.  P1 m
25460 75 73 74 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e  ust have.** been
25470 20 6f 70 65 6e 65 64 20 70 72 69 6f 72 20 74 6f   opened prior to
25480 20 74 68 69 73 20 6f 70 63 6f 64 65 20 6f 72 20   this opcode or 
25490 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c  the program will
254a0 20 73 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a   segfault..**.**
254b0 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   The P3 value is
254c0 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
254d0 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tree implementat
254e0 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74  ion. If P3==1, t
254f0 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20  hat.** means P1 
25500 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20  is an SQL index 
25510 61 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e  and that this in
25520 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20  struction could 
25530 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69  have been.** omi
25540 74 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64  tted if that ind
25550 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71  ex had been uniq
25560 75 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c  ue.  P3 is usual
25570 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20  ly 0.  P3 is.** 
25580 61 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20  always either 0 
25590 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  or 1..**.** P4 i
255a0 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65  s always of type
255b0 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65   P4_ADVANCE. The
255c0 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
255d0 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73  r points to.** s
255e0 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28  qlite3BtreeNext(
255f0 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  )..**.** If P5 i
25600 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74  s positive and t
25610 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
25620 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75  , then event cou
25630 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  nter.** number P
25640 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61  5-1 in the prepa
25650 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73  red statement is
25660 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a   incremented..**
25670 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72  .** See also: Pr
25680 65 76 2c 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a  ev, NextIfOpen.*
25690 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78  /./* Opcode: Nex
256a0 74 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33  tIfOpen P1 P2 P3
256b0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
256c0 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a  s opcode works j
256d0 75 73 74 20 6c 69 6b 65 20 4e 65 78 74 20 65 78  ust like Next ex
256e0 63 65 70 74 20 74 68 61 74 20 69 66 20 63 75 72  cept that if cur
256f0 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a  sor P1 is not.**
25700 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65 73   open it behaves
25710 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20   a no-op..*/./* 
25720 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20  Opcode: Prev P1 
25730 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
25740 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72  * Back up cursor
25750 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
25760 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65  oints to the pre
25770 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70  vious key/data p
25780 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61  air in its.** ta
25790 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49  ble or index.  I
257a0 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72  f there is no pr
257b0 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65  evious key/value
257c0 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c   pairs then fall
257d0 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
257e0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
257f0 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69  truction.  But i
25800 66 20 74 68 65 20 63 75 72 73 6f 72 20 62 61 63  f the cursor bac
25810 6b 75 70 20 77 61 73 20 73 75 63 63 65 73 73 66  kup was successf
25820 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65  ul,.** jump imme
25830 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
25840 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76  *.**.** The Prev
25850 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
25860 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  valid following 
25870 61 6e 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c  an SeekLT, SeekL
25880 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74  E, or.** OP_Last
25890 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20   opcode used to 
258a0 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72  position the cur
258b0 73 6f 72 2e 20 20 50 72 65 76 20 69 73 20 6e 6f  sor.  Prev is no
258c0 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20  t allowed.** to 
258d0 66 6f 6c 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53  follow SeekGT, S
258e0 65 65 6b 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77  eekGE, or OP_Rew
258f0 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ind..**.** The P
25900 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
25910 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c   for a real tabl
25920 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
25930 74 61 62 6c 65 2e 20 20 49 66 20 50 31 20 69 73  table.  If P1 is
25940 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65  .** not open the
25950 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69  n the behavior i
25960 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a  s undefined..**.
25970 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20  ** The P3 value 
25980 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65  is a hint to the
25990 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74   btree implement
259a0 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c  ation. If P3==1,
259b0 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50   that.** means P
259c0 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65  1 is an SQL inde
259d0 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73 20  x and that this 
259e0 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c  instruction coul
259f0 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f  d have been.** o
25a00 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20 69  mitted if that i
25a10 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e  ndex had been un
25a20 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73 75  ique.  P3 is usu
25a30 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a  ally 0.  P3 is.*
25a40 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 20  * always either 
25a50 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34  0 or 1..**.** P4
25a60 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79   is always of ty
25a70 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54  pe P4_ADVANCE. T
25a80 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e  he function poin
25a90 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a  ter points to.**
25aa0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
25ab0 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49  vious()..**.** I
25ac0 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65  f P5 is positive
25ad0 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73   and the jump is
25ae0 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65   taken, then eve
25af0 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75  nt counter.** nu
25b00 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65  mber P5-1 in the
25b10 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
25b20 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ent is increment
25b30 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ed..*/./* Opcode
25b40 3a 20 50 72 65 76 49 66 4f 70 65 6e 20 50 31 20  : PrevIfOpen P1 
25b50 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
25b60 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
25b70 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 50 72  rks just like Pr
25b80 65 76 20 65 78 63 65 70 74 20 74 68 61 74 20 69  ev except that i
25b90 66 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e  f cursor P1 is n
25ba0 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65  ot.** open it be
25bb0 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  haves a no-op..*
25bc0 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
25bd0 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70  Next: {  /* jump
25be0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
25bf0 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
25c00 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ..  pC = p->apCs
25c10 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
25c20 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
25c30 43 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b  C) );.  res = 0;
25c40 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
25c50 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64 62  dbeSorterNext(db
25c60 2c 20 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 67  , pC, &res);.  g
25c70 6f 74 6f 20 6e 65 78 74 5f 74 61 69 6c 3b 0a 63  oto next_tail;.c
25c80 61 73 65 20 4f 50 5f 50 72 65 76 49 66 4f 70 65  ase OP_PrevIfOpe
25c90 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  n:    /* jump */
25ca0 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 49 66 4f  .case OP_NextIfO
25cb0 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20  pen:    /* jump 
25cc0 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73  */.  if( p->apCs
25cd0 72 5b 70 4f 70 2d 3e 70 31 5d 3d 3d 30 20 29 20  r[pOp->p1]==0 ) 
25ce0 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c  break;.  /* Fall
25cf0 20 74 68 72 6f 75 67 68 20 2a 2f 0a 63 61 73 65   through */.case
25d00 20 4f 50 5f 50 72 65 76 3a 20 20 20 20 20 20 20   OP_Prev:       
25d10 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
25d20 73 65 20 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20  se OP_Next:     
25d30 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
25d40 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25d50 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
25d60 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
25d70 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c  assert( pOp->p5<
25d80 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f  ArraySize(p->aCo
25d90 75 6e 74 65 72 29 20 29 3b 0a 20 20 70 43 20 3d  unter) );.  pC =
25da0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
25db0 31 5d 3b 0a 20 20 72 65 73 20 3d 20 70 4f 70 2d  1];.  res = pOp-
25dc0 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p3;.  assert( p
25dd0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
25de0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
25df0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
25e00 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
25e10 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 65   );.  assert( re
25e20 73 3d 3d 30 20 7c 7c 20 28 72 65 73 3d 3d 31 20  s==0 || (res==1 
25e30 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  && pC->isTable==
25e40 30 29 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  0) );.  testcase
25e50 28 20 72 65 73 3d 3d 31 20 29 3b 0a 20 20 61 73  ( res==1 );.  as
25e60 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
25e70 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f  e!=OP_Next || pO
25e80 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d  p->p4.xAdvance==
25e90 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
25ea0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
25eb0 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72  p->opcode!=OP_Pr
25ec0 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  ev || pOp->p4.xA
25ed0 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
25ee0 74 72 65 65 50 72 65 76 69 6f 75 73 20 29 3b 0a  treePrevious );.
25ef0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
25f00 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66  pcode!=OP_NextIf
25f10 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  Open || pOp->p4.
25f20 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65  xAdvance==sqlite
25f30 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20  3BtreeNext );.  
25f40 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
25f50 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70  ode!=OP_PrevIfOp
25f60 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  en || pOp->p4.xA
25f70 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
25f80 74 72 65 65 50 72 65 76 69 6f 75 73 29 3b 0a 0a  treePrevious);..
25f90 20 20 2f 2a 20 54 68 65 20 4e 65 78 74 20 6f 70    /* The Next op
25fa0 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65  code is only use
25fb0 64 20 61 66 74 65 72 20 53 65 65 6b 47 54 2c 20  d after SeekGT, 
25fc0 53 65 65 6b 47 45 2c 20 61 6e 64 20 52 65 77 69  SeekGE, and Rewi
25fd0 6e 64 2e 0a 20 20 2a 2a 20 54 68 65 20 50 72 65  nd..  ** The Pre
25fe0 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  v opcode is only
25ff0 20 75 73 65 64 20 61 66 74 65 72 20 53 65 65 6b   used after Seek
26000 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20  LT, SeekLE, and 
26010 4c 61 73 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72  Last. */.  asser
26020 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
26030 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e  OP_Next || pOp->
26040 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49  opcode!=OP_NextI
26050 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20  fOpen.       || 
26060 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
26070 65 65 6b 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65  eekGT || pC->see
26080 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20  kOp==OP_SeekGE. 
26090 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
260a0 6b 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c  kOp==OP_Rewind |
260b0 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
260c0 5f 46 6f 75 6e 64 29 3b 0a 20 20 61 73 73 65 72  _Found);.  asser
260d0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
260e0 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e  OP_Prev || pOp->
260f0 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49  opcode!=OP_PrevI
26100 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20  fOpen.       || 
26110 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
26120 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65  eekLT || pC->see
26130 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20  kOp==OP_SeekLE. 
26140 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
26150 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a  kOp==OP_Last );.
26160 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e  .  rc = pOp->p4.
26170 78 41 64 76 61 6e 63 65 28 70 43 2d 3e 70 43 75  xAdvance(pC->pCu
26180 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 6e 65 78  rsor, &res);.nex
26190 74 5f 74 61 69 6c 3a 0a 20 20 70 43 2d 3e 63 61  t_tail:.  pC->ca
261a0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
261b0 45 5f 53 54 41 4c 45 3b 0a 20 20 56 64 62 65 42  E_STALE;.  VdbeB
261c0 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 3d 3d  ranchTaken(res==
261d0 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 3d  0,2);.  if( res=
261e0 3d 30 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75  =0 ){.    pC->nu
261f0 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70  llRow = 0;.    p
26200 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
26210 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72  .    p->aCounter
26220 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66  [pOp->p5]++;.#if
26230 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
26240 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72      sqlite3_sear
26250 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  ch_count++;.#end
26260 69 66 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  if.  }else{.    
26270 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  pC->nullRow = 1;
26280 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63  .  }.  goto chec
26290 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b  k_for_interrupt;
262a0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
262b0 64 78 49 6e 73 65 72 74 20 50 31 20 50 32 20 50  dxInsert P1 P2 P
262c0 33 20 2a 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73  3 * P5.** Synops
262d0 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a  is: key=r[P2].**
262e0 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32 20  .** Register P2 
262f0 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64  holds an SQL ind
26300 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e  ex key made usin
26310 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63  g the.** MakeRec
26320 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ord instructions
26330 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  .  This opcode w
26340 72 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a  rites that key.*
26350 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65 78  * into the index
26360 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74   P1.  Data for t
26370 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e  he entry is nil.
26380 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61 20 66  .**.** P3 is a f
26390 6c 61 67 20 74 68 61 74 20 70 72 6f 76 69 64 65  lag that provide
263a0 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20  s a hint to the 
263b0 62 2d 74 72 65 65 20 6c 61 79 65 72 20 74 68 61  b-tree layer tha
263c0 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65 72 74  t this.** insert
263d0 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65   is likely to be
263e0 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a   an append..**.*
263f0 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20  * If P5 has the 
26400 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62  OPFLAG_NCHANGE b
26410 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  it set, then the
26420 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
26430 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
26440 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75  d by this instru
26450 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 4f  ction.  If the O
26460 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69  PFLAG_NCHANGE bi
26470 74 20 69 73 20 63 6c 65 61 72 2c 0a 2a 2a 20 74  t is clear,.** t
26480 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63  hen the change c
26490 6f 75 6e 74 65 72 20 69 73 20 75 6e 63 68 61 6e  ounter is unchan
264a0 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ged..**.** If P5
264b0 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f   has the OPFLAG_
264c0 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 62 69  USESEEKRESULT bi
264d0 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  t set, then the 
264e0 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65  cursor must have
264f0 0a 2a 2a 20 6a 75 73 74 20 64 6f 6e 65 20 61 20  .** just done a 
26500 73 65 65 6b 20 74 6f 20 74 68 65 20 73 70 6f 74  seek to the spot
26510 20 77 68 65 72 65 20 74 68 65 20 6e 65 77 20 65   where the new e
26520 6e 74 72 79 20 69 73 20 74 6f 20 62 65 20 69 6e  ntry is to be in
26530 73 65 72 74 65 64 2e 0a 2a 2a 20 54 68 69 73 20  serted..** This 
26540 66 6c 61 67 20 61 76 6f 69 64 73 20 64 6f 69 6e  flag avoids doin
26550 67 20 61 6e 20 65 78 74 72 61 20 73 65 65 6b 2e  g an extra seek.
26560 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
26570 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72  ruction only wor
26580 6b 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20  ks for indices. 
26590 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20   The equivalent 
265a0 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66  instruction.** f
265b0 6f 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50 5f  or tables is OP_
265c0 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20  Insert..*/.case 
265d0 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 3a  OP_SorterInsert:
265e0 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f         /* in2 */
265f0 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65  .case OP_IdxInse
26600 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  rt: {        /* 
26610 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  in2 */.  VdbeCur
26620 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
26630 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
26640 74 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74 20  t nKey;.  const 
26650 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61  char *zKey;..  a
26660 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
26670 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
26680 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
26690 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
266a0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
266b0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
266c0 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d  ( isSorter(pC)==
266d0 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  (pOp->opcode==OP
266e0 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29  _SorterInsert) )
266f0 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
26700 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
26710 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73  ert( pIn2->flags
26720 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
26730 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
26740 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d  rsor;.  if( pOp-
26750 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48  >p5 & OPFLAG_NCH
26760 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67  ANGE ) p->nChang
26770 65 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 70  e++;.  assert( p
26780 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  Crsr!=0 );.  ass
26790 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
267a0 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 45 78  ==0 );.  rc = Ex
267b0 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a  pandBlob(pIn2);.
267c0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
267d0 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28 20 69  _OK ){.    if( i
267e0 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20  sSorter(pC) ){. 
267f0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
26800 33 56 64 62 65 53 6f 72 74 65 72 57 72 69 74 65  3VdbeSorterWrite
26810 28 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20  (pC, pIn2);.    
26820 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4b 65  }else{.      nKe
26830 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20  y = pIn2->n;.   
26840 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e 32 2d 3e     zKey = pIn2->
26850 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  z;.      rc = sq
26860 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74  lite3BtreeInsert
26870 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c 20 6e 4b  (pCrsr, zKey, nK
26880 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c 20 70 4f  ey, "", 0, 0, pO
26890 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20 20 20 20  p->p3, .        
268a0 20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50    ((pOp->p5 & OP
268b0 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
268c0 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65  LT) ? pC->seekRe
268d0 73 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20  sult : 0).      
268e0 20 20 20 20 29 3b 0a 20 20 20 20 20 20 61 73 73      );.      ass
268f0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
26900 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
26910 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
26920 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
26930 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  E;.    }.  }.  b
26940 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
26950 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50 31  de: IdxDelete P1
26960 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
26970 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32  nopsis: key=r[P2
26980 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  @P3].**.** The c
26990 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72 65 67  ontent of P3 reg
269a0 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20  isters starting 
269b0 61 74 20 72 65 67 69 73 74 65 72 20 50 32 20 66  at register P2 f
269c0 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b  orm.** an unpack
269d0 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 54 68  ed index key. Th
269e0 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65  is opcode remove
269f0 73 20 74 68 61 74 20 65 6e 74 72 79 20 66 72 6f  s that entry fro
26a00 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20  m the .** index 
26a10 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72  opened by cursor
26a20 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
26a30 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56  IdxDelete: {.  V
26a40 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
26a50 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
26a60 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55  ;.  int res;.  U
26a70 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
26a80 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
26a90 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p3>0 );.  asser
26aa0 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  t( pOp->p2>0 && 
26ab0 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c  pOp->p2+pOp->p3<
26ac0 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
26ad0 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 61 73 73  rsor)+1 );.  ass
26ae0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
26af0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
26b00 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
26b10 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
26b20 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
26b30 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
26b40 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61  pC->pCursor;.  a
26b50 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
26b60 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
26b70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 72 2e 70  ->p5==0 );.  r.p
26b80 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
26b90 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65  eyInfo;.  r.nFie
26ba0 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70  ld = (u16)pOp->p
26bb0 33 3b 0a 20 20 72 2e 64 65 66 61 75 6c 74 5f 72  3;.  r.default_r
26bc0 63 20 3d 20 30 3b 0a 20 20 72 2e 61 4d 65 6d 20  c = 0;.  r.aMem 
26bd0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
26be0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
26bf0 44 45 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b  DEBUG.  { int i;
26c00 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46   for(i=0; i<r.nF
26c10 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72  ield; i++) asser
26c20 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
26c30 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23  .aMem[i]) ); }.#
26c40 65 6e 64 69 66 0a 20 20 72 63 20 3d 20 73 71 6c  endif.  rc = sql
26c50 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
26c60 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26  npacked(pCrsr, &
26c70 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  r, 0, 0, &res);.
26c80 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
26c90 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b  _OK && res==0 ){
26ca0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
26cb0 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 72  3BtreeDelete(pCr
26cc0 73 72 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  sr);.  }.  asser
26cd0 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
26ce0 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43  oveto==0 );.  pC
26cf0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
26d00 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62  CACHE_STALE;.  b
26d10 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
26d20 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20  de: IdxRowid P1 
26d30 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
26d40 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69  psis: r[P2]=rowi
26d50 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  d.**.** Write in
26d60 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 61  to register P2 a
26d70 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20  n integer which 
26d80 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72  is the last entr
26d90 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  y in the record 
26da0 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66  at.** the end of
26db0 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 20 70   the index key p
26dc0 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63 75 72  ointed to by cur
26dd0 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20 69 6e  sor P1.  This in
26de0 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62 65 0a  teger should be.
26df0 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  ** the rowid of 
26e00 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20  the table entry 
26e10 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 6e  to which this in
26e20 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e 74 73  dex entry points
26e30 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
26e40 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63  : Rowid, MakeRec
26e50 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ord..*/.case OP_
26e60 49 64 78 52 6f 77 69 64 3a 20 7b 20 20 20 20 20  IdxRowid: {     
26e70 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
26e80 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
26e90 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
26ea0 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
26eb0 70 43 3b 0a 20 20 69 36 34 20 72 6f 77 69 64 3b  pC;.  i64 rowid;
26ec0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
26ed0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
26ee0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
26ef0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
26f00 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
26f10 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70  rt( pC!=0 );.  p
26f20 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
26f30 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
26f40 72 73 72 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  rsr!=0 );.  pOut
26f50 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
26f60 6c 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  ll;.  assert( pC
26f70 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
26f80 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
26f90 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
26fa0 29 3b 0a 0a 20 20 2f 2a 20 73 71 6c 69 74 65 33  );..  /* sqlite3
26fb0 56 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65  VbeCursorRestore
26fc0 28 29 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c  () can only fail
26fd0 20 69 66 20 74 68 65 20 72 65 63 6f 72 64 20 68   if the record h
26fe0 61 73 20 62 65 65 6e 20 64 65 6c 65 74 65 64 0a  as been deleted.
26ff0 20 20 2a 2a 20 6f 75 74 20 66 72 6f 6d 20 75 6e    ** out from un
27000 64 65 72 20 74 68 65 20 63 75 72 73 6f 72 2e 20  der the cursor. 
27010 20 54 68 61 74 20 77 69 6c 6c 20 6e 65 76 65 72   That will never
27020 20 68 61 70 70 65 6e 64 20 66 6f 72 20 61 6e 20   happend for an 
27030 49 64 78 52 6f 77 69 64 0a 20 20 2a 2a 20 6f 70  IdxRowid.  ** op
27040 63 6f 64 65 2c 20 68 65 6e 63 65 20 74 68 65 20  code, hence the 
27050 4e 45 56 45 52 28 29 20 61 72 72 6f 75 6e 64 20  NEVER() arround 
27060 74 68 65 20 63 68 65 63 6b 20 6f 66 20 74 68 65  the check of the
27070 20 72 65 74 75 72 6e 20 76 61 6c 75 65 2e 0a 20   return value.. 
27080 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
27090 65 33 56 64 62 65 43 75 72 73 6f 72 52 65 73 74  e3VdbeCursorRest
270a0 6f 72 65 28 70 43 29 3b 0a 20 20 69 66 28 20 4e  ore(pC);.  if( N
270b0 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f  EVER(rc!=SQLITE_
270c0 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  OK) ) goto abort
270d0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a  _due_to_error;..
270e0 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52    if( !pC->nullR
270f0 6f 77 20 29 7b 0a 20 20 20 20 72 6f 77 69 64 20  ow ){.    rowid 
27100 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
27110 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20  ded.  Only used 
27120 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72  to silence a war
27130 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20  ning. */.    rc 
27140 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  = sqlite3VdbeIdx
27150 52 6f 77 69 64 28 64 62 2c 20 70 43 72 73 72 2c  Rowid(db, pCrsr,
27160 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 69 66   &rowid);.    if
27170 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
27180 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
27190 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
271a0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  ;.    }.    pOut
271b0 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20  ->u.i = rowid;. 
271c0 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
271d0 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20   MEM_Int;.  }.  
271e0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
271f0 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20 50 32  ode: IdxGE P1 P2
27200 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
27210 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
27220 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  P4].**.** The P4
27230 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
27240 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
27250 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
27260 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
27270 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
27280 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43   PRIMARY KEY.  C
27290 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
272a0 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
272b0 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
272c0 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
272d0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
272e0 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
272f0 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20  RY KEY or ROWID 
27300 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68  .** fields at th
27310 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  e end..**.** If 
27320 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
27330 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ry is greater th
27340 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
27350 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20  he key value.** 
27360 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
27370 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c    Otherwise fall
27380 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
27390 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
273a0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
273b0 49 64 78 47 54 20 50 31 20 50 32 20 50 33 20 50  IdxGT P1 P2 P3 P
273c0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
273d0 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
273e0 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
273f0 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
27400 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
27410 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
27420 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
27430 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
27440 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72  ARY KEY.  Compar
27450 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
27460 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64   against the ind
27470 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69  ex .** that P1 i
27480 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
27490 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
274a0 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
274b0 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66  Y or ROWID .** f
274c0 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
274d0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
274e0 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
274f0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
27500 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74  e key value.** t
27510 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
27520 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
27530 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
27540 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
27550 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
27560 64 78 4c 54 20 50 31 20 50 32 20 50 33 20 50 34  dxLT P1 P2 P3 P4
27570 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
27580 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
27590 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
275a0 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
275b0 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
275c0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
275d0 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
275e0 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
275f0 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e  RY KEY or ROWID.
27600 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
27610 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
27620 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68  .** the index th
27630 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
27640 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
27650 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
27660 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52  MARY KEY or.** R
27670 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
27680 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
27690 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
276a0 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
276b0 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65  he key value the
276c0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
276d0 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
276e0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
276f0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
27700 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
27710 64 78 4c 45 20 50 31 20 50 32 20 50 33 20 50 34  dxLE P1 P2 P3 P4
27720 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
27730 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
27740 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
27750 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
27760 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
27770 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
27780 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
27790 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
277a0 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e  RY KEY or ROWID.
277b0 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
277c0 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
277d0 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68  .** the index th
277e0 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
277f0 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
27800 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
27810 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52  MARY KEY or.** R
27820 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
27830 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
27840 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
27850 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  y is less than o
27860 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
27870 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
27880 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68  mp.** to P2. Oth
27890 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
278a0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
278b0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
278c0 63 61 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20  case OP_IdxLE:  
278d0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
278e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 54  */.case OP_IdxGT
278f0 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
27900 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
27910 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  xLT:          /*
27920 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
27930 5f 49 64 78 47 45 3a 20 20 7b 20 20 20 20 20 20  _IdxGE:  {      
27940 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
27950 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
27960 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63  int res;.  Unpac
27970 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20  kedRecord r;..  
27980 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
27990 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
279a0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
279b0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
279c0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
279d0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
279e0 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64  t( pC->isOrdered
279f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
27a00 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 3b 0a 20  ->pCursor!=0);. 
27a10 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
27a20 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
27a30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
27a40 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  >p5==0 || pOp->p
27a50 35 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74  5==1 );.  assert
27a60 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
27a70 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 72 2e 70  4_INT32 );.  r.p
27a80 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
27a90 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65  eyInfo;.  r.nFie
27aa0 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70  ld = (u16)pOp->p
27ab0 34 2e 69 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  4.i;.  if( pOp->
27ac0 6f 70 63 6f 64 65 3c 4f 50 5f 49 64 78 4c 54 20  opcode<OP_IdxLT 
27ad0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
27ae0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
27af0 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  dxLE || pOp->opc
27b00 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b  ode==OP_IdxGT );
27b10 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72  .    r.default_r
27b20 63 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b  c = -1;.  }else{
27b30 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
27b40 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
27b50 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  GE || pOp->opcod
27b60 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20  e==OP_IdxLT );. 
27b70 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20     r.default_rc 
27b80 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d 65  = 0;.  }.  r.aMe
27b90 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
27ba0 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  3];.#ifdef SQLIT
27bb0 45 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e 74 20  E_DEBUG.  { int 
27bc0 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e  i; for(i=0; i<r.
27bd0 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73  nField; i++) ass
27be0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
27bf0 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d  &r.aMem[i]) ); }
27c00 0a 23 65 6e 64 69 66 0a 20 20 72 65 73 20 3d 20  .#endif.  res = 
27c10 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  0;  /* Not neede
27c20 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f  d.  Only used to
27c30 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69   silence a warni
27c40 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  ng. */.  rc = sq
27c50 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79 43  lite3VdbeIdxKeyC
27c60 6f 6d 70 61 72 65 28 64 62 2c 20 70 43 2c 20 26  ompare(db, pC, &
27c70 72 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73 65  r, &res);.  asse
27c80 72 74 28 20 28 4f 50 5f 49 64 78 4c 45 26 31 29  rt( (OP_IdxLE&1)
27c90 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 26  ==(OP_IdxLT&1) &
27ca0 26 20 28 4f 50 5f 49 64 78 47 45 26 31 29 3d 3d  & (OP_IdxGE&1)==
27cb0 28 4f 50 5f 49 64 78 47 54 26 31 29 20 29 3b 0a  (OP_IdxGT&1) );.
27cc0 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63 6f    if( (pOp->opco
27cd0 64 65 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54  de&1)==(OP_IdxLT
27ce0 26 31 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72  &1) ){.    asser
27cf0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
27d00 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d  OP_IdxLE || pOp-
27d10 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
27d20 54 20 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 2d  T );.    res = -
27d30 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  res;.  }else{.  
27d40 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
27d50 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20  pcode==OP_IdxGE 
27d60 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
27d70 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20  OP_IdxGT );.    
27d80 72 65 73 2b 2b 3b 0a 20 20 7d 0a 20 20 56 64 62  res++;.  }.  Vdb
27d90 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
27da0 3e 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73  >0,2);.  if( res
27db0 3e 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  >0 ){.    pc = p
27dc0 4f 70 2d 3e 70 32 20 2d 20 31 20 3b 0a 20 20 7d  Op->p2 - 1 ;.  }
27dd0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
27de0 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79 20  Opcode: Destroy 
27df0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
27e00 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e 74  ** Delete an ent
27e10 69 72 65 20 64 61 74 61 62 61 73 65 20 74 61 62  ire database tab
27e20 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
27e30 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74  e root page in t
27e40 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66  he database.** f
27e50 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20  ile is given by 
27e60 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61  P1..**.** The ta
27e70 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72 6f  ble being destro
27e80 79 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d 61  yed is in the ma
27e90 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
27ea0 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a   if P3==0.  If.*
27eb0 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68 65  * P3==1 then the
27ec0 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65   table to be cle
27ed0 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78  ar is in the aux
27ee0 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
27ef0 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20  file.** that is 
27f00 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61  used to store ta
27f10 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e  bles create usin
27f20 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41  g CREATE TEMPORA
27f30 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20  RY TABLE..**.** 
27f40 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73  If AUTOVACUUM is
27f50 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69 74   enabled then it
27f60 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61   is possible tha
27f70 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70  t another root p
27f80 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20  age.** might be 
27f90 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 6e  moved into the n
27fa0 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f 6f  ewly deleted roo
27fb0 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72 20  t page in order 
27fc0 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72  to keep all.** r
27fd0 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69 67  oot pages contig
27fe0 75 6f 75 73 20 61 74 20 74 68 65 20 62 65 67 69  uous at the begi
27ff0 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74  nning of the dat
28000 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72 6d  abase.  The form
28010 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74  er.** value of t
28020 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68 61  he root page tha
28030 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76 61  t moved - its va
28040 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65 20 6d  lue before the m
28050 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a  ove occurred -.*
28060 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  * is stored in r
28070 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
28080 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65  no page .** move
28090 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69 72 65  ment was require
280a0 64 20 28 62 65 63 61 75 73 65 20 74 68 65 20 74  d (because the t
280b0 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70 70  able being dropp
280c0 65 64 20 77 61 73 20 61 6c 72 65 61 64 79 20 0a  ed was already .
280d0 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e 65 20  ** the last one 
280e0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 29  in the database)
280f0 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20   then a zero is 
28100 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
28110 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54  er P2..** If AUT
28120 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73 61 62  OVACUUM is disab
28130 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f 20  led then a zero 
28140 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
28150 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
28160 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a  See also: Clear.
28170 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74 72  */.case OP_Destr
28180 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74  oy: {     /* out
28190 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
281a0 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20    int iMoved;.  
281b0 69 6e 74 20 69 43 6e 74 3b 0a 20 20 56 64 62 65  int iCnt;.  Vdbe
281c0 20 2a 70 56 64 62 65 3b 0a 20 20 69 6e 74 20 69   *pVdbe;.  int i
281d0 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Db;..  assert( p
281e0 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
281f0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
28200 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
28210 45 0a 20 20 69 43 6e 74 20 3d 20 30 3b 0a 20 20  E.  iCnt = 0;.  
28220 66 6f 72 28 70 56 64 62 65 3d 64 62 2d 3e 70 56  for(pVdbe=db->pV
28230 64 62 65 3b 20 70 56 64 62 65 3b 20 70 56 64 62  dbe; pVdbe; pVdb
28240 65 20 3d 20 70 56 64 62 65 2d 3e 70 4e 65 78 74  e = pVdbe->pNext
28250 29 7b 0a 20 20 20 20 69 66 28 20 70 56 64 62 65  ){.    if( pVdbe
28260 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41  ->magic==VDBE_MA
28270 47 49 43 5f 52 55 4e 20 26 26 20 70 56 64 62 65  GIC_RUN && pVdbe
28280 2d 3e 62 49 73 52 65 61 64 65 72 20 0a 20 20 20  ->bIsReader .   
28290 20 20 26 26 20 70 56 64 62 65 2d 3e 69 6e 56 74    && pVdbe->inVt
282a0 61 62 4d 65 74 68 6f 64 3c 32 20 26 26 20 70 56  abMethod<2 && pV
282b0 64 62 65 2d 3e 70 63 3e 3d 30 20 0a 20 20 20 20  dbe->pc>=0 .    
282c0 29 7b 0a 20 20 20 20 20 20 69 43 6e 74 2b 2b 3b  ){.      iCnt++;
282d0 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6c 73 65  .    }.  }.#else
282e0 0a 20 20 69 43 6e 74 20 3d 20 64 62 2d 3e 6e 56  .  iCnt = db->nV
282f0 64 62 65 52 65 61 64 3b 0a 23 65 6e 64 69 66 0a  dbeRead;.#endif.
28300 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
28310 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20  MEM_Null;.  if( 
28320 69 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 72 63  iCnt>1 ){.    rc
28330 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44   = SQLITE_LOCKED
28340 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63  ;.    p->errorAc
28350 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b  tion = OE_Abort;
28360 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44  .  }else{.    iD
28370 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20  b = pOp->p3;.   
28380 20 61 73 73 65 72 74 28 20 69 43 6e 74 3d 3d 31   assert( iCnt==1
28390 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
283a0 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
283b0 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b  reeMask, iDb) );
283c0 0a 20 20 20 20 69 4d 6f 76 65 64 20 3d 20 30 3b  .    iMoved = 0;
283d0 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
283e0 20 20 4f 6e 6c 79 20 74 6f 20 73 69 6c 65 6e 63    Only to silenc
283f0 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
28400 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
28410 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28 64  BtreeDropTable(d
28420 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
28430 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65   pOp->p1, &iMove
28440 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  d);.    pOut->fl
28450 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
28460 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69     pOut->u.i = i
28470 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66 20 53  Moved;.#ifndef S
28480 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
28490 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20 72 63  ACUUM.    if( rc
284a0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69  ==SQLITE_OK && i
284b0 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20 20  Moved!=0 ){.    
284c0 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67    sqlite3RootPag
284d0 65 4d 6f 76 65 64 28 64 62 2c 20 69 44 62 2c 20  eMoved(db, iDb, 
284e0 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29  iMoved, pOp->p1)
284f0 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 4f  ;.      /* All O
28500 50 5f 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74  P_Destroy operat
28510 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74 68  ions occur on th
28520 65 20 73 61 6d 65 20 62 74 72 65 65 20 2a 2f 0a  e same btree */.
28530 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 65        assert( re
28540 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
28550 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53 63 68 65  ==0 || resetSche
28560 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b 31  maOnFault==iDb+1
28570 20 29 3b 0a 20 20 20 20 20 20 72 65 73 65 74 53   );.      resetS
28580 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 69  chemaOnFault = i
28590 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  Db+1;.    }.#end
285a0 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  if.  }.  break;.
285b0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c  }../* Opcode: Cl
285c0 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a  ear P1 P2 P3.**.
285d0 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f  ** Delete all co
285e0 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61  ntents of the da
285f0 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
28600 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
28610 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20   page.** in the 
28620 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
28630 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20 42   given by P1.  B
28640 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74 72  ut, unlike Destr
28650 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65  oy, do not.** re
28660 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20 6f  move the table o
28670 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68 65  r index from the
28680 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
28690 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20  **.** The table 
286a0 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20 69  being clear is i
286b0 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
286c0 61 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d 3d  ase file if P2==
286d0 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20  0.  If.** P2==1 
286e0 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74  then the table t
286f0 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e  o be clear is in
28700 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
28710 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20  atabase file.** 
28720 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
28730 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65  store tables cre
28740 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45  ate using CREATE
28750 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45   TEMPORARY TABLE
28760 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
28770 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a  3 value is non-z
28780 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74 61  ero, then the ta
28790 62 6c 65 20 72 65 66 65 72 72 65 64 20 74 6f 20  ble referred to 
287a0 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e  must be an.** in
287b0 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20 53  tkey table (an S
287c0 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e  QL table, not an
287d0 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69 73   index). In this
287e0 20 63 61 73 65 20 74 68 65 20 72 6f 77 20 63 68   case the row ch
287f0 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69  ange .** count i
28800 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79  s incremented by
28810 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
28820 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ows in the table
28830 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 20   being cleared. 
28840 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72 65  .** If P3 is gre
28850 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20  ater than zero, 
28860 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 73  then the value s
28870 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
28880 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20  r P3 is.** also 
28890 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74  incremented by t
288a0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
288b0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62  s in the table b
288c0 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a  eing cleared..**
288d0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44 65  .** See also: De
288e0 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50  stroy.*/.case OP
288f0 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20  _Clear: {.  int 
28900 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20 6e 43 68  nChange;. .  nCh
28910 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73 73 65  ange = 0;.  asse
28920 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
28930 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
28940 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
28950 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 32  reeMask, pOp->p2
28960 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ) );.  rc = sqli
28970 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61 62  te3BtreeClearTab
28980 6c 65 28 0a 20 20 20 20 20 20 64 62 2d 3e 61 44  le(.      db->aD
28990 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20  b[pOp->p2].pBt, 
289a0 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70  pOp->p1, (pOp->p
289b0 33 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20 30  3 ? &nChange : 0
289c0 29 0a 20 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  ).  );.  if( pOp
289d0 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e  ->p3 ){.    p->n
289e0 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67  Change += nChang
289f0 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  e;.    if( pOp->
28a00 70 33 3e 30 20 29 7b 0a 20 20 20 20 20 20 61 73  p3>0 ){.      as
28a10 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
28a20 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29  (&aMem[pOp->p3])
28a30 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
28a40 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61  utToChange(p, &a
28a50 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
28a60 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70       aMem[pOp->p
28a70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67  3].u.i += nChang
28a80 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  e;.    }.  }.  b
28a90 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
28aa0 64 65 3a 20 52 65 73 65 74 53 6f 72 74 65 72 20  de: ResetSorter 
28ab0 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
28ac0 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74   Delete all cont
28ad0 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 65 70  ents from the ep
28ae0 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 6f 72  hemeral table or
28af0 20 73 6f 72 74 65 72 0a 2a 2a 20 74 68 61 74 20   sorter.** that 
28b00 69 73 20 6f 70 65 6e 20 6f 6e 20 63 75 72 73 6f  is open on curso
28b10 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P1..**.** This
28b20 20 6f 70 63 6f 64 65 20 6f 6e 6c 79 20 77 6f 72   opcode only wor
28b30 6b 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 75  ks for cursors u
28b40 73 65 64 20 66 6f 72 20 73 6f 72 74 69 6e 67 20  sed for sorting 
28b50 61 6e 64 0a 2a 2a 20 6f 70 65 6e 65 64 20 77 69  and.** opened wi
28b60 74 68 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  th OP_OpenEpheme
28b70 72 61 6c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72  ral or OP_Sorter
28b80 4f 70 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Open..*/.case OP
28b90 5f 52 65 73 65 74 53 6f 72 74 65 72 3a 20 7b 0a  _ResetSorter: {.
28ba0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
28bb0 3b 0a 20 0a 20 20 61 73 73 65 72 74 28 20 70 4f  ;. .  assert( pO
28bc0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
28bd0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
28be0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
28bf0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
28c00 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
28c10 20 69 66 28 20 70 43 2d 3e 70 53 6f 72 74 65 72   if( pC->pSorter
28c20 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
28c30 64 62 65 53 6f 72 74 65 72 52 65 73 65 74 28 64  dbeSorterReset(d
28c40 62 2c 20 70 43 2d 3e 70 53 6f 72 74 65 72 29 3b  b, pC->pSorter);
28c50 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
28c60 73 65 72 74 28 20 70 43 2d 3e 69 73 45 70 68 65  sert( pC->isEphe
28c70 6d 65 72 61 6c 20 29 3b 0a 20 20 20 20 72 63 20  meral );.    rc 
28c80 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c  = sqlite3BtreeCl
28c90 65 61 72 54 61 62 6c 65 4f 66 43 75 72 73 6f 72  earTableOfCursor
28ca0 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  (pC->pCursor);. 
28cb0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
28cc0 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65  * Opcode: Create
28cd0 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20  Table P1 P2 * * 
28ce0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
28cf0 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31  [P2]=root iDb=P1
28d00 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  .**.** Allocate 
28d10 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 74  a new table in t
28d20 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
28d30 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f   file if P1==0 o
28d40 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69  r in the.** auxi
28d50 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
28d60 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20  ile if P1==1 or 
28d70 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  in an attached d
28d80 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31  atabase if.** P1
28d90 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72  >1.  Write the r
28da0 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
28db0 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  of the new table
28dc0 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
28dd0 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  r P2.**.** The d
28de0 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
28df0 6e 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61 6e  n a table and an
28e00 20 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a 20   index is this: 
28e10 20 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a   A table must.**
28e20 20 68 61 76 65 20 61 20 34 2d 62 79 74 65 20 69   have a 4-byte i
28e30 6e 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20 63  nteger key and c
28e40 61 6e 20 68 61 76 65 20 61 72 62 69 74 72 61 72  an have arbitrar
28e50 79 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64 65  y data.  An inde
28e60 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62 69  x.** has an arbi
28e70 74 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e 6f  trary key but no
28e80 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   data..**.** See
28e90 20 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e 64   also: CreateInd
28ea0 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ex.*/./* Opcode:
28eb0 20 43 72 65 61 74 65 49 6e 64 65 78 20 50 31 20   CreateIndex P1 
28ec0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
28ed0 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74  psis: r[P2]=root
28ee0 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c   iDb=P1.**.** Al
28ef0 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e 64  locate a new ind
28f00 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  ex in the main d
28f10 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
28f20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a  P1==0 or in the.
28f30 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  ** auxiliary dat
28f40 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
28f50 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74  ==1 or in an att
28f60 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69  ached database i
28f70 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74  f.** P1>1.  Writ
28f80 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  e the root page 
28f90 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65  number of the ne
28fa0 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20  w table into.** 
28fb0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
28fc0 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61  ** See documenta
28fd0 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74  tion on OP_Creat
28fe0 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74  eTable for addit
28ff0 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
29000 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72  n..*/.case OP_Cr
29010 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20 20  eateIndex:      
29020 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
29030 65 72 65 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65  erelease */.case
29040 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 3a   OP_CreateTable:
29050 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f   {          /* o
29060 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
29070 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20  /.  int pgno;.  
29080 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20  int flags;.  Db 
29090 2a 70 44 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d 20  *pDb;..  pgno = 
290a0 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
290b0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
290c0 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
290d0 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
290e0 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
290f0 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61   pOp->p1) );.  a
29100 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
29110 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d  ly==0 );.  pDb =
29120 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70   &db->aDb[pOp->p
29130 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44  1];.  assert( pD
29140 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 69  b->pBt!=0 );.  i
29150 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
29160 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 29  OP_CreateTable )
29170 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 3d  {.    /* flags =
29180 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20 2a   BTREE_INTKEY; *
29190 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54  /.    flags = BT
291a0 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d 65  REE_INTKEY;.  }e
291b0 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73 20 3d  lse{.    flags =
291c0 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 3b 0a   BTREE_BLOBKEY;.
291d0 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
291e0 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
291f0 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26 70 67  le(pDb->pBt, &pg
29200 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20 70 4f  no, flags);.  pO
29210 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a  ut->u.i = pgno;.
29220 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
29230 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63 68 65  pcode: ParseSche
29240 6d 61 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  ma P1 * * P4 *.*
29250 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20 70 61  *.** Read and pa
29260 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20  rse all entries 
29270 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45 5f  from the SQLITE_
29280 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f 66 20  MASTER table of 
29290 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a 20 74  database P1.** t
292a0 68 61 74 20 6d 61 74 63 68 20 74 68 65 20 57 48  hat match the WH
292b0 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e 20 0a  ERE clause P4. .
292c0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
292d0 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61  e invokes the pa
292e0 72 73 65 72 20 74 6f 20 63 72 65 61 74 65 20 61  rser to create a
292f0 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63   new virtual mac
29300 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75  hine,.** then ru
29310 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72 74 75  ns the new virtu
29320 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20  al machine.  It 
29330 69 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74  is thus a re-ent
29340 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  rant opcode..*/.
29350 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68  case OP_ParseSch
29360 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62  ema: {.  int iDb
29370 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
29380 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72 20  zMaster;.  char 
29390 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74  *zSql;.  InitDat
293a0 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 2f  a initData;..  /
293b0 2a 20 41 6e 79 20 70 72 65 70 61 72 65 64 20 73  * Any prepared s
293c0 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69 6e  tatement that in
293d0 76 6f 6b 65 73 20 74 68 69 73 20 6f 70 63 6f 64  vokes this opcod
293e0 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75 74 65  e will hold mute
293f0 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76 65 72  xes.  ** on ever
29400 79 20 62 74 72 65 65 2e 20 20 54 68 69 73 20 69  y btree.  This i
29410 73 20 61 20 70 72 65 72 65 71 75 69 73 69 74 65  s a prerequisite
29420 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20 0a 20   for invoking . 
29430 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69 74 43   ** sqlite3InitC
29440 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a  allback()..  */.
29450 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
29460 42 55 47 0a 20 20 66 6f 72 28 69 44 62 3d 30 3b  BUG.  for(iDb=0;
29470 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20 69 44   iDb<db->nDb; iD
29480 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  b++){.    assert
29490 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71 6c 69  ( iDb==1 || sqli
294a0 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d 75 74  te3BtreeHoldsMut
294b0 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  ex(db->aDb[iDb].
294c0 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65 6e 64  pBt) );.  }.#end
294d0 69 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d  if..  iDb = pOp-
294e0 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p1;.  assert( i
294f0 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
29500 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
29510 28 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28  ( DbHasProperty(
29520 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65  db, iDb, DB_Sche
29530 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20 20 2f  maLoaded) );.  /
29540 2a 20 55 73 65 64 20 74 6f 20 62 65 20 61 20 63  * Used to be a c
29550 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a  onditional */ {.
29560 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 53 43      zMaster = SC
29570 48 45 4d 41 5f 54 41 42 4c 45 28 69 44 62 29 3b  HEMA_TABLE(iDb);
29580 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 64 62  .    initData.db
29590 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69 74 44   = db;.    initD
295a0 61 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ata.iDb = pOp->p
295b0 31 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  1;.    initData.
295c0 70 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a  pzErrMsg = &p->z
295d0 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c  ErrMsg;.    zSql
295e0 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74   = sqlite3MPrint
295f0 66 28 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45  f(db,.       "SE
29600 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70  LECT name, rootp
29610 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25  age, sql FROM '%
29620 71 27 2e 25 73 20 57 48 45 52 45 20 25 73 20 4f  q'.%s WHERE %s O
29630 52 44 45 52 20 42 59 20 72 6f 77 69 64 22 2c 0a  RDER BY rowid",.
29640 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69         db->aDb[i
29650 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74  Db].zName, zMast
29660 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  er, pOp->p4.z);.
29670 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20      if( zSql==0 
29680 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
29690 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20  LITE_NOMEM;.    
296a0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73  }else{.      ass
296b0 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75  ert( db->init.bu
296c0 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64  sy==0 );.      d
296d0 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31  b->init.busy = 1
296e0 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74 61  ;.      initData
296f0 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b  .rc = SQLITE_OK;
29700 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 21  .      assert( !
29710 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
29720 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
29730 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20  qlite3_exec(db, 
29740 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69  zSql, sqlite3Ini
29750 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74  tCallback, &init
29760 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20  Data, 0);.      
29770 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
29780 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61 74  K ) rc = initDat
29790 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71 6c 69  a.rc;.      sqli
297a0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 53  te3DbFree(db, zS
297b0 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69  ql);.      db->i
297c0 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20  nit.busy = 0;.  
297d0 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63    }.  }.  if( rc
297e0 20 29 20 73 71 6c 69 74 65 33 52 65 73 65 74 41   ) sqlite3ResetA
297f0 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
29800 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 69 66 28  ction(db);.  if(
29810 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45   rc==SQLITE_NOME
29820 4d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  M ){.    goto no
29830 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _mem;.  }.  brea
29840 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66  k;  .}..#if !def
29850 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
29860 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63  _ANALYZE)./* Opc
29870 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69  ode: LoadAnalysi
29880 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  s P1 * * * *.**.
29890 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71 6c 69  ** Read the sqli
298a0 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 66  te_stat1 table f
298b0 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20 61  or database P1 a
298c0 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74  nd load the cont
298d0 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74  ent.** of that t
298e0 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20 69 6e  able into the in
298f0 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68 61 73  ternal index has
29900 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 77  h table.  This w
29910 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68 65  ill cause.** the
29920 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62 65 20   analysis to be 
29930 75 73 65 64 20 77 68 65 6e 20 70 72 65 70 61 72  used when prepar
29940 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71 75 65  ing all subseque
29950 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63  nt queries..*/.c
29960 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79  ase OP_LoadAnaly
29970 73 69 73 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  sis: {.  assert(
29980 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
29990 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
299a0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
299b0 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c  AnalysisLoad(db,
299c0 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 62 72 65   pOp->p1);.  bre
299d0 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f  ak;  .}.#endif /
299e0 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  * !defined(SQLIT
299f0 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20  E_OMIT_ANALYZE) 
29a00 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  */../* Opcode: D
29a10 72 6f 70 54 61 62 6c 65 20 50 31 20 2a 20 2a 20  ropTable P1 * * 
29a20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
29a30 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
29a40 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
29a50 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
29a60 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
29a70 74 61 62 6c 65 20 6e 61 6d 65 64 20 50 34 20 69  table named P4 i
29a80 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
29a90 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
29aa0 66 74 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20  fter a table.** 
29ab0 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20  is dropped from 
29ac0 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20  disk (using the 
29ad0 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20  Destroy opcode) 
29ae0 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
29af0 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61   .** the interna
29b00 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
29b10 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
29b20 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
29b30 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
29b40 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
29b50 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c  opTable: {.  sql
29b60 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
29b70 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70  eteTable(db, pOp
29b80 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
29b90 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
29ba0 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64   Opcode: DropInd
29bb0 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  ex P1 * * P4 *.*
29bc0 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
29bd0 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
29be0 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
29bf0 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
29c00 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20  be.** the index 
29c10 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
29c20 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
29c30 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
29c40 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72  n index.** is dr
29c50 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20  opped from disk 
29c60 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72  (using the Destr
29c70 6f 79 20 6f 70 63 6f 64 65 29 0a 2a 2a 20 69 6e  oy opcode).** in
29c80 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74   order to keep t
29c90 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
29ca0 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
29cb0 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
29cc0 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
29cd0 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
29ce0 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64 65  case OP_DropInde
29cf0 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e  x: {.  sqlite3Un
29d00 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64  linkAndDeleteInd
29d10 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  ex(db, pOp->p1, 
29d20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
29d30 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
29d40 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20 50  e: DropTrigger P
29d50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
29d60 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
29d70 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
29d80 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
29d90 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
29da0 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 6e 61  * the trigger na
29db0 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
29dc0 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
29dd0 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74  called after a t
29de0 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f  rigger.** is dro
29df0 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28  pped from disk (
29e00 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f  using the Destro
29e10 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64  y opcode) in ord
29e20 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74  er to keep .** t
29e30 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
29e40 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
29e50 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
29e60 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
29e70 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
29e80 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67  case OP_DropTrig
29e90 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ger: {.  sqlite3
29ea0 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
29eb0 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e  rigger(db, pOp->
29ec0 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
29ed0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66    break;.}...#if
29ee0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
29ef0 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
29f00 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65  ./* Opcode: Inte
29f10 67 72 69 74 79 43 6b 20 50 31 20 50 32 20 50 33  grityCk P1 P2 P3
29f20 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61   * P5.**.** Do a
29f30 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68  n analysis of th
29f40 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  e currently open
29f50 20 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72   database.  Stor
29f60 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72  e in.** register
29f70 20 50 31 20 74 68 65 20 74 65 78 74 20 6f 66 20   P1 the text of 
29f80 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
29f90 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20   describing any 
29fa0 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20  problems..** If 
29fb0 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20  no problems are 
29fc0 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e  found, store a N
29fd0 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20  ULL in register 
29fe0 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65  P1..**.** The re
29ff0 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69  gister P3 contai
2a000 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e  ns the maximum n
2a010 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64  umber of allowed
2a020 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d   errors..** At m
2a030 6f 73 74 20 72 65 67 28 50 33 29 20 65 72 72 6f  ost reg(P3) erro
2a040 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72  rs will be repor
2a050 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ted..** In other
2a060 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c   words, the anal
2a070 79 73 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f  ysis stops as so
2a080 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20 65 72  on as reg(P1) er
2a090 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65  rors are .** see
2a0a0 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73 20 75  n.  Reg(P1) is u
2a0b0 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20  pdated with the 
2a0c0 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  number of errors
2a0d0 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a   remaining..**.*
2a0e0 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20  * The root page 
2a0f0 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74  numbers of all t
2a100 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74  ables in the dat
2a110 61 62 61 73 65 20 61 72 65 20 69 6e 74 65 67 65  abase are intege
2a120 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 72  r.** stored in r
2a130 65 67 28 50 31 29 2c 20 72 65 67 28 50 31 2b 31  eg(P1), reg(P1+1
2a140 29 2c 20 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e  ), reg(P1+2), ..
2a150 2e 2e 20 20 54 68 65 72 65 20 61 72 65 20 50 32  ..  There are P2
2a160 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c   tables.** total
2a170 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
2a180 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63   not zero, the c
2a190 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20  heck is done on 
2a1a0 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61  the auxiliary da
2a1b0 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20  tabase.** file, 
2a1c0 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74  not the main dat
2a1d0 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
2a1e0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
2a1f0 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   used to impleme
2a200 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  nt the integrity
2a210 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a  _check pragma..*
2a220 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72  /.case OP_Integr
2a230 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e  ityCk: {.  int n
2a240 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75  Root;      /* Nu
2a250 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74  mber of tables t
2a260 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65  o check.  (Numbe
2a270 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e  r of root pages.
2a280 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f  ) */.  int *aRoo
2a290 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20  t;     /* Array 
2a2a0 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62  of rootpage numb
2a2b0 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74  ers for tables t
2a2c0 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a  o be checked */.
2a2d0 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20    int j;        
2a2e0 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
2a2f0 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  r */.  int nErr;
2a300 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
2a310 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72   of errors repor
2a320 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ted */.  char *z
2a330 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74  ;        /* Text
2a340 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72 65   of the error re
2a350 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  port */.  Mem *p
2a360 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67  nErr;     /* Reg
2a370 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72  ister keeping tr
2a380 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ack of errors re
2a390 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61 73  maining */..  as
2a3a0 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
2a3b0 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20  er );.  nRoot = 
2a3c0 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
2a3d0 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20  t( nRoot>0 );.  
2a3e0 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74 65 33 44  aRoot = sqlite3D
2a3f0 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73  bMallocRaw(db, s
2a400 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e 52 6f 6f  izeof(int)*(nRoo
2a410 74 2b 31 29 20 29 3b 0a 20 20 69 66 28 20 61 52  t+1) );.  if( aR
2a420 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  oot==0 ) goto no
2a430 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20  _mem;.  assert( 
2a440 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
2a450 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
2a460 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
2a470 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f  pnErr = &aMem[pO
2a480 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
2a490 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20  ( (pnErr->flags 
2a4a0 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
2a4b0 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72  .  assert( (pnEr
2a4c0 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  r->flags & (MEM_
2a4d0 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
2a4e0 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  0 );.  pIn1 = &a
2a4f0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2a500 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74  for(j=0; j<nRoot
2a510 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f  ; j++){.    aRoo
2a520 74 5b 6a 5d 20 3d 20 28 69 6e 74 29 73 71 6c 69  t[j] = (int)sqli
2a530 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
2a540 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20  &pIn1[j]);.  }. 
2a550 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20   aRoot[j] = 0;. 
2a560 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
2a570 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
2a580 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
2a590 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
2a5a0 4f 70 2d 3e 70 35 29 20 29 3b 0a 20 20 7a 20 3d  Op->p5) );.  z =
2a5b0 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74   sqlite3BtreeInt
2a5c0 65 67 72 69 74 79 43 68 65 63 6b 28 64 62 2d 3e  egrityCheck(db->
2a5d0 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74  aDb[pOp->p5].pBt
2a5e0 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a  , aRoot, nRoot,.
2a5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a610 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69   (int)pnErr->u.i
2a620 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69  , &nErr);.  sqli
2a630 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 61 52  te3DbFree(db, aR
2a640 6f 6f 74 29 3b 0a 20 20 70 6e 45 72 72 2d 3e 75  oot);.  pnErr->u
2a650 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20 20 73 71  .i -= nErr;.  sq
2a660 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
2a670 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66 28  ull(pIn1);.  if(
2a680 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20   nErr==0 ){.    
2a690 61 73 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a  assert( z==0 );.
2a6a0 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30    }else if( z==0
2a6b0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   ){.    goto no_
2a6c0 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  mem;.  }else{.  
2a6d0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2a6e0 53 65 74 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20  SetStr(pIn1, z, 
2a6f0 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  -1, SQLITE_UTF8,
2a700 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a   sqlite3_free);.
2a710 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41 58    }.  UPDATE_MAX
2a720 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b  _BLOBSIZE(pIn1);
2a730 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
2a740 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e  angeEncoding(pIn
2a750 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  1, encoding);.  
2a760 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2a770 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49  /* SQLITE_OMIT_I
2a780 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a  NTEGRITY_CHECK *
2a790 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  /../* Opcode: Ro
2a7a0 77 53 65 74 41 64 64 20 50 31 20 50 32 20 2a 20  wSetAdd P1 P2 * 
2a7b0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2a7c0 20 20 72 6f 77 73 65 74 28 50 31 29 3d 72 5b 50    rowset(P1)=r[P
2a7d0 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74 20  2].**.** Insert 
2a7e0 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
2a7f0 65 20 68 65 6c 64 20 62 79 20 72 65 67 69 73 74  e held by regist
2a800 65 72 20 50 32 20 69 6e 74 6f 20 61 20 62 6f 6f  er P2 into a boo
2a810 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 65  lean index.** he
2a820 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ld in register P
2a830 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73 65  1..**.** An asse
2a840 72 74 69 6f 6e 20 66 61 69 6c 73 20 69 66 20 50  rtion fails if P
2a850 32 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65  2 is not an inte
2a860 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ger..*/.case OP_
2a870 52 6f 77 53 65 74 41 64 64 3a 20 7b 20 20 20 20  RowSetAdd: {    
2a880 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20 2a     /* in1, in2 *
2a890 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
2a8a0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
2a8b0 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
2a8c0 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  2];.  assert( (p
2a8d0 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
2a8e0 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 69 66  _Int)!=0 );.  if
2a8f0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
2a900 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
2a910 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
2a920 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70  beMemSetRowSet(p
2a930 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70  In1);.    if( (p
2a940 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
2a950 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f  _RowSet)==0 ) go
2a960 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
2a970 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
2a980 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  sert(pIn1->u.pRo
2a990 77 53 65 74 2c 20 70 49 6e 32 2d 3e 75 2e 69 29  wSet, pIn2->u.i)
2a9a0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2a9b0 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 52   Opcode: RowSetR
2a9c0 65 61 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ead P1 P2 P3 * *
2a9d0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
2a9e0 5b 50 33 5d 3d 72 6f 77 73 65 74 28 50 31 29 0a  [P3]=rowset(P1).
2a9f0 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 74 68  **.** Extract th
2aa00 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65  e smallest value
2aa10 20 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e   from boolean in
2aa20 64 65 78 20 50 31 20 61 6e 64 20 70 75 74 20 74  dex P1 and put t
2aa30 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 0a 2a  hat value into.*
2aa40 2a 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20  * register P3.  
2aa50 4f 72 2c 20 69 66 20 62 6f 6f 6c 65 61 6e 20 69  Or, if boolean i
2aa60 6e 64 65 78 20 50 31 20 69 73 20 69 6e 69 74 69  ndex P1 is initi
2aa70 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65 61 76  ally empty, leav
2aa80 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65  e P3.** unchange
2aa90 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e  d and jump to in
2aaa0 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f  struction P2..*/
2aab0 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 52  .case OP_RowSetR
2aac0 65 61 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  ead: {       /* 
2aad0 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75 74 33 20  jump, in1, out3 
2aae0 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b 0a 0a 20  */.  i64 val;.. 
2aaf0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2ab00 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70  p->p1];.  if( (p
2ab10 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
2ab20 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20 20  _RowSet)==0 .   
2ab30 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  || sqlite3RowSet
2ab40 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  Next(pIn1->u.pRo
2ab50 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20  wSet, &val)==0. 
2ab60 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62   ){.    /* The b
2ab70 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20  oolean index is 
2ab80 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c  empty */.    sql
2ab90 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
2aba0 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20 70 63  ll(pIn1);.    pc
2abb0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
2abc0 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
2abd0 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 7d 65 6c 73  ken(1,2);.  }els
2abe0 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c 75  e{.    /* A valu
2abf0 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66 72 6f  e was pulled fro
2ac00 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  m the index */. 
2ac10 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2ac20 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b  mSetInt64(&aMem[
2ac30 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a  pOp->p3], val);.
2ac40 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
2ac50 6b 65 6e 28 30 2c 32 29 3b 0a 20 20 7d 0a 20 20  ken(0,2);.  }.  
2ac60 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69  goto check_for_i
2ac70 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20  nterrupt;.}../* 
2ac80 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 54 65  Opcode: RowSetTe
2ac90 73 74 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a  st P1 P2 P3 P4.*
2aca0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
2acb0 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65 74 28 50  [P3] in rowset(P
2acc0 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  1) goto P2.**.**
2acd0 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20   Register P3 is 
2ace0 61 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20  assumed to hold 
2acf0 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
2ad00 20 76 61 6c 75 65 2e 20 49 66 20 72 65 67 69 73   value. If regis
2ad10 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69  ter P1.** contai
2ad20 6e 73 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65  ns a RowSet obje
2ad30 63 74 20 61 6e 64 20 74 68 61 74 20 52 6f 77 53  ct and that RowS
2ad40 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69  et object contai
2ad50 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ns.** the value 
2ad60 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70  held in P3, jump
2ad70 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
2ad80 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e 73 65   Otherwise, inse
2ad90 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65  rt the.** intege
2ada0 72 20 69 6e 20 50 33 20 69 6e 74 6f 20 74 68 65  r in P3 into the
2adb0 20 52 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e 74   RowSet and cont
2adc0 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a  inue on to the.*
2add0 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a  * next opcode..*
2ade0 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65 74 20  *.** The RowSet 
2adf0 6f 62 6a 65 63 74 20 69 73 20 6f 70 74 69 6d 69  object is optimi
2ae00 7a 65 64 20 66 6f 72 20 74 68 65 20 63 61 73 65  zed for the case
2ae10 20 77 68 65 72 65 20 73 75 63 63 65 73 73 69 76   where successiv
2ae20 65 20 73 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74  e sets.** of int
2ae30 65 67 65 72 73 2c 20 77 68 65 72 65 20 65 61 63  egers, where eac
2ae40 68 20 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e  h set contains n
2ae50 6f 20 64 75 70 6c 69 63 61 74 65 73 2e 20 45 61  o duplicates. Ea
2ae60 63 68 20 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c  ch set.** of val
2ae70 75 65 73 20 69 73 20 69 64 65 6e 74 69 66 69 65  ues is identifie
2ae80 64 20 62 79 20 61 20 75 6e 69 71 75 65 20 50 34  d by a unique P4
2ae90 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69 72 73   value. The firs
2aea0 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61  t set.** must ha
2aeb0 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20 66 69  ve P4==0, the fi
2aec0 6e 61 6c 20 73 65 74 20 50 34 3d 2d 31 2e 20 20  nal set P4=-1.  
2aed0 50 34 20 6d 75 73 74 20 62 65 20 65 69 74 68 65  P4 must be eithe
2aee0 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e  r -1 or.** non-n
2aef0 65 67 61 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f  egative.  For no
2af00 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  n-negative value
2af10 73 20 6f 66 20 50 34 20 6f 6e 6c 79 20 74 68 65  s of P4 only the
2af20 20 6c 6f 77 65 72 20 34 0a 2a 2a 20 62 69 74 73   lower 4.** bits
2af30 20 61 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74   are significant
2af40 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c  ..**.** This all
2af50 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ows optimization
2af60 73 3a 20 28 61 29 20 77 68 65 6e 20 50 34 3d 3d  s: (a) when P4==
2af70 30 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65  0 there is no ne
2af80 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68  ed to test.** th
2af90 65 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20  e rowset object 
2afa0 66 6f 72 20 50 33 2c 20 61 73 20 69 74 20 69 73  for P3, as it is
2afb0 20 67 75 61 72 61 6e 74 65 65 64 20 6e 6f 74 20   guaranteed not 
2afc0 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a  to contain it,.*
2afd0 2a 20 28 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d  * (b) when P4==-
2afe0 31 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65  1 there is no ne
2aff0 65 64 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65  ed to insert the
2b000 20 76 61 6c 75 65 2c 20 61 73 20 69 74 20 77 69   value, as it wi
2b010 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20 74  ll.** never be t
2b020 65 73 74 65 64 20 66 6f 72 2c 20 61 6e 64 20 28  ested for, and (
2b030 63 29 20 77 68 65 6e 20 61 20 76 61 6c 75 65 20  c) when a value 
2b040 74 68 61 74 20 69 73 20 70 61 72 74 20 6f 66 20  that is part of 
2b050 73 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65  set X is.** inse
2b060 72 74 65 64 2c 20 74 68 65 72 65 20 69 73 20 6e  rted, there is n
2b070 6f 20 6e 65 65 64 20 74 6f 20 73 65 61 72 63 68  o need to search
2b080 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 73   to see if the s
2b090 61 6d 65 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a  ame value was.**
2b0a0 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 65   previously inse
2b0b0 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  rted as part of 
2b0c0 73 65 74 20 58 20 28 6f 6e 6c 79 20 69 66 20 69  set X (only if i
2b0d0 74 20 77 61 73 20 70 72 65 76 69 6f 75 73 6c 79  t was previously
2b0e0 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20 61 73 20  .** inserted as 
2b0f0 70 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68  part of some oth
2b100 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65  er set)..*/.case
2b110 20 4f 50 5f 52 6f 77 53 65 74 54 65 73 74 3a 20   OP_RowSetTest: 
2b120 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
2b130 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
2b140 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  n1, in3 */.  int
2b150 20 69 53 65 74 3b 0a 20 20 69 6e 74 20 65 78 69   iSet;.  int exi
2b160 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  sts;..  pIn1 = &
2b170 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2b180 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
2b190 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d  p->p3];.  iSet =
2b1a0 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73   pOp->p4.i;.  as
2b1b0 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
2b1c0 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20  s&MEM_Int );..  
2b1d0 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61  /* If there is a
2b1e0 6e 79 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68  nything other th
2b1f0 61 6e 20 61 20 72 6f 77 73 65 74 20 6f 62 6a 65  an a rowset obje
2b200 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c  ct in memory cel
2b210 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74  l P1,.  ** delet
2b220 65 20 69 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69  e it now and ini
2b230 74 69 61 6c 69 7a 65 20 50 31 20 77 69 74 68 20  tialize P1 with 
2b240 61 6e 20 65 6d 70 74 79 20 72 6f 77 73 65 74 0a  an empty rowset.
2b250 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31    */.  if( (pIn1
2b260 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
2b270 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  wSet)==0 ){.    
2b280 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2b290 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20  tRowSet(pIn1);. 
2b2a0 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c     if( (pIn1->fl
2b2b0 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
2b2c0 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  )==0 ) goto no_m
2b2d0 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72  em;.  }..  asser
2b2e0 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
2b2f0 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73  P4_INT32 );.  as
2b300 73 65 72 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c  sert( iSet==-1 |
2b310 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69  | iSet>=0 );.  i
2b320 66 28 20 69 53 65 74 20 29 7b 0a 20 20 20 20 65  f( iSet ){.    e
2b330 78 69 73 74 73 20 3d 20 73 71 6c 69 74 65 33 52  xists = sqlite3R
2b340 6f 77 53 65 74 54 65 73 74 28 70 49 6e 31 2d 3e  owSetTest(pIn1->
2b350 75 2e 70 52 6f 77 53 65 74 2c 20 69 53 65 74 2c  u.pRowSet, iSet,
2b360 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20   pIn3->u.i);.   
2b370 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2b380 28 65 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20  (exists!=0,2);. 
2b390 20 20 20 69 66 28 20 65 78 69 73 74 73 20 29 7b     if( exists ){
2b3a0 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
2b3b0 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 62  >p2 - 1;.      b
2b3c0 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  reak;.    }.  }.
2b3d0 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b    if( iSet>=0 ){
2b3e0 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53  .    sqlite3RowS
2b3f0 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75  etInsert(pIn1->u
2b400 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e  .pRowSet, pIn3->
2b410 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  u.i);.  }.  brea
2b420 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53  k;.}...#ifndef S
2b430 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
2b440 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  ER../* Opcode: P
2b450 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33 20  rogram P1 P2 P3 
2b460 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63  P4 P5.**.** Exec
2b470 75 74 65 20 74 68 65 20 74 72 69 67 67 65 72 20  ute the trigger 
2b480 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61  program passed a
2b490 73 20 50 34 20 28 74 79 70 65 20 50 34 5f 53 55  s P4 (type P4_SU
2b4a0 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a  BPROGRAM). .**.*
2b4b0 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68  * P1 contains th
2b4c0 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65  e address of the
2b4d0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
2b4e0 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66  t contains the f
2b4f0 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20  irst memory .** 
2b500 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79  cell in an array
2b510 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 20   of values used 
2b520 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  as arguments to 
2b530 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e  the sub-program.
2b540 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73   P2 .** contains
2b550 20 74 68 65 20 61 64 64 72 65 73 73 20 74 6f 20   the address to 
2b560 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73  jump to if the s
2b570 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77  ub-program throw
2b580 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20  s an IGNORE .** 
2b590 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20  exception using 
2b5a0 74 68 65 20 52 41 49 53 45 28 29 20 66 75 6e 63  the RAISE() func
2b5b0 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50  tion. Register P
2b5c0 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  3 contains the a
2b5d0 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20  ddress .** of a 
2b5e0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74  memory cell in t
2b5f0 68 69 73 20 28 74 68 65 20 70 61 72 65 6e 74 29  his (the parent)
2b600 20 56 4d 20 74 68 61 74 20 69 73 20 75 73 65 64   VM that is used
2b610 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65   to allocate the
2b620 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75   .** memory requ
2b630 69 72 65 64 20 62 79 20 74 68 65 20 73 75 62 2d  ired by the sub-
2b640 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e  vdbe at runtime.
2b650 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
2b660 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d  ointer to the VM
2b670 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
2b680 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
2b690 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
2b6a0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72  non-zero, then r
2b6b0 65 63 75 72 73 69 76 65 20 70 72 6f 67 72 61 6d  ecursive program
2b6c0 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69 73 20 65   invocation is e
2b6d0 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  nabled..*/.case 
2b6e0 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20  OP_Program: {   
2b6f0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2b700 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20    int nMem;     
2b710 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
2b720 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65  ber of memory re
2b730 67 69 73 74 65 72 73 20 66 6f 72 20 73 75 62 2d  gisters for sub-
2b740 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74  program */.  int
2b750 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20   nByte;         
2b760 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66       /* Bytes of
2b770 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 72   runtime space r
2b780 65 71 75 69 72 65 64 20 66 6f 72 20 73 75 62 2d  equired for sub-
2b790 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d  program */.  Mem
2b7a0 20 2a 70 52 74 3b 20 20 20 20 20 20 20 20 20 20   *pRt;          
2b7b0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
2b7c0 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e   to allocate run
2b7d0 74 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20 20  time space */.  
2b7e0 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
2b7f0 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20          /* Used 
2b800 74 6f 20 69 74 65 72 61 74 65 20 74 68 72 6f 75  to iterate throu
2b810 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  gh memory cells 
2b820 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20  */.  Mem *pEnd; 
2b830 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2b840 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  Last memory cell
2b850 20 69 6e 20 6e 65 77 20 61 72 72 61 79 20 2a 2f   in new array */
2b860 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
2b870 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65  rame;      /* Ne
2b880 77 20 76 64 62 65 20 66 72 61 6d 65 20 74 6f 20  w vdbe frame to 
2b890 65 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20  execute in */.  
2b8a0 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f  SubProgram *pPro
2b8b0 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70  gram;   /* Sub-p
2b8c0 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74  rogram to execut
2b8d0 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20  e */.  void *t; 
2b8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2b8f0 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79  * Token identify
2b900 69 6e 67 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a  ing trigger */..
2b910 20 20 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70    pProgram = pOp
2b920 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20  ->p4.pProgram;. 
2b930 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70   pRt = &aMem[pOp
2b940 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
2b950 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30   pProgram->nOp>0
2b960 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74   );.  .  /* If t
2b970 68 65 20 70 35 20 66 6c 61 67 20 69 73 20 63 6c  he p5 flag is cl
2b980 65 61 72 2c 20 74 68 65 6e 20 72 65 63 75 72 73  ear, then recurs
2b990 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  ive invocation o
2b9a0 66 20 74 72 69 67 67 65 72 73 20 69 73 20 0a 20  f triggers is . 
2b9b0 20 2a 2a 20 64 69 73 61 62 6c 65 64 20 66 6f 72   ** disabled for
2b9c0 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61   backwards compa
2b9d0 74 69 62 69 6c 69 74 79 20 28 70 35 20 69 73 20  tibility (p5 is 
2b9e0 73 65 74 20 69 66 20 74 68 69 73 20 73 75 62 2d  set if this sub-
2b9f0 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20  program.  ** is 
2ba00 72 65 61 6c 6c 79 20 61 20 74 72 69 67 67 65 72  really a trigger
2ba10 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e 20  , not a foreign 
2ba20 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20  key action, and 
2ba30 74 68 65 20 66 6c 61 67 20 73 65 74 0a 20 20 2a  the flag set.  *
2ba40 2a 20 61 6e 64 20 63 6c 65 61 72 65 64 20 62 79  * and cleared by
2ba50 20 74 68 65 20 22 50 52 41 47 4d 41 20 72 65 63   the "PRAGMA rec
2ba60 75 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 22  ursive_triggers"
2ba70 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61   command is clea
2ba80 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49  r)..  ** .  ** I
2ba90 74 20 69 73 20 72 65 63 75 72 73 69 76 65 20 69  t is recursive i
2baa0 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69  nvocation of tri
2bab0 67 67 65 72 73 2c 20 61 74 20 74 68 65 20 53 51  ggers, at the SQ
2bac0 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74 20 69 73  L level, that is
2bad0 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e   .  ** disabled.
2bae0 20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73 20 61   In some cases a
2baf0 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20   single trigger 
2bb00 6d 61 79 20 67 65 6e 65 72 61 74 65 20 6d 6f 72  may generate mor
2bb10 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a  e than one .  **
2bb20 20 53 75 62 50 72 6f 67 72 61 6d 20 28 69 66 20   SubProgram (if 
2bb30 74 68 65 20 74 72 69 67 67 65 72 20 6d 61 79 20  the trigger may 
2bb40 62 65 20 65 78 65 63 75 74 65 64 20 77 69 74 68  be executed with
2bb50 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 64   more than one d
2bb60 69 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f  ifferent .  ** O
2bb70 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72  N CONFLICT algor
2bb80 69 74 68 6d 29 2e 20 53 75 62 50 72 6f 67 72 61  ithm). SubProgra
2bb90 6d 20 73 74 72 75 63 74 75 72 65 73 20 61 73 73  m structures ass
2bba0 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 0a 20  ociated with a. 
2bbb0 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69 67 67   ** single trigg
2bbc0 65 72 20 61 6c 6c 20 68 61 76 65 20 74 68 65 20  er all have the 
2bbd0 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74  same value for t
2bbe0 68 65 20 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f  he SubProgram.to
2bbf0 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61 62  ken .  ** variab
2bc00 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f  le.  */.  if( pO
2bc10 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74 20 3d  p->p5 ){.    t =
2bc20 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e   pProgram->token
2bc30 3b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65  ;.    for(pFrame
2bc40 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61  =p->pFrame; pFra
2bc50 6d 65 20 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f  me && pFrame->to
2bc60 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70  ken!=t; pFrame=p
2bc70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
2bc80 0a 20 20 20 20 69 66 28 20 70 46 72 61 6d 65 20  .    if( pFrame 
2bc90 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20  ) break;.  }..  
2bca0 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64  if( p->nFrame>=d
2bcb0 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
2bcc0 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44  _LIMIT_TRIGGER_D
2bcd0 45 50 54 48 5d 20 29 7b 0a 20 20 20 20 72 63 20  EPTH] ){.    rc 
2bce0 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
2bcf0 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
2bd00 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
2bd10 2c 20 64 62 2c 20 22 74 6f 6f 20 6d 61 6e 79 20  , db, "too many 
2bd20 6c 65 76 65 6c 73 20 6f 66 20 74 72 69 67 67 65  levels of trigge
2bd30 72 20 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20  r recursion");. 
2bd40 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
2bd50 20 2f 2a 20 52 65 67 69 73 74 65 72 20 70 52 74   /* Register pRt
2bd60 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
2bd70 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71  e the memory req
2bd80 75 69 72 65 64 20 74 6f 20 73 61 76 65 20 74 68  uired to save th
2bd90 65 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20  e state.  ** of 
2bda0 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 67  the current prog
2bdb0 72 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d  ram, and the mem
2bdc0 6f 72 79 20 72 65 71 75 69 72 65 64 20 61 74 20  ory required at 
2bdd0 72 75 6e 74 69 6d 65 20 74 6f 20 65 78 65 63 75  runtime to execu
2bde0 74 65 0a 20 20 2a 2a 20 74 68 65 20 74 72 69 67  te.  ** the trig
2bdf0 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 49 66 20  ger program. If 
2be00 74 68 69 73 20 74 72 69 67 67 65 72 20 68 61 73  this trigger has
2be10 20 62 65 65 6e 20 66 69 72 65 64 20 62 65 66 6f   been fired befo
2be20 72 65 2c 20 74 68 65 6e 20 70 52 74 20 0a 20 20  re, then pRt .  
2be30 2a 2a 20 69 73 20 61 6c 72 65 61 64 79 20 61 6c  ** is already al
2be40 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65 72 77 69  located. Otherwi
2be50 73 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20 69  se, it must be i
2be60 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a  nitialized.  */.
2be70 20 20 69 66 28 20 28 70 52 74 2d 3e 66 6c 61 67    if( (pRt->flag
2be80 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20  s&MEM_Frame)==0 
2be90 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50 72 6f  ){.    /* SubPro
2bea0 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74  gram.nMem is set
2beb0 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
2bec0 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75  f memory cells u
2bed0 73 65 64 20 62 79 20 74 68 65 20 0a 20 20 20 20  sed by the .    
2bee0 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f 72 65  ** program store
2bef0 64 20 69 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e  d in SubProgram.
2bf00 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61 73 20  aOp. As well as 
2bf10 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72  these, one memor
2bf20 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73  y.    ** cell is
2bf30 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 61   required for ea
2bf40 63 68 20 63 75 72 73 6f 72 20 75 73 65 64 20 62  ch cursor used b
2bf50 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 53  y the program. S
2bf60 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20  et local.    ** 
2bf70 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61  variable nMem (a
2bf80 6e 64 20 6c 61 74 65 72 2c 20 56 64 62 65 46 72  nd later, VdbeFr
2bf90 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74  ame.nChildMem) t
2bfa0 6f 20 74 68 69 73 20 76 61 6c 75 65 2e 0a 20 20  o this value..  
2bfb0 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20    */.    nMem = 
2bfc0 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b  pProgram->nMem +
2bfd0 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b   pProgram->nCsr;
2bfe0 0a 20 20 20 20 6e 42 79 74 65 20 3d 20 52 4f 55  .    nByte = ROU
2bff0 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 46  ND8(sizeof(VdbeF
2c000 72 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20 20  rame)).         
2c010 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69       + nMem * si
2c020 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20 20  zeof(Mem).      
2c030 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72          + pProgr
2c040 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f  am->nCsr * sizeo
2c050 66 28 56 64 62 65 43 75 72 73 6f 72 20 2a 29 0a  f(VdbeCursor *).
2c060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
2c070 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 20  pProgram->nOnce 
2c080 2a 20 73 69 7a 65 6f 66 28 75 38 29 3b 0a 20 20  * sizeof(u8);.  
2c090 20 20 70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74    pFrame = sqlit
2c0a0 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64  e3DbMallocZero(d
2c0b0 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 69  b, nByte);.    i
2c0c0 66 28 20 21 70 46 72 61 6d 65 20 29 7b 0a 20 20  f( !pFrame ){.  
2c0d0 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
2c0e0 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
2c0f0 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
2c100 28 70 52 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e  (pRt);.    pRt->
2c110 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d  flags = MEM_Fram
2c120 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70 46  e;.    pRt->u.pF
2c130 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a  rame = pFrame;..
2c140 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20      pFrame->v = 
2c150 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  p;.    pFrame->n
2c160 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b  ChildMem = nMem;
2c170 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68  .    pFrame->nCh
2c180 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67 72 61  ildCsr = pProgra
2c190 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46 72  m->nCsr;.    pFr
2c1a0 61 6d 65 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20  ame->pc = pc;.  
2c1b0 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d    pFrame->aMem =
2c1c0 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46   p->aMem;.    pF
2c1d0 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e  rame->nMem = p->
2c1e0 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65  nMem;.    pFrame
2c1f0 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43  ->apCsr = p->apC
2c200 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  sr;.    pFrame->
2c210 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75  nCursor = p->nCu
2c220 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  rsor;.    pFrame
2c230 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a  ->aOp = p->aOp;.
2c240 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20      pFrame->nOp 
2c250 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46  = p->nOp;.    pF
2c260 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50  rame->token = pP
2c270 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20  rogram->token;. 
2c280 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65     pFrame->aOnce
2c290 46 6c 61 67 20 3d 20 70 2d 3e 61 4f 6e 63 65 46  Flag = p->aOnceF
2c2a0 6c 61 67 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  lag;.    pFrame-
2c2b0 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e  >nOnceFlag = p->
2c2c0 6e 4f 6e 63 65 46 6c 61 67 3b 0a 23 69 66 64 65  nOnceFlag;.#ifde
2c2d0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2c2e0 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a  STMT_SCANSTATUS.
2c2f0 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 6e 45 78      pFrame->anEx
2c300 65 63 20 3d 20 70 2d 3e 61 6e 45 78 65 63 3b 0a  ec = p->anExec;.
2c310 23 65 6e 64 69 66 0a 0a 20 20 20 20 70 45 6e 64  #endif..    pEnd
2c320 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d   = &VdbeFrameMem
2c330 28 70 46 72 61 6d 65 29 5b 70 46 72 61 6d 65 2d  (pFrame)[pFrame-
2c340 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20  >nChildMem];.   
2c350 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46 72   for(pMem=VdbeFr
2c360 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b 20  ameMem(pFrame); 
2c370 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65 6d  pMem!=pEnd; pMem
2c380 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d 2d  ++){.      pMem-
2c390 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64  >flags = MEM_Und
2c3a0 65 66 69 6e 65 64 3b 0a 20 20 20 20 20 20 70 4d  efined;.      pM
2c3b0 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20  em->db = db;.   
2c3c0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
2c3d0 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e  pFrame = pRt->u.
2c3e0 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73 65  pFrame;.    asse
2c3f0 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d  rt( pProgram->nM
2c400 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  em+pProgram->nCs
2c410 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  r==pFrame->nChil
2c420 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73 73 65  dMem );.    asse
2c430 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  rt( pProgram->nC
2c440 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69  sr==pFrame->nChi
2c450 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73  ldCsr );.    ass
2c460 65 72 74 28 20 70 63 3d 3d 70 46 72 61 6d 65 2d  ert( pc==pFrame-
2c470 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d  >pc );.  }..  p-
2c480 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72  >nFrame++;.  pFr
2c490 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70  ame->pParent = p
2c4a0 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61  ->pFrame;.  pFra
2c4b0 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  me->lastRowid = 
2c4c0 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46 72  lastRowid;.  pFr
2c4d0 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70  ame->nChange = p
2c4e0 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 46 72  ->nChange;.  pFr
2c4f0 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67 65 20 3d  ame->nDbChange =
2c500 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67 65 3b   p->db->nChange;
2c510 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  .  p->nChange = 
2c520 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d  0;.  p->pFrame =
2c530 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d   pFrame;.  p->aM
2c540 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26 56 64 62  em = aMem = &Vdb
2c550 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65  eFrameMem(pFrame
2c560 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d  )[-1];.  p->nMem
2c570 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c   = pFrame->nChil
2c580 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73  dMem;.  p->nCurs
2c590 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65  or = (u16)pFrame
2c5a0 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70  ->nChildCsr;.  p
2c5b0 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65 43  ->apCsr = (VdbeC
2c5c0 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70  ursor **)&aMem[p
2c5d0 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e  ->nMem+1];.  p->
2c5e0 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f  aOp = aOp = pPro
2c5f0 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e  gram->aOp;.  p->
2c600 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  nOp = pProgram->
2c610 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e 63 65 46  nOp;.  p->aOnceF
2c620 6c 61 67 20 3d 20 28 75 38 20 2a 29 26 70 2d 3e  lag = (u8 *)&p->
2c630 61 70 43 73 72 5b 70 2d 3e 6e 43 75 72 73 6f 72  apCsr[p->nCursor
2c640 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61  ];.  p->nOnceFla
2c650 67 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  g = pProgram->nO
2c660 6e 63 65 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nce;.#ifdef SQLI
2c670 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
2c680 43 41 4e 53 54 41 54 55 53 0a 20 20 70 2d 3e 61  CANSTATUS.  p->a
2c690 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65 6e 64 69  nExec = 0;.#endi
2c6a0 66 0a 20 20 70 63 20 3d 20 2d 31 3b 0a 20 20 6d  f.  pc = -1;.  m
2c6b0 65 6d 73 65 74 28 70 2d 3e 61 4f 6e 63 65 46 6c  emset(p->aOnceFl
2c6c0 61 67 2c 20 30 2c 20 70 2d 3e 6e 4f 6e 63 65 46  ag, 0, p->nOnceF
2c6d0 6c 61 67 29 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a  lag);..  break;.
2c6e0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61  }../* Opcode: Pa
2c6f0 72 61 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ram P1 P2 * * *.
2c700 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2c710 65 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20 70  e is only ever p
2c720 72 65 73 65 6e 74 20 69 6e 20 73 75 62 2d 70 72  resent in sub-pr
2c730 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64 20 76 69  ograms called vi
2c740 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f  a the .** OP_Pro
2c750 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e  gram instruction
2c760 2e 20 43 6f 70 79 20 61 20 76 61 6c 75 65 20 63  . Copy a value c
2c770 75 72 72 65 6e 74 6c 79 20 73 74 6f 72 65 64 20  urrently stored 
2c780 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20  in a memory .** 
2c790 63 65 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c  cell of the call
2c7a0 69 6e 67 20 28 70 61 72 65 6e 74 29 20 66 72 61  ing (parent) fra
2c7b0 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e  me to cell P2 in
2c7c0 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61   the current fra
2c7d0 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65 73 73 20  mes .** address 
2c7e0 73 70 61 63 65 2e 20 54 68 69 73 20 69 73 20 75  space. This is u
2c7f0 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70  sed by trigger p
2c800 72 6f 67 72 61 6d 73 20 74 6f 20 61 63 63 65 73  rograms to acces
2c810 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20  s the new.* .** 
2c820 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73  and old.* values
2c830 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72  ..**.** The addr
2c840 65 73 73 20 6f 66 20 74 68 65 20 63 65 6c 6c 20  ess of the cell 
2c850 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 66 72  in the parent fr
2c860 61 6d 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ame is determine
2c870 64 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74  d by adding.** t
2c880 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
2c890 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  P1 argument to t
2c8a0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
2c8b0 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  P1 argument to t
2c8c0 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50  he.** calling OP
2c8d0 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63  _Program instruc
2c8e0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
2c8f0 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20 20 20 20  _Param: {       
2c900 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
2c910 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65  elease */.  Vdbe
2c920 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20  Frame *pFrame;. 
2c930 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 46 72   Mem *pIn;.  pFr
2c940 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ame = p->pFrame;
2c950 0a 20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65  .  pIn = &pFrame
2c960 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b  ->aMem[pOp->p1 +
2c970 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72   pFrame->aOp[pFr
2c980 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20  ame->pc].p1];   
2c990 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2c9a0 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
2c9b0 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65  t, pIn, MEM_Ephe
2c9c0 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  m);.  break;.}..
2c9d0 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65  #endif /* #ifnde
2c9e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
2c9f0 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65  IGGER */..#ifnde
2ca00 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
2ca10 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63  REIGN_KEY./* Opc
2ca20 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50  ode: FkCounter P
2ca30 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
2ca40 6e 6f 70 73 69 73 3a 20 66 6b 63 74 72 5b 50 31  nopsis: fkctr[P1
2ca50 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72  ]+=P2.**.** Incr
2ca60 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74 72 61  ement a "constra
2ca70 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62 79 20  int counter" by 
2ca80 50 32 20 28 50 32 20 6d 61 79 20 62 65 20 6e 65  P2 (P2 may be ne
2ca90 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69  gative or positi
2caa0 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73  ve)..** If P1 is
2cab0 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64   non-zero, the d
2cac0 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69  atabase constrai
2cad0 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e  nt counter is in
2cae0 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64  cremented .** (d
2caf0 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20  eferred foreign 
2cb00 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29  key constraints)
2cb10 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  . Otherwise, if 
2cb20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20  P1 is zero, the 
2cb30 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  .** statement co
2cb40 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65  unter is increme
2cb50 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74 65 20  nted (immediate 
2cb60 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
2cb70 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73  traints)..*/.cas
2cb80 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20  e OP_FkCounter: 
2cb90 7b 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67  {.  if( db->flag
2cba0 73 20 26 20 53 51 4c 49 54 45 5f 44 65 66 65 72  s & SQLITE_Defer
2cbb0 46 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e  FKs ){.    db->n
2cbc0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20  DeferredImmCons 
2cbd0 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65  += pOp->p2;.  }e
2cbe0 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 31 20  lse if( pOp->p1 
2cbf0 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65  ){.    db->nDefe
2cc00 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d  rredCons += pOp-
2cc10 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  >p2;.  }else{.  
2cc20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69    p->nFkConstrai
2cc30 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  nt += pOp->p2;. 
2cc40 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
2cc50 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65  * Opcode: FkIfZe
2cc60 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ro P1 P2 * * *.*
2cc70 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 66  * Synopsis: if f
2cc80 6b 63 74 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f  kctr[P1]==0 goto
2cc90 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f   P2.**.** This o
2cca0 70 63 6f 64 65 20 74 65 73 74 73 20 69 66 20 61  pcode tests if a
2ccb0 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
2ccc0 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20  straint-counter 
2ccd0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72  is currently zer
2cce0 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d  o..** If so, jum
2ccf0 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
2cd00 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
2cd10 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
2cd20 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73  the next .** ins
2cd30 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
2cd40 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P1 is non-zer
2cd50 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a 75 6d 70  o, then the jump
2cd60 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
2cd70 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72   database constr
2cd80 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20  aint-counter.** 
2cd90 69 73 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65  is zero (the one
2cda0 20 74 68 61 74 20 63 6f 75 6e 74 73 20 64 65 66   that counts def
2cdb0 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
2cdc0 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66   violations). If
2cdd0 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20   P1 is.** zero, 
2cde0 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
2cdf0 6e 20 69 66 20 74 68 65 20 73 74 61 74 65 6d 65  n if the stateme
2ce00 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f  nt constraint-co
2ce10 75 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a  unter is zero.**
2ce20 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65   (immediate fore
2ce30 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
2ce40 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a  nt violations)..
2ce50 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a  */.case OP_FkIfZ
2ce60 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ero: {         /
2ce70 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20  * jump */.  if( 
2ce80 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 56  pOp->p1 ){.    V
2ce90 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 64  dbeBranchTaken(d
2cea0 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
2ceb0 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65  ==0 && db->nDefe
2cec0 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20  rredImmCons==0, 
2ced0 32 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  2);.    if( db->
2cee0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30  nDeferredCons==0
2cef0 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
2cf00 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 70 63  dImmCons==0 ) pc
2cf10 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
2cf20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42  }else{.    VdbeB
2cf30 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 6e 46  ranchTaken(p->nF
2cf40 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26  kConstraint==0 &
2cf50 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
2cf60 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20  mmCons==0, 2);. 
2cf70 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e     if( p->nFkCon
2cf80 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62  straint==0 && db
2cf90 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
2cfa0 6e 73 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f 70  ns==0 ) pc = pOp
2cfb0 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72  ->p2-1;.  }.  br
2cfc0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2cfd0 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f   #ifndef SQLITE_
2cfe0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2cff0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
2d000 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
2d010 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65  REMENT./* Opcode
2d020 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a  : MemMax P1 P2 *
2d030 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2d040 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50 31  : r[P1]=max(r[P1
2d050 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 50  ],r[P2]).**.** P
2d060 31 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  1 is a register 
2d070 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  in the root fram
2d080 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68  e of this VM (th
2d090 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a  e root frame is.
2d0a0 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f  ** different fro
2d0b0 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72  m the current fr
2d0c0 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73 74  ame if this inst
2d0d0 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67  ruction is being
2d0e0 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74   executed.** wit
2d0f0 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61  hin a sub-progra
2d100 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75  m). Set the valu
2d110 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  e of register P1
2d120 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   to the maximum 
2d130 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65  of .** its curre
2d140 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65  nt value and the
2d150 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
2d160 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  er P2..**.** Thi
2d170 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68  s instruction th
2d180 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66  rows an error if
2d190 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
2d1a0 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c   is not initiall
2d1b0 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e  y.** an integer.
2d1c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d  .*/.case OP_MemM
2d1d0 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  ax: {        /* 
2d1e0 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61  in2 */.  VdbeFra
2d1f0 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66  me *pFrame;.  if
2d200 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20  ( p->pFrame ){. 
2d210 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d     for(pFrame=p-
2d220 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d  >pFrame; pFrame-
2d230 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65  >pParent; pFrame
2d240 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74  =pFrame->pParent
2d250 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 70  );.    pIn1 = &p
2d260 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d  Frame->aMem[pOp-
2d270 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  >p1];.  }else{. 
2d280 20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b     pIn1 = &aMem[
2d290 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20  pOp->p1];.  }.  
2d2a0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
2d2b0 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71  id(pIn1) );.  sq
2d2c0 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
2d2d0 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  gerify(pIn1);.  
2d2e0 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
2d2f0 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2];.  sqlite3
2d300 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
2d310 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70  y(pIn2);.  if( p
2d320 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75  In1->u.i<pIn2->u
2d330 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75  .i){.    pIn1->u
2d340 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a  .i = pIn2->u.i;.
2d350 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2d360 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2d370 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
2d380 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  NT */../* Opcode
2d390 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20 2a 20  : IfPos P1 P2 * 
2d3a0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2d3b0 20 69 66 20 72 5b 50 31 5d 3e 30 20 67 6f 74 6f   if r[P1]>0 goto
2d3c0 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65   P2.**.** If the
2d3d0 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
2d3e0 65 72 20 50 31 20 69 73 20 31 20 6f 72 20 67 72  er P1 is 1 or gr
2d3f0 65 61 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50  eater, jump to P
2d400 32 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  2..**.** It is i
2d410 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68  llegal to use th
2d420 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
2d430 6e 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  n a register tha
2d440 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f  t does.** not co
2d450 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
2d460 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  .  An assertion 
2d470 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c  fault will resul
2d480 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f  t if you try..*/
2d490 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20  .case OP_IfPos: 
2d4a0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
2d4b0 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
2d4c0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2d4d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
2d4e0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
2d4f0 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
2d500 61 6b 65 6e 28 20 70 49 6e 31 2d 3e 75 2e 69 3e  aken( pIn1->u.i>
2d510 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  0, 2);.  if( pIn
2d520 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20  1->u.i>0 ){.    
2d530 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
2d540 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
2d550 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
2d560 4e 65 67 20 50 31 20 50 32 20 50 33 20 2a 20 2a  Neg P1 P2 P3 * *
2d570 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
2d580 50 31 5d 2b 3d 50 33 2c 20 69 66 20 72 5b 50 31  P1]+=P3, if r[P1
2d590 5d 3c 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  ]<0 goto P2.**.*
2d5a0 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75  * Register P1 mu
2d5b0 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  st contain an in
2d5c0 74 65 67 65 72 2e 20 20 41 64 64 20 6c 69 74 65  teger.  Add lite
2d5d0 72 61 6c 20 50 33 20 74 6f 20 74 68 65 20 76 61  ral P3 to the va
2d5e0 6c 75 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  lue in.** regist
2d5f0 65 72 20 50 31 20 74 68 65 6e 20 69 66 20 74 68  er P1 then if th
2d600 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
2d610 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20 74  ter P1 is less t
2d620 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74  han zero, jump t
2d630 6f 20 50 32 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f  o P2. .*/.case O
2d640 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20 20 20  P_IfNeg: {      
2d650 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
2d660 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
2d670 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2d680 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
2d690 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 49  &MEM_Int );.  pI
2d6a0 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e  n1->u.i += pOp->
2d6b0 70 33 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  p3;.  VdbeBranch
2d6c0 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c  Taken(pIn1->u.i<
2d6d0 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  0, 2);.  if( pIn
2d6e0 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20 20 20 20  1->u.i<0 ){.    
2d6f0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
2d700 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
2d710 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
2d720 5a 65 72 6f 20 50 31 20 50 32 20 50 33 20 2a 20  Zero P1 P2 P3 * 
2d730 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
2d740 5b 50 31 5d 2b 3d 50 33 2c 20 69 66 20 72 5b 50  [P1]+=P3, if r[P
2d750 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a  1]==0 goto P2.**
2d760 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
2d770 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e   P1 must contain
2d780 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 64   an integer.  Ad
2d790 64 20 6c 69 74 65 72 61 6c 20 50 33 20 74 6f 20  d literal P3 to 
2d7a0 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20  the.** value in 
2d7b0 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 49 66  register P1.  If
2d7c0 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 65   the result is e
2d7d0 78 61 63 74 6c 79 20 30 2c 20 6a 75 6d 70 20 74  xactly 0, jump t
2d7e0 6f 20 50 32 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f  o P2. .*/.case O
2d7f0 50 5f 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20  P_IfZero: {     
2d800 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
2d810 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
2d820 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
2d830 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
2d840 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70  s&MEM_Int );.  p
2d850 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d  In1->u.i += pOp-
2d860 3e 70 33 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  >p3;.  VdbeBranc
2d870 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69  hTaken(pIn1->u.i
2d880 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  ==0, 2);.  if( p
2d890 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20  In1->u.i==0 ){. 
2d8a0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
2d8b0 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
2d8c0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2d8d0 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33   AggStep * P2 P3
2d8e0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
2d8f0 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20  is: accum=r[P3] 
2d900 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a  step(r[P2@P5]).*
2d910 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
2d920 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66   step function f
2d930 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e  or an aggregate.
2d940 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f    The.** functio
2d950 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e  n has P5 argumen
2d960 74 73 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f  ts.   P4 is a po
2d970 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e  inter to the Fun
2d980 63 44 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72  cDef.** structur
2d990 65 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73  e that specifies
2d9a0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20   the function.  
2d9b0 55 73 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  Use register.** 
2d9c0 50 33 20 61 73 20 74 68 65 20 61 63 63 75 6d 75  P3 as the accumu
2d9d0 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  lator..**.** The
2d9e0 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72   P5 arguments ar
2d9f0 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67  e taken from reg
2da00 69 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73  ister P2 and its
2da10 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a  .** successors..
2da20 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74  */.case OP_AggSt
2da30 65 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20  ep: {.  int n;. 
2da40 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70   int i;.  Mem *p
2da50 4d 65 6d 3b 0a 20 20 4d 65 6d 20 2a 70 52 65 63  Mem;.  Mem *pRec
2da60 3b 0a 20 20 4d 65 6d 20 74 3b 0a 20 20 73 71 6c  ;.  Mem t;.  sql
2da70 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78  ite3_context ctx
2da80 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ;.  sqlite3_valu
2da90 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20  e **apVal;..  n 
2daa0 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73  = pOp->p5;.  ass
2dab0 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70  ert( n>=0 );.  p
2dac0 52 65 63 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Rec = &aMem[pOp-
2dad0 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c 20 3d 20  >p2];.  apVal = 
2dae0 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65  p->apArg;.  asse
2daf0 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d  rt( apVal || n==
2db00 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  0 );.  for(i=0; 
2db10 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b  i<n; i++, pRec++
2db20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ){.    assert( m
2db30 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29 20  emIsValid(pRec) 
2db40 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20  );.    apVal[i] 
2db50 3d 20 70 52 65 63 3b 0a 20 20 20 20 6d 65 6d 41  = pRec;.    memA
2db60 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
2db70 70 52 65 63 29 3b 0a 20 20 7d 0a 20 20 63 74 78  pRec);.  }.  ctx
2db80 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34  .pFunc = pOp->p4
2db90 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73 65 72 74  .pFunc;.  assert
2dba0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
2dbb0 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
2dbc0 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
2dbd0 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20 70 4d 65    ctx.pMem = pMe
2dbe0 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
2dbf0 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b  3];.  pMem->n++;
2dc00 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2dc10 6d 49 6e 69 74 28 26 74 2c 20 64 62 2c 20 4d 45  mInit(&t, db, ME
2dc20 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 63 74 78 2e 70  M_Null);.  ctx.p
2dc30 4f 75 74 20 3d 20 26 74 3b 0a 20 20 63 74 78 2e  Out = &t;.  ctx.
2dc40 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63  isError = 0;.  c
2dc50 74 78 2e 70 56 64 62 65 20 3d 20 70 3b 0a 20 20  tx.pVdbe = p;.  
2dc60 63 74 78 2e 69 4f 70 20 3d 20 70 63 3b 0a 20 20  ctx.iOp = pc;.  
2dc70 63 74 78 2e 73 6b 69 70 46 6c 61 67 20 3d 20 30  ctx.skipFlag = 0
2dc80 3b 0a 20 20 28 63 74 78 2e 70 46 75 6e 63 2d 3e  ;.  (ctx.pFunc->
2dc90 78 53 74 65 70 29 28 26 63 74 78 2c 20 6e 2c 20  xStep)(&ctx, n, 
2dca0 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20  apVal); /* IMP: 
2dcb0 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f  R-24505-23230 */
2dcc0 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72  .  if( ctx.isErr
2dcd0 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  or ){.    sqlite
2dce0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2dcf0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
2dd00 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
2dd10 74 65 78 74 28 26 74 29 29 3b 0a 20 20 20 20 72  text(&t));.    r
2dd20 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b  c = ctx.isError;
2dd30 0a 20 20 7d 0a 20 20 69 66 28 20 63 74 78 2e 73  .  }.  if( ctx.s
2dd40 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20 20 20 61  kipFlag ){.    a
2dd50 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
2dd60 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65  pcode==OP_CollSe
2dd70 71 20 29 3b 0a 20 20 20 20 69 20 3d 20 70 4f 70  q );.    i = pOp
2dd80 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 69 66 28  [-1].p1;.    if(
2dd90 20 69 20 29 20 73 71 6c 69 74 65 33 56 64 62 65   i ) sqlite3Vdbe
2dda0 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
2ddb0 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 7d 0a 20 20  m[i], 1);.  }.  
2ddc0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
2ddd0 6c 65 61 73 65 28 26 74 29 3b 0a 20 20 62 72 65  lease(&t);.  bre
2dde0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2ddf0 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32  : AggFinal P1 P2
2de00 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
2de10 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d  sis: accum=r[P1]
2de20 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63   N=P2.**.** Exec
2de30 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65  ute the finalize
2de40 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  r function for a
2de50 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 50 31  n aggregate.  P1
2de60 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72   is.** the memor
2de70 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
2de80 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74  is the accumulat
2de90 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67 72 65  or for the aggre
2dea0 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69  gate..**.** P2 i
2deb0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
2dec0 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74  arguments that t
2ded0 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
2dee0 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34   takes and.** P4
2def0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
2df00 20 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72   the FuncDef for
2df10 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20   this function. 
2df20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d   The P2.** argum
2df30 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20  ent is not used 
2df40 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20  by this opcode. 
2df50 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72   It is only ther
2df60 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74  e to disambiguat
2df70 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74  e.** functions t
2df80 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72  hat can take var
2df90 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20  ying numbers of 
2dfa0 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a  arguments.  The.
2dfb0 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69  ** P4 argument i
2dfc0 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f  s only needed fo
2dfd0 72 20 74 68 65 20 64 65 67 65 6e 65 72 61 74 65  r the degenerate
2dfe0 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74   case where.** t
2dff0 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
2e000 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75   was not previou
2e010 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63  sly called..*/.c
2e020 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a  ase OP_AggFinal:
2e030 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a   {.  Mem *pMem;.
2e040 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2e050 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d  1>0 && pOp->p1<=
2e060 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
2e070 73 6f 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d  sor) );.  pMem =
2e080 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2e090 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d  .  assert( (pMem
2e0a0 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f  ->flags & ~(MEM_
2e0b0 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d  Null|MEM_Agg))==
2e0c0 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
2e0d0 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69  te3VdbeMemFinali
2e0e0 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34  ze(pMem, pOp->p4
2e0f0 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72  .pFunc);.  if( r
2e100 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  c ){.    sqlite3
2e110 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2e120 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
2e130 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
2e140 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a  ext(pMem));.  }.
2e150 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
2e160 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d  ngeEncoding(pMem
2e170 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55  , encoding);.  U
2e180 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
2e190 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20  ZE(pMem);.  if( 
2e1a0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
2e1b0 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20  oBig(pMem) ){.  
2e1c0 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
2e1d0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2e1e0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2e1f0 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64  MIT_WAL./* Opcod
2e200 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31  e: Checkpoint P1
2e210 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
2e220 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61   Checkpoint data
2e230 62 61 73 65 20 50 31 2e 20 54 68 69 73 20 69 73  base P1. This is
2e240 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69   a no-op if P1 i
2e250 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
2e260 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20  in.** WAL mode. 
2e270 50 61 72 61 6d 65 74 65 72 20 50 32 20 69 73 20  Parameter P2 is 
2e280 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48  one of SQLITE_CH
2e290 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45  ECKPOINT_PASSIVE
2e2a0 2c 20 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41  , FULL,.** RESTA
2e2b0 52 54 2c 20 6f 72 20 54 52 55 4e 43 41 54 45 2e  RT, or TRUNCATE.
2e2c0 20 20 57 72 69 74 65 20 31 20 6f 72 20 30 20 69    Write 1 or 0 i
2e2d0 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74  nto mem[P3] if t
2e2e0 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65  he checkpoint re
2e2f0 74 75 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f  turns.** SQLITE_
2e300 42 55 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73  BUSY or not, res
2e310 70 65 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74  pectively.  Writ
2e320 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
2e330 70 61 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20  pages in the.** 
2e340 57 41 4c 20 61 66 74 65 72 20 74 68 65 20 63 68  WAL after the ch
2e350 65 63 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65  eckpoint into me
2e360 6d 5b 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20  m[P3+1] and the 
2e370 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a  number of pages.
2e380 2a 2a 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68  ** in the WAL th
2e390 61 74 20 68 61 76 65 20 62 65 65 6e 20 63 68 65  at have been che
2e3a0 63 6b 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20  ckpointed after 
2e3b0 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a  the checkpoint.*
2e3c0 2a 20 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f  * completes into
2e3d0 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77   mem[P3+2].  How
2e3e0 65 76 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72  ever on an error
2e3f0 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a  , mem[P3+1] and.
2e400 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65  ** mem[P3+2] are
2e410 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
2e420 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  -1..*/.case OP_C
2e430 68 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69  heckpoint: {.  i
2e440 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
2e450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2e460 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
2e470 2f 0a 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b  /.  int aRes[3];
2e480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e490 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a      /* Results *
2e4a0 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
2e4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e4c0 20 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73      /* Write res
2e4d0 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20  ults here */..  
2e4e0 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
2e4f0 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73  nly==0 );.  aRes
2e500 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b  [0] = 0;.  aRes[
2e510 31 5d 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d  1] = aRes[2] = -
2e520 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  1;.  assert( pOp
2e530 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
2e540 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a  CKPOINT_PASSIVE.
2e550 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
2e560 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
2e570 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20  OINT_FULL.      
2e580 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c   || pOp->p2==SQL
2e590 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52  ITE_CHECKPOINT_R
2e5a0 45 53 54 41 52 54 0a 20 20 20 20 20 20 20 7c 7c  ESTART.       ||
2e5b0 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
2e5c0 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e  _CHECKPOINT_TRUN
2e5d0 43 41 54 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d  CATE.  );.  rc =
2e5e0 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
2e5f0 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  nt(db, pOp->p1, 
2e600 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31  pOp->p2, &aRes[1
2e610 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20  ], &aRes[2]);.  
2e620 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  if( rc==SQLITE_B
2e630 55 53 59 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  USY ){.    rc = 
2e640 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61  SQLITE_OK;.    a
2e650 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a  Res[0] = 1;.  }.
2e660 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20    for(i=0, pMem 
2e670 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2e680 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d  ; i<3; i++, pMem
2e690 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ++){.    sqlite3
2e6a0 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
2e6b0 70 4d 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b  pMem, (i64)aRes[
2e6c0 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62  i]);.  }    .  b
2e6d0 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69  reak;.};  .#endi
2e6e0 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
2e6f0 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a  E_OMIT_PRAGMA./*
2e700 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c   Opcode: Journal
2e710 4d 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a 20  Mode P1 P2 P3 * 
2e720 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74  *.**.** Change t
2e730 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  he journal mode 
2e740 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 20 74  of database P1 t
2e750 6f 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65  o P3. P3 must be
2e760 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50   one of the.** P
2e770 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2e780 5f 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20  _XXX values. If 
2e790 63 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e  changing between
2e7a0 20 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c   the various rol
2e7b0 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28  lback.** modes (
2e7c0 64 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65  delete, truncate
2e7d0 2c 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61  , persist, off a
2e7e0 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73  nd memory), this
2e7f0 20 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20   is a simple.** 
2e800 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f  operation. No IO
2e810 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a   is required..**
2e820 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20  .** If changing 
2e830 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57  into or out of W
2e840 41 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63  AL mode the proc
2e850 65 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f  edure is more co
2e860 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a  mplicated..**.**
2e870 20 57 72 69 74 65 20 61 20 73 74 72 69 6e 67 20   Write a string 
2e880 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66  containing the f
2e890 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64  inal journal-mod
2e8a0 65 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  e to register P2
2e8b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75  ..*/.case OP_Jou
2e8c0 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f  rnalMode: {    /
2e8d0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
2e8e0 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  e */.  Btree *pB
2e8f0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
2e900 20 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65 20         /* Btree 
2e910 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61  to change journa
2e920 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50  l mode of */.  P
2e930 61 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20 20  ager *pPager;   
2e940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2e950 2a 20 50 61 67 65 72 20 61 73 73 6f 63 69 61 74  * Pager associat
2e960 65 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a 20  ed with pBt */. 
2e970 20 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20 20   int eNew;      
2e980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e990 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20   /* New journal 
2e9a0 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f  mode */.  int eO
2e9b0 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ld;             
2e9c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
2e9d0 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64   old journal mod
2e9e0 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  e */.#ifndef SQL
2e9f0 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63  ITE_OMIT_WAL.  c
2ea00 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65  onst char *zFile
2ea10 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f  name;          /
2ea20 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61  * Name of databa
2ea30 73 65 20 66 69 6c 65 20 66 6f 72 20 70 50 61 67  se file for pPag
2ea40 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20  er */.#endif..  
2ea50 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  eNew = pOp->p3;.
2ea60 20 20 61 73 73 65 72 74 28 20 65 4e 65 77 3d 3d    assert( eNew==
2ea70 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2ea80 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20 20 20  E_DELETE .      
2ea90 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
2eaa0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e  JOURNALMODE_TRUN
2eab0 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20  CATE .       || 
2eac0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2ead0 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 20  NALMODE_PERSIST 
2eae0 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
2eaf0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2eb00 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c  DE_OFF.       ||
2eb10 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2eb20 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a  RNALMODE_MEMORY.
2eb30 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
2eb40 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2eb50 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20  E_WAL.       || 
2eb60 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2eb70 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20  NALMODE_QUERY.  
2eb80 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2eb90 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2eba0 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
2ebb0 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
2ebc0 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 70 42 74  nly==0 );..  pBt
2ebd0 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
2ebe0 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67 65  p1].pBt;.  pPage
2ebf0 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  r = sqlite3Btree
2ec00 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20 65 4f  Pager(pBt);.  eO
2ec10 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  ld = sqlite3Page
2ec20 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  rGetJournalMode(
2ec30 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28 20 65  pPager);.  if( e
2ec40 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2ec50 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29 20 65  ALMODE_QUERY ) e
2ec60 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66  New = eOld;.  if
2ec70 28 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 4f  ( !sqlite3PagerO
2ec80 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c  kToChangeJournal
2ec90 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29 20 65  Mode(pPager) ) e
2eca0 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66  New = eOld;..#if
2ecb0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2ecc0 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65  _WAL.  zFilename
2ecd0 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46   = sqlite3PagerF
2ece0 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72 2c 20  ilename(pPager, 
2ecf0 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74  1);..  /* Do not
2ed00 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69 74   allow a transit
2ed10 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d  ion to journal_m
2ed20 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61 20 64 61  ode=WAL for a da
2ed30 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74  tabase.  ** in t
2ed40 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65  emporary storage
2ed50 20 6f 72 20 69 66 20 74 68 65 20 56 46 53 20 64   or if the VFS d
2ed60 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  oes not support 
2ed70 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20  shared memory . 
2ed80 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d   */.  if( eNew==
2ed90 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2eda0 45 5f 57 41 4c 0a 20 20 20 26 26 20 28 73 71 6c  E_WAL.   && (sql
2edb0 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 46 69  ite3Strlen30(zFi
2edc0 6c 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20 20  lename)==0      
2edd0 20 20 20 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c       /* Temp fil
2ede0 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21  e */.       || !
2edf0 73 71 6c 69 74 65 33 50 61 67 65 72 57 61 6c 53  sqlite3PagerWalS
2ee00 75 70 70 6f 72 74 65 64 28 70 50 61 67 65 72 29  upported(pPager)
2ee10 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64  )   /* No shared
2ee20 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72 74 20  -memory support 
2ee30 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65 77  */.  ){.    eNew
2ee40 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20   = eOld;.  }..  
2ee50 69 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29  if( (eNew!=eOld)
2ee60 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41  .   && (eOld==PA
2ee70 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2ee80 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47  WAL || eNew==PAG
2ee90 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2eea0 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69 66 28  AL).  ){.    if(
2eeb0 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74   !db->autoCommit
2eec0 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61   || db->nVdbeRea
2eed0 64 3e 31 20 29 7b 0a 20 20 20 20 20 20 72 63 20  d>1 ){.      rc 
2eee0 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
2eef0 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
2ef00 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
2ef10 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20  sg, db, .       
2ef20 20 20 20 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67     "cannot chang
2ef30 65 20 25 73 20 77 61 6c 20 6d 6f 64 65 20 66 72  e %s wal mode fr
2ef40 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  om within a tran
2ef50 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20  saction",.      
2ef60 20 20 20 20 28 65 4e 65 77 3d 3d 50 41 47 45 52      (eNew==PAGER
2ef70 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2ef80 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74   ? "into" : "out
2ef90 20 6f 66 22 29 0a 20 20 20 20 20 20 29 3b 0a 20   of").      );. 
2efa0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2efb0 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20 69  }else{. .      i
2efc0 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a  f( eOld==PAGER_J
2efd0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29  OURNALMODE_WAL )
2efe0 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20  {.        /* If 
2eff0 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65  leaving WAL mode
2f000 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20  , close the log 
2f010 66 69 6c 65 2e 20 49 66 20 73 75 63 63 65 73 73  file. If success
2f020 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20  ful, the call.  
2f030 20 20 20 20 20 20 2a 2a 20 74 6f 20 50 61 67 65        ** to Page
2f040 72 43 6c 6f 73 65 57 61 6c 28 29 20 63 68 65 63  rCloseWal() chec
2f050 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c 65  kpoints and dele
2f060 74 65 73 20 74 68 65 20 77 72 69 74 65 2d 61 68  tes the write-ah
2f070 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20  ead-log .       
2f080 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58 43   ** file. An EXC
2f090 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20  LUSIVE lock may 
2f0a0 73 74 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e  still be held on
2f0b0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2f0c0 6c 65 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 61  le .        ** a
2f0d0 66 74 65 72 20 61 20 73 75 63 63 65 73 73 66 75  fter a successfu
2f0e0 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20 20 20 20  l return. .     
2f0f0 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63     */.        rc
2f100 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 43   = sqlite3PagerC
2f110 6c 6f 73 65 57 61 6c 28 70 50 61 67 65 72 29 3b  loseWal(pPager);
2f120 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d  .        if( rc=
2f130 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2f140 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50          sqlite3P
2f150 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f  agerSetJournalMo
2f160 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29  de(pPager, eNew)
2f170 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
2f180 20 20 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c 64    }else if( eOld
2f190 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2f1a0 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20  ODE_MEMORY ){.  
2f1b0 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20        /* Cannot 
2f1c0 74 72 61 6e 73 69 74 69 6f 6e 20 64 69 72 65 63  transition direc
2f1d0 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20  tly from MEMORY 
2f1e0 74 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64  to WAL.  Use mod
2f1f0 65 20 4f 46 46 0a 20 20 20 20 20 20 20 20 2a 2a  e OFF.        **
2f200 20 61 73 20 61 6e 20 69 6e 74 65 72 6d 65 64 69   as an intermedi
2f210 61 74 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 73  ate */.        s
2f220 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f  qlite3PagerSetJo
2f230 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
2f240 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  , PAGER_JOURNALM
2f250 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20  ODE_OFF);.      
2f260 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70  }.  .      /* Op
2f270 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  en a transaction
2f280 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
2f290 20 66 69 6c 65 2e 20 52 65 67 61 72 64 6c 65 73   file. Regardles
2f2a0 73 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c  s of the journal
2f2b0 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20  .      ** mode, 
2f2c0 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e  this transaction
2f2d0 20 61 6c 77 61 79 73 20 75 73 65 73 20 61 20 72   always uses a r
2f2e0 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e  ollback journal.
2f2f0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
2f300 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
2f310 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42  treeIsInTrans(pB
2f320 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  t)==0 );.      i
2f330 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2f340 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
2f350 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
2f360 56 65 72 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e  Version(pBt, (eN
2f370 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2f380 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20  LMODE_WAL ? 2 : 
2f390 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  1));.      }.   
2f3a0 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a   }.  }.#endif /*
2f3b0 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f   ifndef SQLITE_O
2f3c0 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66  MIT_WAL */..  if
2f3d0 28 20 72 63 20 29 7b 0a 20 20 20 20 65 4e 65 77  ( rc ){.    eNew
2f3e0 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 20 20 65   = eOld;.  }.  e
2f3f0 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 50 61 67  New = sqlite3Pag
2f400 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erSetJournalMode
2f410 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a  (pPager, eNew);.
2f420 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
2f430 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74  pOp->p2];.  pOut
2f440 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74  ->flags = MEM_St
2f450 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d  r|MEM_Static|MEM
2f460 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a  _Term;.  pOut->z
2f470 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74   = (char *)sqlit
2f480 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d  e3JournalModenam
2f490 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d  e(eNew);.  pOut-
2f4a0 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  >n = sqlite3Strl
2f4b0 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20  en30(pOut->z);. 
2f4c0 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
2f4d0 49 54 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69  ITE_UTF8;.  sqli
2f4e0 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
2f4f0 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f  oding(pOut, enco
2f500 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ding);.  break;.
2f510 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  };.#endif /* SQL
2f520 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20  ITE_OMIT_PRAGMA 
2f530 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  */..#if !defined
2f540 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43  (SQLITE_OMIT_VAC
2f550 55 55 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64  UUM) && !defined
2f560 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54  (SQLITE_OMIT_ATT
2f570 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ACH)./* Opcode: 
2f580 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a  Vacuum * * * * *
2f590 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68  .**.** Vacuum th
2f5a0 65 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73  e entire databas
2f5b0 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  e.  This opcode 
2f5c0 77 69 6c 6c 20 63 61 75 73 65 20 6f 74 68 65 72  will cause other
2f5d0 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68   virtual.** mach
2f5e0 69 6e 65 73 20 74 6f 20 62 65 20 63 72 65 61 74  ines to be creat
2f5f0 65 64 20 61 6e 64 20 72 75 6e 2e 20 20 49 74 20  ed and run.  It 
2f600 6d 61 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65  may not be calle
2f610 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a  d from within.**
2f620 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a   a transaction..
2f630 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75  */.case OP_Vacuu
2f640 6d 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  m: {.  assert( p
2f650 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
2f660 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52  .  rc = sqlite3R
2f670 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72  unVacuum(&p->zEr
2f680 72 4d 73 67 2c 20 64 62 29 3b 0a 20 20 62 72 65  rMsg, db);.  bre
2f690 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
2f6a0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2f6b0 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
2f6c0 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  M)./* Opcode: In
2f6d0 63 72 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a  crVacuum P1 P2 *
2f6e0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f   * *.**.** Perfo
2f6f0 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70  rm a single step
2f700 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e   of the incremen
2f710 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65  tal vacuum proce
2f720 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50  dure on.** the P
2f730 31 20 64 61 74 61 62 61 73 65 2e 20 49 66 20 74  1 database. If t
2f740 68 65 20 76 61 63 75 75 6d 20 68 61 73 20 66 69  he vacuum has fi
2f750 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20  nished, jump to 
2f760 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50  instruction.** P
2f770 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61  2. Otherwise, fa
2f780 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
2f790 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
2f7a0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  on..*/.case OP_I
2f7b0 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20  ncrVacuum: {    
2f7c0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
2f7d0 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20   Btree *pBt;..  
2f7e0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2f7f0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
2f800 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
2f810 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
2f820 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
2f830 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74  >p1) );.  assert
2f840 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
2f850 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e   );.  pBt = db->
2f860 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
2f870 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2f880 42 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28  BtreeIncrVacuum(
2f890 70 42 74 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  pBt);.  VdbeBran
2f8a0 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49  chTaken(rc==SQLI
2f8b0 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20 69 66  TE_DONE,2);.  if
2f8c0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e  ( rc==SQLITE_DON
2f8d0 45 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  E ){.    pc = pO
2f8e0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 72  p->p2 - 1;.    r
2f8f0 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
2f900 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2f910 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
2f920 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a   Expire P1 * * *
2f930 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70   *.**.** Cause p
2f940 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65  recompiled state
2f950 6d 65 6e 74 73 20 74 6f 20 65 78 70 69 72 65 2e  ments to expire.
2f960 20 20 57 68 65 6e 20 61 6e 20 65 78 70 69 72 65    When an expire
2f970 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 69  d statement.** i
2f980 73 20 65 78 65 63 75 74 65 64 20 75 73 69 6e 67  s executed using
2f990 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
2f9a0 69 74 20 77 69 6c 6c 20 65 69 74 68 65 72 20 61  it will either a
2f9b0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20  utomatically.** 
2f9c0 72 65 70 72 65 70 61 72 65 20 69 74 73 65 6c 66  reprepare itself
2f9d0 20 28 69 66 20 69 74 20 77 61 73 20 6f 72 69 67   (if it was orig
2f9e0 69 6e 61 6c 6c 79 20 63 72 65 61 74 65 64 20 75  inally created u
2f9f0 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65  sing sqlite3_pre
2fa00 70 61 72 65 5f 76 32 28 29 29 0a 2a 2a 20 6f 72  pare_v2()).** or
2fa10 20 69 74 20 77 69 6c 6c 20 66 61 69 6c 20 77 69   it will fail wi
2fa20 74 68 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  th SQLITE_SCHEMA
2fa30 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69  ..** .** If P1 i
2fa40 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51  s 0, then all SQ
2fa50 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63  L statements bec
2fa60 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49 66 20  ome expired. If 
2fa70 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a  P1 is non-zero,.
2fa80 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65  ** then only the
2fa90 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75   currently execu
2faa0 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69  ting statement i
2fab0 73 20 65 78 70 69 72 65 64 2e 0a 2a 2f 0a 63 61  s expired..*/.ca
2fac0 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a  se OP_Expire: {.
2fad0 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29    if( !pOp->p1 )
2fae0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70  {.    sqlite3Exp
2faf0 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
2fb00 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c  ments(db);.  }el
2fb10 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  se{.    p->expir
2fb20 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  ed = 1;.  }.  br
2fb30 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
2fb40 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
2fb50 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f  ED_CACHE./* Opco
2fb60 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31  de: TableLock P1
2fb70 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
2fb80 79 6e 6f 70 73 69 73 3a 20 69 44 62 3d 50 31 20  ynopsis: iDb=P1 
2fb90 72 6f 6f 74 3d 50 32 20 77 72 69 74 65 3d 50 33  root=P2 write=P3
2fba0 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20  .**.** Obtain a 
2fbb0 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74 69 63  lock on a partic
2fbc0 75 6c 61 72 20 74 61 62 6c 65 2e 20 54 68 69 73  ular table. This
2fbd0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
2fbe0 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 0a 2a  only used when.*
2fbf0 2a 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63  * the shared-cac
2fc00 68 65 20 66 65 61 74 75 72 65 20 69 73 20 65 6e  he feature is en
2fc10 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31  abled. .**.** P1
2fc20 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
2fc30 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e   the database in
2fc40 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f   sqlite3.aDb[] o
2fc50 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  f the database.*
2fc60 2a 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 6c  * on which the l
2fc70 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 2e  ock is acquired.
2fc80 20 20 41 20 72 65 61 64 6c 6f 63 6b 20 69 73 20    A readlock is 
2fc90 6f 62 74 61 69 6e 65 64 20 69 66 20 50 33 3d 3d  obtained if P3==
2fca0 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65 20  0 or.** a write 
2fcb0 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a  lock if P3==1..*
2fcc0 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73  *.** P2 contains
2fcd0 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f   the root-page o
2fce0 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 6c  f the table to l
2fcf0 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f  ock..**.** P4 co
2fd00 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65 72  ntains a pointer
2fd10 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   to the name of 
2fd20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
2fd30 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20 69 73 20  locked. This is 
2fd40 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20  only.** used to 
2fd50 67 65 6e 65 72 61 74 65 20 61 6e 20 65 72 72 6f  generate an erro
2fd60 72 20 6d 65 73 73 61 67 65 20 69 66 20 74 68 65  r message if the
2fd70 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20   lock cannot be 
2fd80 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73  obtained..*/.cas
2fd90 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20  e OP_TableLock: 
2fda0 7b 0a 20 20 75 38 20 69 73 57 72 69 74 65 4c 6f  {.  u8 isWriteLo
2fdb0 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33  ck = (u8)pOp->p3
2fdc0 3b 0a 20 20 69 66 28 20 69 73 57 72 69 74 65 4c  ;.  if( isWriteL
2fdd0 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66  ock || 0==(db->f
2fde0 6c 61 67 73 26 53 51 4c 49 54 45 5f 52 65 61 64  lags&SQLITE_Read
2fdf0 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a  Uncommitted) ){.
2fe00 20 20 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70      int p1 = pOp
2fe10 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73 73 65 72  ->p1; .    asser
2fe20 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31 3c 64  t( p1>=0 && p1<d
2fe30 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61 73  b->nDb );.    as
2fe40 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
2fe50 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
2fe60 31 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  1) );.    assert
2fe70 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30  ( isWriteLock==0
2fe80 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d   || isWriteLock=
2fe90 3d 31 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  =1 );.    rc = s
2fea0 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54  qlite3BtreeLockT
2feb0 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d  able(db->aDb[p1]
2fec0 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69  .pBt, pOp->p2, i
2fed0 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20  sWriteLock);.   
2fee0 20 69 66 28 20 28 72 63 26 30 78 46 46 29 3d 3d   if( (rc&0xFF)==
2fef0 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b  SQLITE_LOCKED ){
2ff00 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
2ff10 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  r *z = pOp->p4.z
2ff20 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  ;.      sqlite3S
2ff30 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2ff40 72 4d 73 67 2c 20 64 62 2c 20 22 64 61 74 61 62  rMsg, db, "datab
2ff50 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63  ase table is loc
2ff60 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20  ked: %s", z);.  
2ff70 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
2ff80 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2ff90 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
2ffa0 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  CACHE */..#ifnde
2ffb0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2ffc0 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2ffd0 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a  code: VBegin * *
2ffe0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2fff0 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65   may be a pointe
30000 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f  r to an sqlite3_
30010 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 20  vtab structure. 
30020 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20  If so, call the 
30030 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f  .** xBegin metho
30040 64 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65  d for that table
30050 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68  ..**.** Also, wh
30060 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20  ether or not P4 
30070 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68  is set, check th
30080 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62  at this is not b
30090 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d  eing called from
300a0 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c  .** within a cal
300b0 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75  lback to a virtu
300c0 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29  al table xSync()
300d0 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69   method. If it i
300e0 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20  s, the error.** 
300f0 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74  code will be set
30100 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   to SQLITE_LOCKE
30110 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42  D..*/.case OP_VB
30120 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65  egin: {.  VTable
30130 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62   *pVTab;.  pVTab
30140 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
30150 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
30160 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56  VtabBegin(db, pV
30170 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61  Tab);.  if( pVTa
30180 62 20 29 20 73 71 6c 69 74 65 33 56 74 61 62 49  b ) sqlite3VtabI
30190 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
301a0 56 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20  VTab->pVtab);.  
301b0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
301c0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
301d0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
301e0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
301f0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
30200 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65  ./* Opcode: VCre
30210 61 74 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ate P1 * * P4 *.
30220 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20  **.** P4 is the 
30230 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61  name of a virtua
30240 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62  l table in datab
30250 61 73 65 20 50 31 2e 20 43 61 6c 6c 20 74 68 65  ase P1. Call the
30260 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64 0a   xCreate method.
30270 2a 2a 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c  ** for that tabl
30280 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43  e..*/.case OP_VC
30290 72 65 61 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20  reate: {.  rc = 
302a0 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
302b0 72 65 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70  reate(db, pOp->p
302c0 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70  1, pOp->p4.z, &p
302d0 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 62 72  ->zErrMsg);.  br
302e0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
302f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
30300 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
30310 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
30320 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
30330 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72  * Opcode: VDestr
30340 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  oy P1 * * P4 *.*
30350 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e  *.** P4 is the n
30360 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ame of a virtual
30370 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61   table in databa
30380 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65  se P1.  Call the
30390 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64   xDestroy method
303a0 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c  .** of that tabl
303b0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44  e..*/.case OP_VD
303c0 65 73 74 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69  estroy: {.  p->i
303d0 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b  nVtabMethod = 2;
303e0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
303f0 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64  tabCallDestroy(d
30400 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
30410 3e 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56  >p4.z);.  p->inV
30420 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20  tabMethod = 0;. 
30430 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
30440 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
30450 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
30460 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
30470 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
30480 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70  E./* Opcode: VOp
30490 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  en P1 * * P4 *.*
304a0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
304b0 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
304c0 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
304d0 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
304e0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31  structure..** P1
304f0 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d   is a cursor num
30500 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ber.  This opcod
30510 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72  e opens a cursor
30520 20 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a   to the virtual.
30530 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f  ** table and sto
30540 72 65 73 20 74 68 61 74 20 63 75 72 73 6f 72 20  res that cursor 
30550 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P1..*/.case O
30560 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62  P_VOpen: {.  Vdb
30570 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20  eCursor *pCur;. 
30580 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
30590 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f  rsor *pVtabCurso
305a0 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
305b0 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69  b *pVtab;.  sqli
305c0 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
305d0 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  ule;..  assert( 
305e0 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
305f0 20 20 70 43 75 72 20 3d 20 30 3b 0a 20 20 70 56    pCur = 0;.  pV
30600 74 61 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20  tabCursor = 0;. 
30610 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34   pVtab = pOp->p4
30620 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20  .pVtab->pVtab;. 
30630 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69   pModule = (sqli
30640 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74  te3_module *)pVt
30650 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61  ab->pModule;.  a
30660 73 73 65 72 74 28 70 56 74 61 62 20 26 26 20 70  ssert(pVtab && p
30670 4d 6f 64 75 6c 65 29 3b 0a 20 20 72 63 20 3d 20  Module);.  rc = 
30680 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70  pModule->xOpen(p
30690 56 74 61 62 2c 20 26 70 56 74 61 62 43 75 72 73  Vtab, &pVtabCurs
306a0 6f 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74  or);.  sqlite3Vt
306b0 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
306c0 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20  , pVtab);.  if( 
306d0 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b  SQLITE_OK==rc ){
306e0 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69  .    /* Initiali
306f0 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  ze sqlite3_vtab_
30700 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73  cursor base clas
30710 73 20 2a 2f 0a 20 20 20 20 70 56 74 61 62 43 75  s */.    pVtabCu
30720 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70 56  rsor->pVtab = pV
30730 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69  tab;..    /* Ini
30740 74 69 61 6c 69 7a 65 20 76 64 62 65 20 63 75 72  tialize vdbe cur
30750 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20  sor object */.  
30760 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74    pCur = allocat
30770 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
30780 70 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20  p1, 0, -1, 0);. 
30790 20 20 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20     if( pCur ){. 
307a0 20 20 20 20 20 70 43 75 72 2d 3e 70 56 74 61 62       pCur->pVtab
307b0 43 75 72 73 6f 72 20 3d 20 70 56 74 61 62 43 75  Cursor = pVtabCu
307c0 72 73 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  rsor;.    }else{
307d0 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f  .      db->mallo
307e0 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20  cFailed = 1;.   
307f0 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f     pModule->xClo
30800 73 65 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b  se(pVtabCursor);
30810 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
30820 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
30830 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
30840 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
30850 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
30860 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
30870 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72   Opcode: VFilter
30880 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
30890 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 70 6c 61  * Synopsis: ipla
308a0 6e 3d 72 5b 50 33 5d 20 7a 70 6c 61 6e 3d 27 50  n=r[P3] zplan='P
308b0 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  4'.**.** P1 is a
308c0 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75   cursor opened u
308d0 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20  sing VOpen.  P2 
308e0 69 73 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f  is an address to
308f0 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74   jump to if.** t
30900 68 65 20 66 69 6c 74 65 72 65 64 20 72 65 73 75  he filtered resu
30910 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e  lt set is empty.
30920 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74  .**.** P4 is eit
30930 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74  her NULL or a st
30940 72 69 6e 67 20 74 68 61 74 20 77 61 73 20 67 65  ring that was ge
30950 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20 78  nerated by the x
30960 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74  BestIndex.** met
30970 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c  hod of the modul
30980 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72 65  e.  The interpre
30990 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34  tation of the P4
309a0 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a   string is left.
309b0 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65  ** to the module
309c0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
309d0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
309e0 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78  de invokes the x
309f0 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e  Filter method on
30a00 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
30a10 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  le specified.** 
30a20 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65  by P1.  The inte
30a30 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70  ger query plan p
30a40 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c  arameter to xFil
30a50 74 65 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ter is stored in
30a60 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e   register.** P3.
30a70 20 52 65 67 69 73 74 65 72 20 50 33 2b 31 20 73   Register P3+1 s
30a80 74 6f 72 65 73 20 74 68 65 20 61 72 67 63 20 70  tores the argc p
30a90 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70  arameter to be p
30aa0 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20  assed to the.** 
30ab0 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20  xFilter method. 
30ac0 52 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e  Registers P3+2..
30ad0 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68  P3+1+argc are th
30ae0 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69  e argc.** additi
30af0 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20  onal parameters 
30b00 77 68 69 63 68 20 61 72 65 20 70 61 73 73 65 64  which are passed
30b10 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61   to.** xFilter a
30b20 73 20 61 72 67 76 2e 20 52 65 67 69 73 74 65 72  s argv. Register
30b30 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72   P3+2 becomes ar
30b40 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65  gv[0] when passe
30b50 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a  d to xFilter..**
30b60 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61  .** A jump is ma
30b70 64 65 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  de to P2 if the 
30b80 72 65 73 75 6c 74 20 73 65 74 20 61 66 74 65 72  result set after
30b90 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64   filtering would
30ba0 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61   be empty..*/.ca
30bb0 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b  se OP_VFilter: {
30bc0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
30bd0 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20  int nArg;.  int 
30be0 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20  iQuery;.  const 
30bf0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
30c00 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a  pModule;.  Mem *
30c10 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70  pQuery;.  Mem *p
30c20 41 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Argc;.  sqlite3_
30c30 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74  vtab_cursor *pVt
30c40 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69  abCursor;.  sqli
30c50 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
30c60 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
30c70 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  Cur;.  int res;.
30c80 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a    int i;.  Mem *
30c90 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65 72  *apArg;..  pQuer
30ca0 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  y = &aMem[pOp->p
30cb0 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70  3];.  pArgc = &p
30cc0 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72  Query[1];.  pCur
30cd0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
30ce0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
30cf0 6d 65 6d 49 73 56 61 6c 69 64 28 70 51 75 65 72  memIsValid(pQuer
30d00 79 29 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52  y) );.  REGISTER
30d10 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
30d20 70 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72  pQuery);.  asser
30d30 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75  t( pCur->pVtabCu
30d40 72 73 6f 72 20 29 3b 0a 20 20 70 56 74 61 62 43  rsor );.  pVtabC
30d50 75 72 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56  ursor = pCur->pV
30d60 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 70 56 74  tabCursor;.  pVt
30d70 61 62 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72  ab = pVtabCursor
30d80 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
30d90 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
30da0 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20  ule;..  /* Grab 
30db0 74 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72  the index number
30dc0 20 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65   and argc parame
30dd0 74 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74  ters */.  assert
30de0 28 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73  ( (pQuery->flags
30df0 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20  &MEM_Int)!=0 && 
30e00 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45  pArgc->flags==ME
30e10 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20  M_Int );.  nArg 
30e20 3d 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e  = (int)pArgc->u.
30e30 69 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69  i;.  iQuery = (i
30e40 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a  nt)pQuery->u.i;.
30e50 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
30e60 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20   xFilter method 
30e70 2a 2f 0a 20 20 7b 0a 20 20 20 20 72 65 73 20 3d  */.  {.    res =
30e80 20 30 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20   0;.    apArg = 
30e90 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 66 6f  p->apArg;.    fo
30ea0 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b  r(i = 0; i<nArg;
30eb0 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70 41   i++){.      apA
30ec0 72 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69  rg[i] = &pArgc[i
30ed0 2b 31 5d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  +1];.    }..    
30ee0 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
30ef0 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d  = 1;.    rc = pM
30f00 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70  odule->xFilter(p
30f10 56 74 61 62 43 75 72 73 6f 72 2c 20 69 51 75 65  VtabCursor, iQue
30f20 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e  ry, pOp->p4.z, n
30f30 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 20  Arg, apArg);.   
30f40 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
30f50 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 0;.    sqlite
30f60 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
30f70 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20  g(p, pVtab);.   
30f80 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
30f90 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  OK ){.      res 
30fa0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28  = pModule->xEof(
30fb0 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
30fc0 20 20 7d 0a 20 20 20 20 56 64 62 65 42 72 61 6e    }.    VdbeBran
30fd0 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
30fe0 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20 29  );.    if( res )
30ff0 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
31000 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a  ->p2 - 1;.    }.
31010 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c    }.  pCur->null
31020 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61  Row = 0;..  brea
31030 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
31040 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
31050 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
31060 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
31070 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
31080 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20  Opcode: VColumn 
31090 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
310a0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
310b0 76 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a 2a  vcolumn(P2).**.*
310c0 2a 20 53 74 6f 72 65 20 74 68 65 20 76 61 6c 75  * Store the valu
310d0 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63  e of the P2-th c
310e0 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  olumn of.** the 
310f0 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74 75  row of the virtu
31100 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68  al-table that th
31110 65 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72 20  e .** P1 cursor 
31120 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69  is pointing to i
31130 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e  nto register P3.
31140 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c  .*/.case OP_VCol
31150 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  umn: {.  sqlite3
31160 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
31170 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
31180 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
31190 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73   Mem *pDest;.  s
311a0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73  qlite3_context s
311b0 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62 65  Context;..  Vdbe
311c0 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70  Cursor *pCur = p
311d0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
311e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72  ;.  assert( pCur
311f0 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b  ->pVtabCursor );
31200 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
31210 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
31220 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
31230 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74  rsor) );.  pDest
31240 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
31250 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
31260 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b  hange(p, pDest);
31270 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c  .  if( pCur->nul
31280 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69  lRow ){.    sqli
31290 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
312a0 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72  l(pDest);.    br
312b0 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62  eak;.  }.  pVtab
312c0 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75   = pCur->pVtabCu
312d0 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
312e0 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
312f0 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
31300 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c  t( pModule->xCol
31310 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28  umn );.  memset(
31320 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69  &sContext, 0, si
31330 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b  zeof(sContext));
31340 0a 20 20 73 43 6f 6e 74 65 78 74 2e 70 4f 75 74  .  sContext.pOut
31350 20 3d 20 70 44 65 73 74 3b 0a 20 20 4d 65 6d 53   = pDest;.  MemS
31360 65 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74  etTypeFlag(pDest
31370 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 72  , MEM_Null);.  r
31380 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f  c = pModule->xCo
31390 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56 74 61 62  lumn(pCur->pVtab
313a0 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e 74 65 78  Cursor, &sContex
313b0 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 73  t, pOp->p2);.  s
313c0 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
313d0 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
313e0 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74 65 78 74  ;.  if( sContext
313f0 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20  .isError ){.    
31400 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73  rc = sContext.is
31410 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c  Error;.  }.  sql
31420 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
31430 63 6f 64 69 6e 67 28 70 44 65 73 74 2c 20 65 6e  coding(pDest, en
31440 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47 49 53  coding);.  REGIS
31450 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
31460 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55 50 44  3, pDest);.  UPD
31470 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
31480 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28 20  (pDest);..  if( 
31490 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
314a0 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20  oBig(pDest) ){. 
314b0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
314c0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
314d0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
314e0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
314f0 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
31500 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
31510 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
31520 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a  e: VNext P1 P2 *
31530 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e   * *.**.** Advan
31540 63 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ce virtual table
31550 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20   P1 to the next 
31560 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c  row in its resul
31570 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d  t set and.** jum
31580 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
31590 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65   P2.  Or, if the
315a0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68   virtual table h
315b0 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68  as reached.** th
315c0 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73  e end of its res
315d0 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61  ult set, then fa
315e0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
315f0 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
31600 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  on..*/.case OP_V
31610 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  Next: {   /* jum
31620 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  p */.  sqlite3_v
31630 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
31640 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
31650 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  le *pModule;.  i
31660 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65 43 75  nt res;.  VdbeCu
31670 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72  rsor *pCur;..  r
31680 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d  es = 0;.  pCur =
31690 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
316a0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
316b0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  ur->pVtabCursor 
316c0 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e  );.  if( pCur->n
316d0 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72  ullRow ){.    br
316e0 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62  eak;.  }.  pVtab
316f0 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75   = pCur->pVtabCu
31700 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
31710 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
31720 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
31730 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78  t( pModule->xNex
31740 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  t );..  /* Invok
31750 65 20 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65  e the xNext() me
31760 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75  thod of the modu
31770 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20  le. There is no 
31780 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  way for the.  **
31790 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c   underlying impl
317a0 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65  ementation to re
317b0 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66  turn an error if
317c0 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69   one occurs duri
317d0 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e  ng.  ** xNext().
317e0 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20   Instead, if an 
317f0 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72  error occurs, tr
31800 75 65 20 69 73 20 72 65 74 75 72 6e 65 64 20 28  ue is returned (
31810 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20  indicating that 
31820 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76  .  ** data is av
31830 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65  ailable) and the
31840 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75   error code retu
31850 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d  rned when xColum
31860 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f  n or.  ** some o
31870 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e  ther method is n
31880 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74  ext invoked on t
31890 68 65 20 73 61 76 65 20 76 69 72 74 75 61 6c 20  he save virtual 
318a0 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20  table cursor..  
318b0 2a 2f 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  */.  p->inVtabMe
318c0 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d  thod = 1;.  rc =
318d0 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28   pModule->xNext(
318e0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
318f0 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d  r);.  p->inVtabM
31900 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 73 71 6c  ethod = 0;.  sql
31910 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
31920 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
31930 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
31940 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73 20 3d  _OK ){.    res =
31950 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70   pModule->xEof(p
31960 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
31970 29 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61  );.  }.  VdbeBra
31980 6e 63 68 54 61 6b 65 6e 28 21 72 65 73 2c 32 29  nchTaken(!res,2)
31990 3b 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b 0a  ;.  if( !res ){.
319a0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
319b0 69 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f  is data, jump to
319c0 20 50 32 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20   P2 */.    pc = 
319d0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
319e0 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f  .  goto check_fo
319f0 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 23  r_interrupt;.}.#
31a00 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
31a10 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
31a20 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
31a30 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
31a40 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
31a50 3a 20 56 52 65 6e 61 6d 65 20 50 31 20 2a 20 2a  : VRename P1 * *
31a60 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
31a70 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
31a80 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f   virtual table o
31a90 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65  bject, an sqlite
31aa0 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
31ab0 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  ..** This opcode
31ac0 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72   invokes the cor
31ad0 72 65 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e 61  responding xRena
31ae0 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68 65 20 76  me method. The v
31af0 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69 73  alue.** in regis
31b00 74 65 72 20 50 31 20 69 73 20 70 61 73 73 65 64  ter P1 is passed
31b10 20 61 73 20 74 68 65 20 7a 4e 61 6d 65 20 61 72   as the zName ar
31b20 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 78 52  gument to the xR
31b30 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f  ename method..*/
31b40 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d 65  .case OP_VRename
31b50 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  : {.  sqlite3_vt
31b60 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65 6d  ab *pVtab;.  Mem
31b70 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74 61   *pName;..  pVta
31b80 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
31b90 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d  b->pVtab;.  pNam
31ba0 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  e = &aMem[pOp->p
31bb0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56  1];.  assert( pV
31bc0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52  tab->pModule->xR
31bd0 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73 73 65 72  ename );.  asser
31be0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4e  t( memIsValid(pN
31bf0 61 6d 65 29 20 29 3b 0a 20 20 61 73 73 65 72 74  ame) );.  assert
31c00 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
31c10 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
31c20 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e  RACE(pOp->p1, pN
31c30 61 6d 65 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ame);.  assert( 
31c40 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d  pName->flags & M
31c50 45 4d 5f 53 74 72 20 29 3b 0a 20 20 74 65 73 74  EM_Str );.  test
31c60 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63  case( pName->enc
31c70 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 3b  ==SQLITE_UTF8 );
31c80 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e 61  .  testcase( pNa
31c90 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  me->enc==SQLITE_
31ca0 55 54 46 31 36 42 45 20 29 3b 0a 20 20 74 65 73  UTF16BE );.  tes
31cb0 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e  tcase( pName->en
31cc0 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  c==SQLITE_UTF16L
31cd0 45 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  E );.  rc = sqli
31ce0 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
31cf0 6f 64 69 6e 67 28 70 4e 61 6d 65 2c 20 53 51 4c  oding(pName, SQL
31d00 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 69 66 28  ITE_UTF8);.  if(
31d10 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
31d20 7b 0a 20 20 20 20 72 63 20 3d 20 70 56 74 61 62  {.    rc = pVtab
31d30 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61  ->pModule->xRena
31d40 6d 65 28 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d  me(pVtab, pName-
31d50 3e 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  >z);.    sqlite3
31d60 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
31d70 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20  (p, pVtab);.    
31d80 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a  p->expired = 0;.
31d90 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
31da0 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
31db0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
31dc0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
31dd0 65 3a 20 56 55 70 64 61 74 65 20 50 31 20 50 32  e: VUpdate P1 P2
31de0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
31df0 6f 70 73 69 73 3a 20 64 61 74 61 3d 72 5b 50 33  opsis: data=r[P3
31e00 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  @P2].**.** P4 is
31e10 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
31e20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62  virtual table ob
31e30 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33  ject, an sqlite3
31e40 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
31e50 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
31e60 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72  invokes the corr
31e70 65 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74  esponding xUpdat
31e80 65 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c  e method. P2 val
31e90 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69  ues.** are conti
31ea0 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c  guous memory cel
31eb0 6c 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 50  ls starting at P
31ec0 33 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65  3 to pass to the
31ed0 20 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76   xUpdate .** inv
31ee0 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c  ocation. The val
31ef0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 28  ue in register (
31f00 50 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70  P3+P2-1) corresp
31f10 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20  onds to the .** 
31f20 70 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20  p2th element of 
31f30 74 68 65 20 61 72 67 76 20 61 72 72 61 79 20 70  the argv array p
31f40 61 73 73 65 64 20 74 6f 20 78 55 70 64 61 74 65  assed to xUpdate
31f50 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64  ..**.** The xUpd
31f60 61 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20  ate method will 
31f70 64 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61  do a DELETE or a
31f80 6e 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68  n INSERT or both
31f90 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d  ..** The argv[0]
31fa0 20 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20   element (which 
31fb0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d  corresponds to m
31fc0 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a  emory cell P3).*
31fd0 2a 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f  * is the rowid o
31fe0 66 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74  f a row to delet
31ff0 65 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69  e.  If argv[0] i
32000 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a  s NULL then no .
32010 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75  ** deletion occu
32020 72 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d  rs.  The argv[1]
32030 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20   element is the 
32040 72 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77  rowid of the new
32050 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20   .** row.  This 
32060 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68  can be NULL to h
32070 61 76 65 20 74 68 65 20 76 69 72 74 75 61 6c 20  ave the virtual 
32080 74 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65  table select the
32090 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66   new .** rowid f
320a0 6f 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20  or itself.  The 
320b0 73 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65  subsequent eleme
320c0 6e 74 73 20 69 6e 20 74 68 65 20 61 72 72 61 79  nts in the array
320d0 20 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c   are .** the val
320e0 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ues of columns i
320f0 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a  n the new row..*
32100 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68  *.** If P2==1 th
32110 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20  en no insert is 
32120 70 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76  performed.  argv
32130 5b 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64  [0] is the rowid
32140 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20   of.** a row to 
32150 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31  delete..**.** P1
32160 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c   is a boolean fl
32170 61 67 2e 20 49 66 20 69 74 20 69 73 20 73 65 74  ag. If it is set
32180 20 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65   to true and the
32190 20 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a   xUpdate call.**
321a0 20 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20   is successful, 
321b0 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72  then the value r
321c0 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
321d0 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
321e0 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65  owid() .** is se
321f0 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
32200 66 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20  f the rowid for 
32210 74 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73  the row just ins
32220 65 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 35 20  erted..**.** P5 
32230 69 73 20 74 68 65 20 65 72 72 6f 72 20 61 63 74  is the error act
32240 69 6f 6e 73 20 28 4f 45 5f 52 65 70 6c 61 63 65  ions (OE_Replace
32250 2c 20 4f 45 5f 46 61 69 6c 2c 20 4f 45 5f 49 67  , OE_Fail, OE_Ig
32260 6e 6f 72 65 2c 20 65 74 63 29 20 74 6f 0a 2a 2a  nore, etc) to.**
32270 20 61 70 70 6c 79 20 69 6e 20 74 68 65 20 63 61   apply in the ca
32280 73 65 20 6f 66 20 61 20 63 6f 6e 73 74 72 61 69  se of a constrai
32290 6e 74 20 66 61 69 6c 75 72 65 20 6f 6e 20 61 6e  nt failure on an
322a0 20 69 6e 73 65 72 74 20 6f 72 20 75 70 64 61 74   insert or updat
322b0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55  e..*/.case OP_VU
322c0 70 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74  pdate: {.  sqlit
322d0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
322e0 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65    sqlite3_module
322f0 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74   *pModule;.  int
32300 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a   nArg;.  int i;.
32310 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 72    sqlite_int64 r
32320 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70  owid;.  Mem **ap
32330 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a  Arg;.  Mem *pX;.
32340 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
32350 70 32 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c 20  p2==1        || 
32360 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c  pOp->p5==OE_Fail
32370 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f     || pOp->p5==O
32380 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20 20  E_Rollback .    
32390 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f     || pOp->p5==O
323a0 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e  E_Abort || pOp->
323b0 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c  p5==OE_Ignore ||
323c0 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70   pOp->p5==OE_Rep
323d0 6c 61 63 65 0a 20 20 29 3b 0a 20 20 61 73 73 65  lace.  );.  asse
323e0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
323f0 3d 30 20 29 3b 0a 20 20 70 56 74 61 62 20 3d 20  =0 );.  pVtab = 
32400 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
32410 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
32420 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  = (sqlite3_modul
32430 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e *)pVtab->pModu
32440 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70  le;.  nArg = pOp
32450 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
32460 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
32470 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20 41 4c  VTAB );.  if( AL
32480 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55  WAYS(pModule->xU
32490 70 64 61 74 65 29 20 29 7b 0a 20 20 20 20 75 38  pdate) ){.    u8
324a0 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20   vtabOnConflict 
324b0 3d 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66  = db->vtabOnConf
324c0 6c 69 63 74 3b 0a 20 20 20 20 61 70 41 72 67 20  lict;.    apArg 
324d0 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20  = p->apArg;.    
324e0 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  pX = &aMem[pOp->
324f0 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  p3];.    for(i=0
32500 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
32510 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
32520 6d 49 73 56 61 6c 69 64 28 70 58 29 20 29 3b 0a  mIsValid(pX) );.
32530 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
32540 43 68 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a 20  Change(p, pX);. 
32550 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20       apArg[i] = 
32560 70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a  pX;.      pX++;.
32570 20 20 20 20 7d 0a 20 20 20 20 64 62 2d 3e 76 74      }.    db->vt
32580 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 70  abOnConflict = p
32590 4f 70 2d 3e 70 35 3b 0a 20 20 20 20 72 63 20 3d  Op->p5;.    rc =
325a0 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74   pModule->xUpdat
325b0 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c 20 61  e(pVtab, nArg, a
325c0 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20  pArg, &rowid);. 
325d0 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e     db->vtabOnCon
325e0 66 6c 69 63 74 20 3d 20 76 74 61 62 4f 6e 43 6f  flict = vtabOnCo
325f0 6e 66 6c 69 63 74 3b 0a 20 20 20 20 73 71 6c 69  nflict;.    sqli
32600 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
32610 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
32620 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
32630 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20  E_OK && pOp->p1 
32640 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
32650 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41 72 67   nArg>1 && apArg
32660 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b 30 5d  [0] && (apArg[0]
32670 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c  ->flags&MEM_Null
32680 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c  ) );.      db->l
32690 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
326a0 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20  owid = rowid;.  
326b0 20 20 7d 0a 20 20 20 20 69 66 28 20 28 72 63 26    }.    if( (rc&
326c0 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f  0xff)==SQLITE_CO
326d0 4e 53 54 52 41 49 4e 54 20 26 26 20 70 4f 70 2d  NSTRAINT && pOp-
326e0 3e 70 34 2e 70 56 74 61 62 2d 3e 62 43 6f 6e 73  >p4.pVtab->bCons
326f0 74 72 61 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  traint ){.      
32700 69 66 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f  if( pOp->p5==OE_
32710 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20  Ignore ){.      
32720 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
32730 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
32740 20 20 20 20 20 20 20 70 2d 3e 65 72 72 6f 72 41         p->errorA
32750 63 74 69 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e 70  ction = ((pOp->p
32760 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 29 20 3f  5==OE_Replace) ?
32770 20 4f 45 5f 41 62 6f 72 74 20 3a 20 70 4f 70 2d   OE_Abort : pOp-
32780 3e 70 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  >p5);.      }.  
32790 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
327a0 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20  ->nChange++;.   
327b0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
327c0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
327d0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
327e0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
327f0 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41    SQLITE_OMIT_PA
32800 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f  GER_PRAGMAS./* O
32810 70 63 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74  pcode: Pagecount
32820 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
32830 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72  ** Write the cur
32840 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70  rent number of p
32850 61 67 65 73 20 69 6e 20 64 61 74 61 62 61 73 65  ages in database
32860 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65   P1 to memory ce
32870 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ll P2..*/.case O
32880 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20  P_Pagecount: {  
32890 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
328a0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
328b0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71    pOut->u.i = sq
328c0 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 50 61  lite3BtreeLastPa
328d0 67 65 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  ge(db->aDb[pOp->
328e0 70 31 5d 2e 70 42 74 29 3b 0a 20 20 62 72 65 61  p1].pBt);.  brea
328f0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  k;.}.#endif...#i
32900 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d  fndef  SQLITE_OM
32910 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
32920 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 78 50  ./* Opcode: MaxP
32930 67 63 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20  gcnt P1 P2 P3 * 
32940 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 73  *.**.** Try to s
32950 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70  et the maximum p
32960 61 67 65 20 63 6f 75 6e 74 20 66 6f 72 20 64 61  age count for da
32970 74 61 62 61 73 65 20 50 31 20 74 6f 20 74 68 65  tabase P1 to the
32980 20 76 61 6c 75 65 20 69 6e 20 50 33 2e 0a 2a 2a   value in P3..**
32990 20 44 6f 20 6e 6f 74 20 6c 65 74 20 74 68 65 20   Do not let the 
329a0 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75  maximum page cou
329b0 6e 74 20 66 61 6c 6c 20 62 65 6c 6f 77 20 74 68  nt fall below th
329c0 65 20 63 75 72 72 65 6e 74 20 70 61 67 65 20 63  e current page c
329d0 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f 20 6e  ount and.** do n
329e0 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20 6d 61  ot change the ma
329f0 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74  ximum page count
32a00 20 76 61 6c 75 65 20 69 66 20 50 33 3d 3d 30 2e   value if P3==0.
32a10 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  .**.** Store the
32a20 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f   maximum page co
32a30 75 6e 74 20 61 66 74 65 72 20 74 68 65 20 63 68  unt after the ch
32a40 61 6e 67 65 20 69 6e 20 72 65 67 69 73 74 65 72  ange in register
32a50 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
32a60 4d 61 78 50 67 63 6e 74 3a 20 7b 20 20 20 20 20  MaxPgcnt: {     
32a70 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
32a80 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 75  rerelease */.  u
32a90 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d  nsigned int newM
32aa0 61 78 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74  ax;.  Btree *pBt
32ab0 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  ;..  pBt = db->a
32ac0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
32ad0 0a 20 20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20  .  newMax = 0;. 
32ae0 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
32af0 20 20 20 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c      newMax = sql
32b00 69 74 65 33 42 74 72 65 65 4c 61 73 74 50 61 67  ite3BtreeLastPag
32b10 65 28 70 42 74 29 3b 0a 20 20 20 20 69 66 28 20  e(pBt);.    if( 
32b20 6e 65 77 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e  newMax < (unsign
32b30 65 64 29 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77  ed)pOp->p3 ) new
32b40 4d 61 78 20 3d 20 28 75 6e 73 69 67 6e 65 64 29  Max = (unsigned)
32b50 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70  pOp->p3;.  }.  p
32b60 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74  Out->u.i = sqlit
32b70 65 33 42 74 72 65 65 4d 61 78 50 61 67 65 43 6f  e3BtreeMaxPageCo
32b80 75 6e 74 28 70 42 74 2c 20 6e 65 77 4d 61 78 29  unt(pBt, newMax)
32b90 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
32ba0 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  dif.../* Opcode:
32bb0 20 49 6e 69 74 20 2a 20 50 32 20 2a 20 50 34 20   Init * P2 * P4 
32bc0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
32bd0 53 74 61 72 74 20 61 74 20 50 32 0a 2a 2a 0a 2a  Start at P2.**.*
32be0 2a 20 50 72 6f 67 72 61 6d 73 20 63 6f 6e 74 61  * Programs conta
32bf0 69 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e 73 74  in a single inst
32c00 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 70 63  ance of this opc
32c10 6f 64 65 20 61 73 20 74 68 65 20 76 65 72 79 20  ode as the very 
32c20 66 69 72 73 74 0a 2a 2a 20 6f 70 63 6f 64 65 2e  first.** opcode.
32c30 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e  .**.** If tracin
32c40 67 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79  g is enabled (by
32c50 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61   the sqlite3_tra
32c60 63 65 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c  ce()) interface,
32c70 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46   then.** the UTF
32c80 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69  -8 string contai
32c90 6e 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69  ned in P4 is emi
32ca0 74 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63  tted on the trac
32cb0 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 20 4f  e callback..** O
32cc0 72 20 69 66 20 50 34 20 69 73 20 62 6c 61 6e 6b  r if P4 is blank
32cd0 2c 20 75 73 65 20 74 68 65 20 73 74 72 69 6e 67  , use the string
32ce0 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
32cf0 69 74 65 33 5f 73 71 6c 28 29 2e 0a 2a 2a 0a 2a  ite3_sql()..**.*
32d00 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 74 20 7a  * If P2 is not z
32d10 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73  ero, jump to ins
32d20 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a  truction P2..*/.
32d30 63 61 73 65 20 4f 50 5f 49 6e 69 74 3a 20 7b 20  case OP_Init: { 
32d40 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
32d50 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 72 61   */.  char *zTra
32d60 63 65 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a  ce;.  char *z;..
32d70 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 7b    if( pOp->p2 ){
32d80 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
32d90 32 20 2d 20 31 3b 0a 20 20 7d 0a 23 69 66 6e 64  2 - 1;.  }.#ifnd
32da0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
32db0 52 41 43 45 0a 20 20 69 66 28 20 64 62 2d 3e 78  RACE.  if( db->x
32dc0 54 72 61 63 65 0a 20 20 20 26 26 20 21 70 2d 3e  Trace.   && !p->
32dd0 64 6f 69 6e 67 52 65 72 75 6e 0a 20 20 20 26 26  doingRerun.   &&
32de0 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d   (zTrace = (pOp-
32df0 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e  >p4.z ? pOp->p4.
32e00 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30  z : p->zSql))!=0
32e10 0a 20 20 29 7b 0a 20 20 20 20 7a 20 3d 20 73 71  .  ){.    z = sq
32e20 6c 69 74 65 33 56 64 62 65 45 78 70 61 6e 64 53  lite3VdbeExpandS
32e30 71 6c 28 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20  ql(p, zTrace);. 
32e40 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62     db->xTrace(db
32e50 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a 29 3b  ->pTraceArg, z);
32e60 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
32e70 65 65 28 64 62 2c 20 7a 29 3b 0a 20 20 7d 0a 23  ee(db, z);.  }.#
32e80 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
32e90 5f 46 43 4e 54 4c 5f 54 52 41 43 45 0a 20 20 7a  _FCNTL_TRACE.  z
32ea0 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34  Trace = (pOp->p4
32eb0 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a  .z ? pOp->p4.z :
32ec0 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 69 66 28   p->zSql);.  if(
32ed0 20 7a 54 72 61 63 65 20 29 7b 0a 20 20 20 20 69   zTrace ){.    i
32ee0 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d  nt i;.    for(i=
32ef0 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b  0; i<db->nDb; i+
32f00 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 44 62  +){.      if( Db
32f10 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
32f20 65 4d 61 73 6b 2c 20 69 29 3d 3d 30 20 29 20 63  eMask, i)==0 ) c
32f30 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 73  ontinue;.      s
32f40 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74  qlite3_file_cont
32f50 72 6f 6c 28 64 62 2c 20 64 62 2d 3e 61 44 62 5b  rol(db, db->aDb[
32f60 69 5d 2e 7a 4e 61 6d 65 2c 20 53 51 4c 49 54 45  i].zName, SQLITE
32f70 5f 46 43 4e 54 4c 5f 54 52 41 43 45 2c 20 7a 54  _FCNTL_TRACE, zT
32f80 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  race);.    }.  }
32f90 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
32fa0 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43  E_USE_FCNTL_TRAC
32fb0 45 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  E */.#ifdef SQLI
32fc0 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 28  TE_DEBUG.  if( (
32fd0 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
32fe0 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d 30 0a  TE_SqlTrace)!=0.
32ff0 20 20 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20     && (zTrace = 
33000 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70  (pOp->p4.z ? pOp
33010 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c  ->p4.z : p->zSql
33020 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 73  ))!=0.  ){.    s
33030 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74  qlite3DebugPrint
33040 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20 25 73  f("SQL-trace: %s
33050 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20  \n", zTrace);.  
33060 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
33070 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64  TE_DEBUG */.#end
33080 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
33090 54 5f 54 52 41 43 45 20 2a 2f 0a 20 20 62 72 65  T_TRACE */.  bre
330a0 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
330b0 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20  e: Noop * * * * 
330c0 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69  *.**.** Do nothi
330d0 6e 67 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75  ng.  This instru
330e0 63 74 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75  ction is often u
330f0 73 65 66 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a  seful as a jump.
33100 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a  ** destination..
33110 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67  */./*.** The mag
33120 69 63 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64  ic Explain opcod
33130 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72  e are only inser
33140 74 65 64 20 77 68 65 6e 20 65 78 70 6c 61 69 6e  ted when explain
33150 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a 20 69 73  ==2 (which.** is
33160 20 74 6f 20 73 61 79 20 77 68 65 6e 20 74 68 65   to say when the
33170 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
33180 4c 41 4e 20 73 79 6e 74 61 78 20 69 73 20 75 73  LAN syntax is us
33190 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ed.).** This opc
331a0 6f 64 65 20 72 65 63 6f 72 64 73 20 69 6e 66 6f  ode records info
331b0 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65  rmation from the
331c0 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20 49 74 20   optimizer.  It 
331d0 69 73 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 61  is the.** the sa
331e0 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20  me as a no-op.  
331f0 54 68 69 73 20 6f 70 63 6f 64 65 73 6e 65 76 65  This opcodesneve
33200 72 20 61 70 70 65 61 72 73 20 69 6e 20 61 20 72  r appears in a r
33210 65 61 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a  eal VM program..
33220 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20 20  */.default: {   
33230 20 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69         /* This i
33240 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70  s really OP_Noop
33250 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20   and OP_Explain 
33260 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
33270 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f  ->opcode==OP_Noo
33280 70 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  p || pOp->opcode
33290 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 3b 0a  ==OP_Explain );.
332a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a    break;.}../***
332b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
332c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
332d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
332e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
332f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
33300 65 20 63 61 73 65 73 20 6f 66 20 74 68 65 20 73  e cases of the s
33310 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
33320 61 62 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 20  above this line 
33330 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e  should all be in
33340 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20 73  dented.** by 6 s
33350 70 61 63 65 73 2e 20 20 42 75 74 20 74 68 65 20  paces.  But the 
33360 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73 70 61 63  left-most 6 spac
33370 65 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 6d  es have been rem
33380 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f 76 65 20  oved to improve 
33390 74 68 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69  the.** readabili
333a0 74 79 2e 20 20 46 72 6f 6d 20 74 68 69 73 20 70  ty.  From this p
333b0 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68  oint on down, th
333c0 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61  e normal indenta
333d0 74 69 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a  tion rules are.*
333e0 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a  * restored..****
333f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33400 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33410 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33420 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33430 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d  *********/.    }
33440 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ..#ifdef VDBE_PR
33450 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20  OFILE.    {.    
33460 20 20 75 36 34 20 65 6e 64 54 69 6d 65 20 3d 20    u64 endTime = 
33470 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b  sqlite3Hwtime();
33480 0a 20 20 20 20 20 20 69 66 28 20 65 6e 64 54 69  .      if( endTi
33490 6d 65 3e 73 74 61 72 74 20 29 20 70 4f 70 2d 3e  me>start ) pOp->
334a0 63 79 63 6c 65 73 20 2b 3d 20 65 6e 64 54 69 6d  cycles += endTim
334b0 65 20 2d 20 73 74 61 72 74 3b 0a 20 20 20 20 20  e - start;.     
334c0 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20 20   pOp->cnt++;.   
334d0 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f   }.#endif..    /
334e0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
334f0 63 6f 64 65 20 61 64 64 73 20 6e 6f 74 68 69 6e  code adds nothin
33500 67 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20  g to the actual 
33510 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20  functionality.  
33520 20 20 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67    ** of the prog
33530 72 61 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79  ram.  It is only
33540 20 68 65 72 65 20 66 6f 72 20 74 65 73 74 69 6e   here for testin
33550 67 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e  g and debugging.
33560 0a 20 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f  .    ** On the o
33570 74 68 65 72 20 68 61 6e 64 2c 20 69 74 20 64 6f  ther hand, it do
33580 65 73 20 62 75 72 6e 20 43 50 55 20 63 79 63 6c  es burn CPU cycl
33590 65 73 20 65 76 65 72 79 20 74 69 6d 65 20 74 68  es every time th
335a0 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74 68 65  rough.    ** the
335b0 20 65 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e   evaluator loop.
335c0 20 20 53 6f 20 77 65 20 63 61 6e 20 6c 65 61 76    So we can leav
335d0 65 20 69 74 20 6f 75 74 20 77 68 65 6e 20 4e 44  e it out when ND
335e0 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e  EBUG is defined.
335f0 0a 20 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20  .    */.#ifndef 
33600 4e 44 45 42 55 47 0a 20 20 20 20 61 73 73 65 72  NDEBUG.    asser
33610 74 28 20 70 63 3e 3d 2d 31 20 26 26 20 70 63 3c  t( pc>=-1 && pc<
33620 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66 64 65  p->nOp );..#ifde
33630 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
33640 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73     if( db->flags
33650 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72   & SQLITE_VdbeTr
33660 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ace ){.      if(
33670 20 72 63 21 3d 30 20 29 20 70 72 69 6e 74 66 28   rc!=0 ) printf(
33680 22 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20  "rc=%d\n",rc);. 
33690 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70       if( pOp->op
336a0 66 6c 61 67 73 20 26 20 28 4f 50 46 4c 47 5f 4f  flags & (OPFLG_O
336b0 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45 7c 4f  UT2_PRERELEASE|O
336c0 50 46 4c 47 5f 4f 55 54 32 29 20 29 7b 0a 20 20  PFLG_OUT2) ){.  
336d0 20 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72        registerTr
336e0 61 63 65 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d  ace(pOp->p2, &aM
336f0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20  em[pOp->p2]);.  
33700 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
33710 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
33720 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20  PFLG_OUT3 ){.   
33730 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61       registerTra
33740 63 65 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65  ce(pOp->p3, &aMe
33750 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
33760 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69     }.    }.#endi
33770 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  f  /* SQLITE_DEB
33780 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a  UG */.#endif  /*
33790 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20   NDEBUG */.  }  
337a0 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68  /* The end of th
337b0 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74  e for(;;) loop t
337c0 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68  he loops through
337d0 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f   opcodes */..  /
337e0 2a 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68  * If we reach th
337f0 69 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61  is point, it mea
33800 6e 73 20 74 68 61 74 20 65 78 65 63 75 74 69 6f  ns that executio
33810 6e 20 69 73 20 66 69 6e 69 73 68 65 64 20 77 69  n is finished wi
33820 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72  th.  ** an error
33830 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20   of some kind.. 
33840 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68   */.vdbe_error_h
33850 61 6c 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72  alt:.  assert( r
33860 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72  c );.  p->rc = r
33870 63 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 73  c;.  testcase( s
33880 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
33890 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20  ig.xLog!=0 );.  
338a0 73 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20  sqlite3_log(rc, 
338b0 22 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 72 74  "statement abort
338c0 73 20 61 74 20 25 64 3a 20 5b 25 73 5d 20 25 73  s at %d: [%s] %s
338d0 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  ", .            
338e0 20 20 20 20 20 20 20 70 63 2c 20 70 2d 3e 7a 53         pc, p->zS
338f0 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  ql, p->zErrMsg);
33900 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  .  sqlite3VdbeHa
33910 6c 74 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d  lt(p);.  if( rc=
33920 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f  =SQLITE_IOERR_NO
33930 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63  MEM ) db->malloc
33940 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63  Failed = 1;.  rc
33950 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
33960 0a 20 20 69 66 28 20 72 65 73 65 74 53 63 68 65  .  if( resetSche
33970 6d 61 4f 6e 46 61 75 6c 74 3e 30 20 29 7b 0a 20  maOnFault>0 ){. 
33980 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f     sqlite3ResetO
33990 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 72 65 73  neSchema(db, res
339a0 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 2d  etSchemaOnFault-
339b0 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68  1);.  }..  /* Th
339c0 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77  is is the only w
339d0 61 79 20 6f 75 74 20 6f 66 20 74 68 69 73 20 70  ay out of this p
339e0 72 6f 63 65 64 75 72 65 2e 20 20 57 65 20 68 61  rocedure.  We ha
339f0 76 65 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61  ve to.  ** relea
33a00 73 65 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f  se the mutexes o
33a10 6e 20 62 74 72 65 65 73 20 74 68 61 74 20 77 65  n btrees that we
33a20 72 65 20 61 63 71 75 69 72 65 64 20 61 74 20 74  re acquired at t
33a30 68 65 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a  he.  ** top. */.
33a40 76 64 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20 64  vdbe_return:.  d
33a50 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c  b->lastRowid = l
33a60 61 73 74 52 6f 77 69 64 3b 0a 20 20 74 65 73 74  astRowid;.  test
33a70 63 61 73 65 28 20 6e 56 6d 53 74 65 70 3e 30 20  case( nVmStep>0 
33a80 29 3b 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72  );.  p->aCounter
33a90 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
33aa0 55 53 5f 56 4d 5f 53 54 45 50 5d 20 2b 3d 20 28  US_VM_STEP] += (
33ab0 69 6e 74 29 6e 56 6d 53 74 65 70 3b 0a 20 20 73  int)nVmStep;.  s
33ac0 71 6c 69 74 65 33 56 64 62 65 4c 65 61 76 65 28  qlite3VdbeLeave(
33ad0 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b  p);.  return rc;
33ae0 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
33af0 65 72 65 20 69 66 20 61 20 73 74 72 69 6e 67 20  ere if a string 
33b00 6f 72 20 62 6c 6f 62 20 6c 61 72 67 65 72 20 74  or blob larger t
33b10 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c  han SQLITE_MAX_L
33b20 45 4e 47 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e  ENGTH.  ** is en
33b30 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a  countered..  */.
33b40 74 6f 6f 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74  too_big:.  sqlit
33b50 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
33b60 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 73 74  zErrMsg, db, "st
33b70 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f  ring or blob too
33b80 20 62 69 67 22 29 3b 0a 20 20 72 63 20 3d 20 53   big");.  rc = S
33b90 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20  QLITE_TOOBIG;.  
33ba0 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
33bb0 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
33bc0 20 74 6f 20 68 65 72 65 20 69 66 20 61 20 6d 61   to here if a ma
33bd0 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20 20  lloc() fails..  
33be0 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d  */.no_mem:.  db-
33bf0 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
33c00 31 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53  1;.  sqlite3SetS
33c10 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
33c20 67 2c 20 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d  g, db, "out of m
33c30 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d 20  emory");.  rc = 
33c40 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
33c50 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
33c60 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
33c70 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79   to here for any
33c80 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66   other kind of f
33c90 61 74 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65  atal error.  The
33ca0 20 22 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20   "rc" variable. 
33cb0 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20   ** should hold 
33cc0 74 68 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72  the error number
33cd0 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65  ..  */.abort_due
33ce0 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73  _to_error:.  ass
33cf0 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d  ert( p->zErrMsg=
33d00 3d 30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e  =0 );.  if( db->
33d10 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72  mallocFailed ) r
33d20 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
33d30 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
33d40 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29  TE_IOERR_NOMEM )
33d50 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
33d60 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
33d70 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
33d80 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29  lite3ErrStr(rc))
33d90 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62  ;.  }.  goto vdb
33da0 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
33db0 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
33dc0 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   if the sqlite3_
33dd0 69 6e 74 65 72 72 75 70 74 28 29 20 41 50 49 20  interrupt() API 
33de0 73 65 74 73 20 74 68 65 20 69 6e 74 65 72 72 75  sets the interru
33df0 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20  pt.  ** flag..  
33e00 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  */.abort_due_to_
33e10 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61 73 73  interrupt:.  ass
33e20 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e  ert( db->u1.isIn
33e30 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20 20 72  terrupted );.  r
33e40 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  c = SQLITE_INTER
33e50 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20  RUPT;.  p->rc = 
33e60 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74  rc;.  sqlite3Set
33e70 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
33e80 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
33e90 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29  lite3ErrStr(rc))
33ea0 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72  ;.  goto vdbe_er
33eb0 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a              ror_halt;.}.