/ Hex Artifact Content
Login

Artifact 86ae6f4774410868af41bd839b72b7081ff03e78:


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 6f   into a String o
8290: 70 63 6f 64 65 20 62 65 66 6f 72 65 20 69 74 20  pcode before it 
82a0: 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  is executed for 
82b0: 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 20  the first time. 
82c0: 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73 20   During.** this 
82d0: 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c 20  transformation, 
82e0: 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 73 74  the length of st
82f0: 72 69 6e 67 20 50 34 20 69 73 20 63 6f 6d 70 75  ring P4 is compu
8300: 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64 0a 2a  ted and stored.*
8310: 2a 20 61 73 20 74 68 65 20 50 31 20 70 61 72 61  * as the P1 para
8320: 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  meter..*/.case O
8330: 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20  P_String8: {    
8340: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
8350: 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 2d  TK_STRING, out2-
8360: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
8370: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
8380: 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f  z!=0 );.  pOp->o
8390: 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e  pcode = OP_Strin
83a0: 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73  g;.  pOp->p1 = s
83b0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
83c0: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e  Op->p4.z);..#ifn
83d0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
83e0: 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f  UTF16.  if( enco
83f0: 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46  ding!=SQLITE_UTF
8400: 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  8 ){.    rc = sq
8410: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
8420: 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34  tr(pOut, pOp->p4
8430: 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55  .z, -1, SQLITE_U
8440: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
8450: 49 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  IC);.    if( rc=
8460: 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29  =SQLITE_TOOBIG )
8470: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
8480: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b     if( SQLITE_OK
8490: 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61  !=sqlite3VdbeCha
84a0: 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74  ngeEncoding(pOut
84b0: 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f  , encoding) ) go
84c0: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61  to no_mem;.    a
84d0: 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 73 7a 4d  ssert( pOut->szM
84e0: 61 6c 6c 6f 63 3e 30 20 26 26 20 70 4f 75 74 2d  alloc>0 && pOut-
84f0: 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e  >zMalloc==pOut->
8500: 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  z );.    assert(
8510: 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28   VdbeMemDynamic(
8520: 70 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20  pOut)==0 );.    
8530: 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d  pOut->szMalloc =
8540: 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   0;.    pOut->fl
8550: 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69  ags |= MEM_Stati
8560: 63 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  c;.    if( pOp->
8570: 70 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d  p4type==P4_DYNAM
8580: 49 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  IC ){.      sqli
8590: 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f  te3DbFree(db, pO
85a0: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a  p->p4.z);.    }.
85b0: 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20      pOp->p4type 
85c0: 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20  = P4_DYNAMIC;.  
85d0: 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f    pOp->p4.z = pO
85e0: 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e  ut->z;.    pOp->
85f0: 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20  p1 = pOut->n;.  
8600: 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  }.#endif.  if( p
8610: 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69  Op->p1>db->aLimi
8620: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
8630: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
8640: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
8650: 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
8660: 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61  h to the next ca
8670: 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f  se, OP_String */
8680: 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a  .}.  ./* Opcode:
8690: 20 53 74 72 69 6e 67 20 50 31 20 50 32 20 50 33   String P1 P2 P3
86a0: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
86b0: 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 20 28  is: r[P2]='P4' (
86c0: 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68  len=P1).**.** Th
86d0: 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50  e string value P
86e0: 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28  4 of length P1 (
86f0: 62 79 74 65 73 29 20 69 73 20 73 74 6f 72 65 64  bytes) is stored
8700: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
8710: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20  .**.** If P5!=0 
8720: 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  and the content 
8730: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
8740: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
8750: 65 72 6f 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ero, then.** the
8760: 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65   datatype of the
8770: 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20   register P2 is 
8780: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 42 4c 4f  converted to BLO
8790: 42 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  B.  The content 
87a0: 69 73 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 73  is.** the same s
87b0: 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73  equence of bytes
87c0: 2c 20 69 74 20 69 73 20 6d 65 72 65 6c 79 20 69  , it is merely i
87d0: 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61 20  nterpreted as a 
87e0: 42 4c 4f 42 20 69 6e 73 74 65 61 64 0a 2a 2a 20  BLOB instead.** 
87f0: 6f 66 20 61 20 73 74 72 69 6e 67 2c 20 61 73 20  of a string, as 
8800: 69 66 20 69 74 20 68 61 64 20 62 65 65 6e 20 43  if it had been C
8810: 41 53 54 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  AST..*/.case OP_
8820: 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20 20  String: {       
8830: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
8840: 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
8850: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20  t( pOp->p4.z!=0 
8860: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
8870: 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53   = MEM_Str|MEM_S
8880: 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a  tatic|MEM_Term;.
8890: 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d    pOut->z = pOp-
88a0: 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e  >p4.z;.  pOut->n
88b0: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f   = pOp->p1;.  pO
88c0: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
88d0: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
88e0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
88f0: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29  .  if( pOp->p5 )
8900: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
8910: 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 61  p->p3>0 );.    a
8920: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
8930: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
8940: 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 33  sor) );.    pIn3
8950: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
8960: 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ];.    assert( p
8970: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
8980: 5f 49 6e 74 20 29 3b 0a 20 20 20 20 69 66 28 20  _Int );.    if( 
8990: 70 49 6e 33 2d 3e 75 2e 69 20 29 20 70 4f 75 74  pIn3->u.i ) pOut
89a0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c  ->flags = MEM_Bl
89b0: 6f 62 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  ob|MEM_Static|ME
89c0: 4d 5f 54 65 72 6d 3b 0a 20 20 7d 0a 20 20 62 72  M_Term;.  }.  br
89d0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
89e0: 65 3a 20 4e 75 6c 6c 20 50 31 20 50 32 20 50 33  e: Null P1 P2 P3
89f0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
8a00: 3a 20 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c  :  r[P2..P3]=NUL
8a10: 4c 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20  L.**.** Write a 
8a20: 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74  NULL into regist
8a30: 65 72 73 20 50 32 2e 20 20 49 66 20 50 33 20 67  ers P2.  If P3 g
8a40: 72 65 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20  reater than P2, 
8a50: 74 68 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a  then also write.
8a60: 2a 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67  ** NULL into reg
8a70: 69 73 74 65 72 20 50 33 20 61 6e 64 20 65 76 65  ister P3 and eve
8a80: 72 79 20 72 65 67 69 73 74 65 72 20 69 6e 20 62  ry register in b
8a90: 65 74 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33  etween P2 and P3
8aa0: 2e 20 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c  .  If P3.** is l
8ab0: 65 73 73 20 74 68 61 6e 20 50 32 20 28 74 79 70  ess than P2 (typ
8ac0: 69 63 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72  ically P3 is zer
8ad0: 6f 29 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67  o) then only reg
8ae0: 69 73 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73  ister P2 is.** s
8af0: 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  et to NULL..**.*
8b00: 2a 20 49 66 20 74 68 65 20 50 31 20 76 61 6c 75  * If the P1 valu
8b10: 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  e is non-zero, t
8b20: 68 65 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65  hen also set the
8b30: 20 4d 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61   MEM_Cleared fla
8b40: 67 20 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c  g so that.** NUL
8b50: 4c 20 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f  L values will no
8b60: 74 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20  t compare equal 
8b70: 65 76 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e  even if SQLITE_N
8b80: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a  ULLEQ is set on.
8b90: 2a 2a 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45  ** OP_Ne or OP_E
8ba0: 71 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75  q..*/.case OP_Nu
8bb0: 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
8bc0: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
8bd0: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b  se */.  int cnt;
8be0: 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b  .  u16 nullFlag;
8bf0: 0a 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33  .  cnt = pOp->p3
8c00: 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65  -pOp->p2;.  asse
8c10: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
8c20: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
8c30: 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  ) );.  pOut->fla
8c40: 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20  gs = nullFlag = 
8c50: 70 4f 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e  pOp->p1 ? (MEM_N
8c60: 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29  ull|MEM_Cleared)
8c70: 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 77   : MEM_Null;.  w
8c80: 68 69 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20  hile( cnt>0 ){. 
8c90: 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d     pOut++;.    m
8ca0: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
8cb0: 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71  p, pOut);.    sq
8cc0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
8cd0: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 70  ull(pOut);.    p
8ce0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c  Out->flags = nul
8cf0: 6c 46 6c 61 67 3b 0a 20 20 20 20 63 6e 74 2d 2d  lFlag;.    cnt--
8d00: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
8d10: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 66  ../* Opcode: Sof
8d20: 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a 20 2a  tNull P1 * * * *
8d30: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
8d40: 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20  [P1]=NULL.**.** 
8d50: 53 65 74 20 72 65 67 69 73 74 65 72 20 50 31 20  Set register P1 
8d60: 74 6f 20 68 61 76 65 20 74 68 65 20 76 61 6c 75  to have the valu
8d70: 65 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e 20 62  e NULL as seen b
8d80: 79 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63  y the OP_MakeRec
8d90: 6f 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  ord.** instructi
8da0: 6f 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 66  on, but do not f
8db0: 72 65 65 20 61 6e 79 20 73 74 72 69 6e 67 20 6f  ree any string o
8dc0: 72 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20 61 73  r blob memory as
8dd0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a  sociated with.**
8de0: 20 74 68 65 20 72 65 67 69 73 74 65 72 2c 20 73   the register, s
8df0: 6f 20 74 68 61 74 20 69 66 20 74 68 65 20 76 61  o that if the va
8e00: 6c 75 65 20 77 61 73 20 61 20 73 74 72 69 6e 67  lue was a string
8e10: 20 6f 72 20 62 6c 6f 62 20 74 68 61 74 20 77 61   or blob that wa
8e20: 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20  s.** previously 
8e30: 63 6f 70 69 65 64 20 75 73 69 6e 67 20 4f 50 5f  copied using OP_
8e40: 53 43 6f 70 79 2c 20 74 68 65 20 63 6f 70 69 65  SCopy, the copie
8e50: 73 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20  s will continue 
8e60: 74 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a 2f 0a  to be valid..*/.
8e70: 63 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75 6c 6c  case OP_SoftNull
8e80: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
8e90: 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
8ea0: 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p1<=(p->nMem-p->
8eb0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f  nCursor) );.  pO
8ec0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
8ed0: 70 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  p1];.  pOut->fla
8ee0: 67 73 20 3d 20 28 70 4f 75 74 2d 3e 66 6c 61 67  gs = (pOut->flag
8ef0: 73 7c 4d 45 4d 5f 4e 75 6c 6c 29 26 7e 4d 45 4d  s|MEM_Null)&~MEM
8f00: 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72  _Undefined;.  br
8f10: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
8f20: 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20  e: Blob P1 P2 * 
8f30: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
8f40: 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c 65 6e 3d  : r[P2]=P4 (len=
8f50: 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69  P1).**.** P4 poi
8f60: 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66  nts to a blob of
8f70: 20 64 61 74 61 20 50 31 20 62 79 74 65 73 20 6c   data P1 bytes l
8f80: 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73  ong.  Store this
8f90: 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69  .** blob in regi
8fa0: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
8fb0: 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20   OP_Blob: {     
8fc0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
8fd0: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
8fe0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
8ff0: 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58  p1 <= SQLITE_MAX
9000: 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c  _LENGTH );.  sql
9010: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
9020: 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e  r(pOut, pOp->p4.
9030: 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30  z, pOp->p1, 0, 0
9040: 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  );.  pOut->enc =
9050: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
9060: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
9070: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
9080: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  .}../* Opcode: V
9090: 61 72 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20  ariable P1 P2 * 
90a0: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
90b0: 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65  : r[P2]=paramete
90c0: 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54  r(P1,P4).**.** T
90d0: 72 61 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75  ransfer the valu
90e0: 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61  es of bound para
90f0: 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  meter P1 into re
9100: 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20  gister P2.**.** 
9110: 49 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  If the parameter
9120: 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20   is named, then 
9130: 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73  its name appears
9140: 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65 20 50   in P4..** The P
9150: 34 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  4 value is used 
9160: 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  by sqlite3_bind_
9170: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29  parameter_name()
9180: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72  ..*/.case OP_Var
9190: 69 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20  iable: {        
91a0: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
91b0: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 4d 65 6d 20  elease */.  Mem 
91c0: 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20  *pVar;       /* 
91d0: 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e  Value being tran
91e0: 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73  sferred */..  as
91f0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
9200: 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  && pOp->p1<=p->n
9210: 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Var );.  assert(
9220: 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c   pOp->p4.z==0 ||
9230: 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e 61   pOp->p4.z==p->a
9240: 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d 31 5d 20  zVar[pOp->p1-1] 
9250: 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e  );.  pVar = &p->
9260: 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31  aVar[pOp->p1 - 1
9270: 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ];.  if( sqlite3
9280: 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56  VdbeMemTooBig(pV
9290: 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ar) ){.    goto 
92a0: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 73  too_big;.  }.  s
92b0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
92c0: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
92d0: 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29  Var, MEM_Static)
92e0: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
92f0: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
9300: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9310: 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32  code: Move P1 P2
9320: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
9330: 73 69 73 3a 20 20 72 5b 50 32 40 50 33 5d 3d 72  sis:  r[P2@P3]=r
9340: 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f  [P1@P3].**.** Mo
9350: 76 65 20 74 68 65 20 50 33 20 76 61 6c 75 65 73  ve the P3 values
9360: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
9370: 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e  .P1+P3-1 over in
9380: 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20  to.** registers 
9390: 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65  P2..P2+P3-1.  Re
93a0: 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50  gisters P1..P1+P
93b0: 33 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20  3-1 are.** left 
93c0: 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20  holding a NULL. 
93d0: 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   It is an error 
93e0: 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e  for register ran
93f0: 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33  ges.** P1..P1+P3
9400: 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33  -1 and P2..P2+P3
9410: 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20  -1 to overlap.  
9420: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a  It is an error.*
9430: 2a 20 66 6f 72 20 50 33 20 74 6f 20 62 65 20 6c  * for P3 to be l
9440: 65 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63  ess than 1..*/.c
9450: 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20  ase OP_Move: {. 
9460: 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
9470: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
9480: 65 67 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f  egisters left to
9490: 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70   copy */.  int p
94a0: 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  1;          /* R
94b0: 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20  egister to copy 
94c0: 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32  from */.  int p2
94d0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
94e0: 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74  gister to copy t
94f0: 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d  o */..  n = pOp-
9500: 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d  >p3;.  p1 = pOp-
9510: 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  >p1;.  p2 = pOp-
9520: 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  >p2;.  assert( n
9530: 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20 70 32  >0 && p1>0 && p2
9540: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
9550: 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e  p1+n<=p2 || p2+n
9560: 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20  <=p1 );..  pIn1 
9570: 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70  = &aMem[p1];.  p
9580: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b  Out = &aMem[p2];
9590: 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72  .  do{.    asser
95a0: 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28  t( pOut<=&aMem[(
95b0: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
95c0: 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  or)] );.    asse
95d0: 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b  rt( pIn1<=&aMem[
95e0: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
95f0: 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73  sor)] );.    ass
9600: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
9610: 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d  pIn1) );.    mem
9620: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
9630: 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69   pOut);.    sqli
9640: 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70  te3VdbeMemMove(p
9650: 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64  Out, pIn1);.#ifd
9660: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
9670: 20 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53      if( pOut->pS
9680: 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b  copyFrom>=&aMem[
9690: 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53 63  p1] && pOut->pSc
96a0: 6f 70 79 46 72 6f 6d 3c 26 61 4d 65 6d 5b 70 31  opyFrom<&aMem[p1
96b0: 2b 70 4f 70 2d 3e 70 33 5d 20 29 7b 0a 20 20 20  +pOp->p3] ){.   
96c0: 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46     pOut->pScopyF
96d0: 72 6f 6d 20 2b 3d 20 70 31 20 2d 20 70 4f 70 2d  rom += p1 - pOp-
96e0: 3e 70 32 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  >p2;.    }.#endi
96f0: 66 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  f.    REGISTER_T
9700: 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29  RACE(p2++, pOut)
9710: 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
9720: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68 69    pOut++;.  }whi
9730: 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20 20 62 72 65  le( --n );.  bre
9740: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9750: 3a 20 43 6f 70 79 20 50 31 20 50 32 20 50 33 20  : Copy P1 P2 P3 
9760: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
9770: 20 72 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50 31   r[P2@P3+1]=r[P1
9780: 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b  @P3+1].**.** Mak
9790: 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69  e a copy of regi
97a0: 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20  sters P1..P1+P3 
97b0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  into registers P
97c0: 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20  2..P2+P3..**.** 
97d0: 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
97e0: 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f   makes a deep co
97f0: 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e  py of the value.
9800: 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a    A duplicate.**
9810: 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20   is made of any 
9820: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63  string or blob c
9830: 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c  onstant.  See al
9840: 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a  so OP_SCopy..*/.
9850: 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a  case OP_Copy: {.
9860: 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20    int n;..  n = 
9870: 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20  pOp->p3;.  pIn1 
9880: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
9890: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
98a0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
98b0: 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20  ert( pOut!=pIn1 
98c0: 29 3b 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b  );.  while( 1 ){
98d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
98e0: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
98f0: 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45  Out, pIn1, MEM_E
9900: 70 68 65 6d 29 3b 0a 20 20 20 20 44 65 65 70 68  phem);.    Deeph
9910: 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b  emeralize(pOut);
9920: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
9930: 45 42 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70  EBUG.    pOut->p
9940: 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23  ScopyFrom = 0;.#
9950: 65 6e 64 69 66 0a 20 20 20 20 52 45 47 49 53 54  endif.    REGIST
9960: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
9970: 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74  +pOp->p3-n, pOut
9980: 29 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d 29  );.    if( (n--)
9990: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
99a0: 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e   pOut++;.    pIn
99b0: 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  1++;.  }.  break
99c0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
99d0: 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20  SCopy P1 P2 * * 
99e0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
99f0: 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]=r[P1].**.**
9a00: 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20   Make a shallow 
9a10: 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72  copy of register
9a20: 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65   P1 into registe
9a30: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
9a40: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b   instruction mak
9a50: 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  es a shallow cop
9a60: 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20  y of the value. 
9a70: 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
9a80: 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20   is a string or 
9a90: 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63  blob, then the c
9aa0: 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f  opy is only a po
9ab0: 69 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20  inter to the.** 
9ac0: 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e  original and hen
9ad0: 63 65 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e  ce if the origin
9ae0: 61 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69  al changes so wi
9af0: 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20  ll the copy..** 
9b00: 57 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72  Worse, if the or
9b10: 69 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f  iginal is deallo
9b20: 63 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20  cated, the copy 
9b30: 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e  becomes invalid.
9b40: 0a 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f  .** Thus the pro
9b50: 67 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e  gram must guaran
9b60: 74 65 65 20 74 68 61 74 20 74 68 65 20 6f 72 69  tee that the ori
9b70: 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63  ginal will not c
9b80: 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20  hange.** during 
9b90: 74 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20  the lifetime of 
9ba0: 74 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f  the copy.  Use O
9bb0: 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61  P_Copy to make a
9bc0: 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70   complete.** cop
9bd0: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43  y..*/.case OP_SC
9be0: 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20  opy: {          
9bf0: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70    /* out2 */.  p
9c00: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
9c10: 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
9c20: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
9c30: 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70   assert( pOut!=p
9c40: 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  In1 );.  sqlite3
9c50: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
9c60: 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d  py(pOut, pIn1, M
9c70: 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64 65  EM_Ephem);.#ifde
9c80: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
9c90: 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70   if( pOut->pScop
9ca0: 79 46 72 6f 6d 3d 3d 30 20 29 20 70 4f 75 74 2d  yFrom==0 ) pOut-
9cb0: 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49  >pScopyFrom = pI
9cc0: 6e 31 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72 65  n1;.#endif.  bre
9cd0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9ce0: 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31 20 50  : ResultRow P1 P
9cf0: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
9d00: 73 69 73 3a 20 20 6f 75 74 70 75 74 3d 72 5b 50  sis:  output=r[P
9d10: 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  1@P2].**.** The 
9d20: 72 65 67 69 73 74 65 72 73 20 50 31 20 74 68 72  registers P1 thr
9d30: 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e  ough P1+P2-1 con
9d40: 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f  tain a single ro
9d50: 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e  w of.** results.
9d60: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75   This opcode cau
9d70: 73 65 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ses the sqlite3_
9d80: 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74  step() call to t
9d90: 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68  erminate.** with
9da0: 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72   an SQLITE_ROW r
9db0: 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69  eturn code and i
9dc0: 74 20 73 65 74 73 20 75 70 20 74 68 65 20 73 71  t sets up the sq
9dd0: 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74  lite3_stmt.** st
9de0: 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69  ructure to provi
9df0: 64 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 65  de access to the
9e00: 20 72 28 50 31 29 2e 2e 72 28 50 31 2b 50 32 2d   r(P1)..r(P1+P2-
9e10: 31 29 20 76 61 6c 75 65 73 20 61 73 0a 2a 2a 20  1) values as.** 
9e20: 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 2e 0a  the result row..
9e30: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c  */.case OP_Resul
9e40: 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  tRow: {.  Mem *p
9e50: 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  Mem;.  int i;.  
9e60: 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43  assert( p->nResC
9e70: 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29  olumn==pOp->p2 )
9e80: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
9e90: 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p1>0 );.  asser
9ea0: 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e  t( pOp->p1+pOp->
9eb0: 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p2<=(p->nMem-p->
9ec0: 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23  nCursor)+1 );..#
9ed0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
9ee0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
9ef0: 42 41 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68  BACK.  /* Run th
9f00: 65 20 70 72 6f 67 72 65 73 73 20 63 6f 75 6e 74  e progress count
9f10: 65 72 20 6a 75 73 74 20 62 65 66 6f 72 65 20 72  er just before r
9f20: 65 74 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20  eturning..  */. 
9f30: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
9f40: 73 73 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53  ss!=0.   && nVmS
9f50: 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69  tep>=nProgressLi
9f60: 6d 69 74 0a 20 20 20 26 26 20 64 62 2d 3e 78 50  mit.   && db->xP
9f70: 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f  rogress(db->pPro
9f80: 67 72 65 73 73 41 72 67 29 21 3d 30 0a 20 20 29  gressArg)!=0.  )
9f90: 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
9fa0: 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20  E_INTERRUPT;.   
9fb0: 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
9fc0: 5f 68 61 6c 74 3b 0a 20 20 7d 0a 23 65 6e 64 69  _halt;.  }.#endi
9fd0: 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20  f..  /* If this 
9fe0: 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69  statement has vi
9ff0: 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65  olated immediate
a000: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
a010: 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a  straints, do.  *
a020: 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65  * not return the
a030: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
a040: 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f  modified. And do
a050: 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65   not RELEASE the
a060: 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20   statement.  ** 
a070: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20  transaction. It 
a080: 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c  needs to be roll
a090: 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69  ed back.  */.  i
a0a0: 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72  f( SQLITE_OK!=(r
a0b0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
a0c0: 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b  heckFk(p, 0)) ){
a0d0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
a0e0: 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f  >flags&SQLITE_Co
a0f0: 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61  untRows );.    a
a100: 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74  ssert( p->usesSt
a110: 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20  mtJournal );.   
a120: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
a130: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
a140: 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69  CountRows flag i
a150: 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33  s set in sqlite3
a160: 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
a170: 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74  n .  ** DML stat
a180: 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68  ements invoke th
a190: 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74  is opcode to ret
a1a0: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
a1b0: 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64  f rows .  ** mod
a1c0: 69 66 69 65 64 20 74 6f 20 74 68 65 20 75 73 65  ified to the use
a1d0: 72 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 6f  r. This is the o
a1e0: 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61 20 56  nly way that a V
a1f0: 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e  M that.  ** open
a200: 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  s a statement tr
a210: 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e  ansaction may in
a220: 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65  voke this opcode
a230: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63  ..  **.  ** In c
a240: 61 73 65 20 74 68 69 73 20 69 73 20 73 75 63 68  ase this is such
a250: 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c   a statement, cl
a260: 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e  ose any statemen
a270: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20  t transaction.  
a280: 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69  ** opened by thi
a290: 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75  s VM before retu
a2a0: 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f  rning control to
a2b0: 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20   the user. This 
a2c0: 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72  is to.  ** ensur
a2d0: 65 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74  e that statement
a2e0: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72  -transactions ar
a2f0: 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c  e always nested,
a300: 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67   not overlapping
a310: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70  ..  ** If the op
a320: 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  en statement-tra
a330: 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
a340: 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65  closed here, the
a350: 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20  n the user.  ** 
a360: 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72  may step another
a370: 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69   VM that opens i
a380: 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74  ts own statement
a390: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68   transaction. Th
a3a0: 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64  is.  ** may lead
a3b0: 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20   to overlapping 
a3c0: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
a3d0: 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a  ctions..  **.  *
a3e0: 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20  * The statement 
a3f0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
a400: 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c  ever a top-level
a410: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48   transaction.  H
a420: 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45  ence.  ** the RE
a430: 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77  LEASE call below
a440: 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e   can never fail.
a450: 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
a460: 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30  p->iStatement==0
a470: 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51   || db->flags&SQ
a480: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29  LITE_CountRows )
a490: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
a4a0: 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65  VdbeCloseStateme
a4b0: 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f  nt(p, SAVEPOINT_
a4c0: 52 45 4c 45 41 53 45 29 3b 0a 20 20 69 66 28 20  RELEASE);.  if( 
a4d0: 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45  NEVER(rc!=SQLITE
a4e0: 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72 65 61  _OK) ){.    brea
a4f0: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76  k;.  }..  /* Inv
a500: 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65  alidate all ephe
a510: 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77  meral cursor row
a520: 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e   caches */.  p->
a530: 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63  cacheCtr = (p->c
a540: 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a  acheCtr + 2)|1;.
a550: 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
a560: 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
a570: 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61  he current row a
a580: 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74  re \000 terminat
a590: 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65  ed.  ** and have
a5a0: 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70   an assigned typ
a5b0: 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20  e.  The results 
a5c0: 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c  are de-ephemeral
a5d0: 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 20 73  ized as.  ** a s
a5e0: 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f  ide effect..  */
a5f0: 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65  .  pMem = p->pRe
a600: 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b  sultSet = &aMem[
a610: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28  pOp->p1];.  for(
a620: 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20  i=0; i<pOp->p2; 
a630: 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  i++){.    assert
a640: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70 4d  ( memIsValid(&pM
a650: 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44 65  em[i]) );.    De
a660: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d  ephemeralize(&pM
a670: 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73 65  em[i]);.    asse
a680: 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61  rt( (pMem[i].fla
a690: 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d  gs & MEM_Ephem)=
a6a0: 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c  =0.            |
a6b0: 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73  | (pMem[i].flags
a6c0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
a6d0: 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20  Blob))==0 );.   
a6e0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e   sqlite3VdbeMemN
a6f0: 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65  ulTerminate(&pMe
a700: 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49 53  m[i]);.    REGIS
a710: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
a720: 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a  1+i, &pMem[i]);.
a730: 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61    }.  if( db->ma
a740: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74  llocFailed ) got
a750: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20  o no_mem;..  /* 
a760: 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f  Return SQLITE_RO
a770: 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d  W.  */.  p->pc =
a780: 20 70 63 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20   pc + 1;.  rc = 
a790: 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f  SQLITE_ROW;.  go
a7a0: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
a7b0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
a7c0: 6e 63 61 74 20 50 31 20 50 32 20 50 33 20 2a 20  ncat P1 P2 P3 * 
a7d0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
a7e0: 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d  [P3]=r[P2]+r[P1]
a7f0: 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74  .**.** Add the t
a800: 65 78 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ext in register 
a810: 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20  P1 onto the end 
a820: 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a  of the text in.*
a830: 2a 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  * register P2 an
a840: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
a850: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
a860: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
a870: 74 68 65 20 50 31 20 6f 72 20 50 32 20 74 65 78  the P1 or P2 tex
a880: 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  t are NULL then 
a890: 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33  store NULL in P3
a8a0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50  ..**.**   P3 = P
a8b0: 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74  2 || P1.**.** It
a8c0: 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20   is illegal for 
a8d0: 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20  P1 and P3 to be 
a8e0: 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65  the same registe
a8f0: 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a  r. Sometimes,.**
a900: 20 69 66 20 50 33 20 69 73 20 74 68 65 20 73 61   if P3 is the sa
a910: 6d 65 20 72 65 67 69 73 74 65 72 20 61 73 20 50  me register as P
a920: 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  2, the implement
a930: 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a  ation is able.**
a940: 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63   to avoid a memc
a950: 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  py()..*/.case OP
a960: 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20  _Concat: {      
a970: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
a980: 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20  TK_CONCAT, in1, 
a990: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
a9a0: 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e  64 nByte;..  pIn
a9b0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
a9c0: 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
a9d0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
a9e0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
a9f0: 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
aa00: 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20  pIn1!=pOut );.  
aa10: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
aa20: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20   | pIn2->flags) 
aa30: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
aa40: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
aa50: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
aa60: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
aa70: 69 66 28 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  if( ExpandBlob(p
aa80: 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c  In1) || ExpandBl
aa90: 6f 62 28 70 49 6e 32 29 20 29 20 67 6f 74 6f 20  ob(pIn2) ) goto 
aaa0: 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67  no_mem;.  String
aab0: 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69  ify(pIn1, encodi
aac0: 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79  ng);.  Stringify
aad0: 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn2, encoding)
aae0: 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31  ;.  nByte = pIn1
aaf0: 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20  ->n + pIn2->n;. 
ab00: 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61   if( nByte>db->a
ab10: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
ab20: 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
ab30: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
ab40: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
ab50: 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
ab60: 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c  t, (int)nByte+2,
ab70: 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a   pOut==pIn2) ){.
ab80: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
ab90: 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70  .  }.  MemSetTyp
aba0: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
abb0: 53 74 72 29 3b 0a 20 20 69 66 28 20 70 4f 75 74  Str);.  if( pOut
abc0: 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65  !=pIn2 ){.    me
abd0: 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49  mcpy(pOut->z, pI
abe0: 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b  n2->z, pIn2->n);
abf0: 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70  .  }.  memcpy(&p
ac00: 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c  Out->z[pIn2->n],
ac10: 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e   pIn1->z, pIn1->
ac20: 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42  n);.  pOut->z[nB
ac30: 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e  yte]=0;.  pOut->
ac40: 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a  z[nByte+1] = 0;.
ac50: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
ac60: 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75   MEM_Term;.  pOu
ac70: 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74  t->n = (int)nByt
ac80: 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  e;.  pOut->enc =
ac90: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
aca0: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
acb0: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
acc0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
acd0: 64 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  dd P1 P2 P3 * *.
ace0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
acf0: 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a  P3]=r[P1]+r[P2].
ad00: 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61  **.** Add the va
ad10: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
ad20: 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P1 to the value 
ad30: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
ad40: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
ad50: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
ad60: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
ad70: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
ad80: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
ad90: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
ada0: 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31  ode: Multiply P1
adb0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
adc0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
add0: 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]*r[P2].**.**
ade0: 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65  .** Multiply the
adf0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
ae00: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
ae10: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
ae20: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
ae30: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
ae40: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
ae50: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
ae60: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
ae70: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
ae80: 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74  Opcode: Subtract
ae90: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
aea0: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
aeb0: 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]-r[P1].**
aec0: 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65  .** Subtract the
aed0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
aee0: 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76  er P1 from the v
aef0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
af00: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
af10: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
af20: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
af30: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
af40: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
af50: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
af60: 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65  * Opcode: Divide
af70: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
af80: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
af90: 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]/r[P1].**
afa0: 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76  .** Divide the v
afb0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
afc0: 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65   P1 by the value
afd0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
afe0: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
aff0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
b000: 74 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31  ter P3 (P3=P2/P1
b010: 29 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ). If the value 
b020: 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  in .** register 
b030: 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e  P1 is zero, then
b040: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
b050: 55 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69  ULL. If either i
b060: 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c  nput is .** NULL
b070: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
b080: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
b090: 64 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31  de: Remainder P1
b0a0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
b0b0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
b0c0: 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]%r[P1].**.**
b0d0: 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d   Compute the rem
b0e0: 61 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74  ainder after int
b0f0: 65 67 65 72 20 72 65 67 69 73 74 65 72 20 50 32  eger register P2
b100: 20 69 73 20 64 69 76 69 64 65 64 20 62 79 20 0a   is divided by .
b110: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 61  ** register P1 a
b120: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
b130: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b140: 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76  P3. .** If the v
b150: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b160: 20 50 31 20 69 73 20 7a 65 72 6f 20 74 68 65 20   P1 is zero the 
b170: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b180: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  ** If either ope
b190: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68  rand is NULL, th
b1a0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b1b0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
b1c0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
b1d0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b1e0: 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32  K_PLUS, in1, in2
b1f0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
b200: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20  P_Subtract:     
b210: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
b220: 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e   as TK_MINUS, in
b230: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b240: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
b250: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
b260: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41  * same as TK_STA
b270: 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
b280: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76  3 */.case OP_Div
b290: 69 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  ide:            
b2a0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b2b0: 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e  K_SLASH, in1, in
b2c0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
b2d0: 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20  OP_Remainder: { 
b2e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
b2f0: 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31  e as TK_REM, in1
b300: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
b310: 20 63 68 61 72 20 62 49 6e 74 69 6e 74 3b 20 20   char bIntint;  
b320: 20 2f 2a 20 53 74 61 72 74 65 64 20 6f 75 74 20   /* Started out 
b330: 61 73 20 74 77 6f 20 69 6e 74 65 67 65 72 20 6f  as two integer o
b340: 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20 75 31 36  perands */.  u16
b350: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20   flags;      /* 
b360: 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66  Combined MEM_* f
b370: 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69  lags from both i
b380: 6e 70 75 74 73 20 2a 2f 0a 20 20 75 31 36 20 74  nputs */.  u16 t
b390: 79 70 65 31 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ype1;      /* Nu
b3a0: 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 6c 65  meric type of le
b3b0: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
b3c0: 75 31 36 20 74 79 70 65 32 3b 20 20 20 20 20 20  u16 type2;      
b3d0: 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20  /* Numeric type 
b3e0: 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  of right operand
b3f0: 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20   */.  i64 iA;   
b400: 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72        /* Integer
b410: 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f   value of left o
b420: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20  perand */.  i64 
b430: 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  iB;         /* I
b440: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20  nteger value of 
b450: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
b460: 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20  .  double rA;   
b470: 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65     /* Real value
b480: 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64   of left operand
b490: 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b   */.  double rB;
b4a0: 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61        /* Real va
b4b0: 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  lue of right ope
b4c0: 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  rand */..  pIn1 
b4d0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
b4e0: 3b 0a 20 20 74 79 70 65 31 20 3d 20 6e 75 6d 65  ;.  type1 = nume
b4f0: 72 69 63 54 79 70 65 28 70 49 6e 31 29 3b 0a 20  ricType(pIn1);. 
b500: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
b510: 70 2d 3e 70 32 5d 3b 0a 20 20 74 79 70 65 32 20  p->p2];.  type2 
b520: 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49  = numericType(pI
b530: 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  n2);.  pOut = &a
b540: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
b550: 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c  flags = pIn1->fl
b560: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
b570: 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 20  s;.  if( (flags 
b580: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29  & MEM_Null)!=0 )
b590: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
b5a0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
b5b0: 0a 20 20 69 66 28 20 28 74 79 70 65 31 20 26 20  .  if( (type1 & 
b5c0: 74 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e 74 29  type2 & MEM_Int)
b5d0: 21 3d 30 20 29 7b 0a 20 20 20 20 69 41 20 3d 20  !=0 ){.    iA = 
b5e0: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69  pIn1->u.i;.    i
b5f0: 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  B = pIn2->u.i;. 
b600: 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31 3b 0a     bIntint = 1;.
b610: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
b620: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
b630: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
b640: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 41      if( sqlite3A
b650: 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ddInt64(&iB,iA) 
b660: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
b670: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
b680: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
b690: 20 69 66 28 20 73 71 6c 69 74 65 33 53 75 62 49   if( sqlite3SubI
b6a0: 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67  nt64(&iB,iA) ) g
b6b0: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72  oto fp_math;  br
b6c0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
b6d0: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66  OP_Multiply:  if
b6e0: 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36  ( sqlite3MulInt6
b6f0: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
b700: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
b710: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
b720: 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20  Divide: {.      
b730: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
b740: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
b750: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
b760: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
b770: 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54   && iB==SMALLEST
b780: 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20 66 70  _INT64 ) goto fp
b790: 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20 20 69  _math;.        i
b7a0: 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20 20  B /= iA;.       
b7b0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
b7c0: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b        default: {
b7d0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
b7e0: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
b7f0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
b800: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
b810: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
b820: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25 3d 20  ;.        iB %= 
b830: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
b840: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
b850: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
b860: 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   iB;.    MemSetT
b870: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
b880: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  M_Int);.  }else{
b890: 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 30  .    bIntint = 0
b8a0: 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72  ;.fp_math:.    r
b8b0: 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  A = sqlite3VdbeR
b8c0: 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  ealValue(pIn1);.
b8d0: 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74 65 33      rB = sqlite3
b8e0: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
b8f0: 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28  n2);.    switch(
b900: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
b910: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64        case OP_Ad
b920: 64 3a 20 20 20 20 20 20 20 20 20 72 42 20 2b 3d  d:         rB +=
b930: 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b   rA;       break
b940: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
b950: 53 75 62 74 72 61 63 74 3a 20 20 20 20 72 42 20  Subtract:    rB 
b960: 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  -= rA;       bre
b970: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
b980: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 72  P_Multiply:    r
b990: 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B *= rA;       b
b9a0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
b9b0: 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20   OP_Divide: {.  
b9c0: 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65        /* (double
b9d0: 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51  )0 In case of SQ
b9e0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
b9f0: 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20  NG_POINT... */. 
ba00: 20 20 20 20 20 20 20 69 66 28 20 72 41 3d 3d 28         if( rA==(
ba10: 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74 6f 20  double)0 ) goto 
ba20: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
ba30: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
ba40: 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20     rB /= rA;.   
ba50: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
ba60: 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c    }.      defaul
ba70: 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 41 20  t: {.        iA 
ba80: 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20 20 20  = (i64)rA;.     
ba90: 20 20 20 69 42 20 3d 20 28 69 36 34 29 72 42 3b     iB = (i64)rB;
baa0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
bab0: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
bac0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
bad0: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
bae0: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
baf0: 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d 20 28  ;.        rB = (
bb00: 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69 41 29  double)(iB % iA)
bb10: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
bb20: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
bb30: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
bb40: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
bb50: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
bb60: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
bb70: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
bb80: 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20  M_Int);.#else.  
bb90: 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e    if( sqlite3IsN
bba0: 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20 20 20  aN(rB) ){.      
bbb0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
bbc0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
bbd0: 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e      }.    pOut->
bbe0: 75 2e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65  u.r = rB;.    Me
bbf0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
bc00: 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20  t, MEM_Real);.  
bc10: 20 20 69 66 28 20 28 28 74 79 70 65 31 7c 74 79    if( ((type1|ty
bc20: 70 65 32 29 26 4d 45 4d 5f 52 65 61 6c 29 3d 3d  pe2)&MEM_Real)==
bc30: 30 20 26 26 20 21 62 49 6e 74 69 6e 74 20 29 7b  0 && !bIntint ){
bc40: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
bc50: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
bc60: 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23  y(pOut);.    }.#
bc70: 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
bc80: 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72  k;..arithmetic_r
bc90: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20  esult_is_null:. 
bca0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
bcb0: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
bcc0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
bcd0: 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20  ode: CollSeq P1 
bce0: 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  * * P4.**.** P4 
bcf0: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
bd00: 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74  a CollSeq struct
bd10: 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20 63 61  . If the next ca
bd20: 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e  ll to a user fun
bd30: 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72  ction.** or aggr
bd40: 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69  egate calls sqli
bd50: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
bd60: 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74  q(), this collat
bd70: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c  ion sequence wil
bd80: 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64  l.** be returned
bd90: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62  . This is used b
bda0: 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d  y the built-in m
bdb0: 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20  in(), max() and 
bdc0: 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63  nullif().** func
bdd0: 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  tions..**.** If 
bde0: 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P1 is not zero, 
bdf0: 74 68 65 6e 20 69 74 20 69 73 20 61 20 72 65 67  then it is a reg
be00: 69 73 74 65 72 20 74 68 61 74 20 61 20 73 75 62  ister that a sub
be10: 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72  sequent min() or
be20: 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67  .** max() aggreg
be30: 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20  ate will set to 
be40: 31 20 69 66 20 74 68 65 20 63 75 72 72 65 6e 74  1 if the current
be50: 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20   row is not the 
be60: 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61  minimum or.** ma
be70: 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72  ximum.  The P1 r
be80: 65 67 69 73 74 65 72 20 69 73 20 69 6e 69 74 69  egister is initi
be90: 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74  alized to 0 by t
bea0: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
beb0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  .**.** The inter
bec0: 66 61 63 65 20 75 73 65 64 20 62 79 20 74 68 65  face used by the
bed0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
bee0: 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74  of the aforement
bef0: 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a  ioned functions.
bf00: 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65 20 74  ** to retrieve t
bf10: 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
bf20: 75 65 6e 63 65 20 73 65 74 20 62 79 20 74 68 69  uence set by thi
bf30: 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20  s opcode is not 
bf40: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62  available.** pub
bf50: 6c 69 63 6c 79 2e 20 20 4f 6e 6c 79 20 62 75 69  licly.  Only bui
bf60: 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20  lt-in functions 
bf70: 68 61 76 65 20 61 63 63 65 73 73 20 74 6f 20 74  have access to t
bf80: 68 69 73 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a  his feature..*/.
bf90: 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a  case OP_CollSeq:
bfa0: 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
bfb0: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ->p4type==P4_COL
bfc0: 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20 70 4f  LSEQ );.  if( pO
bfd0: 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c  p->p1 ){.    sql
bfe0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
bff0: 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t64(&aMem[pOp->p
c000: 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72  1], 0);.  }.  br
c010: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
c020: 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31 20 50  e: Function P1 P
c030: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
c040: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66 75  nopsis: r[P3]=fu
c050: 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a  nc(r[P2@P5]).**.
c060: 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72  ** Invoke a user
c070: 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73   function (P4 is
c080: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
c090: 46 75 6e 63 74 69 6f 6e 20 73 74 72 75 63 74 75  Function structu
c0a0: 72 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e  re that.** defin
c0b0: 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 29  es the function)
c0c0: 20 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e   with P5 argumen
c0d0: 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  ts taken from re
c0e0: 67 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a  gister P2 and.**
c0f0: 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68   successors.  Th
c100: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
c110: 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72  function is stor
c120: 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
c130: 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  3..** Register P
c140: 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e  3 must not be on
c150: 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
c160: 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20  n inputs..**.** 
c170: 50 31 20 69 73 20 61 20 33 32 2d 62 69 74 20 62  P1 is a 32-bit b
c180: 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e  itmask indicatin
c190: 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
c1a0: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74   each argument t
c1b0: 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69  o the .** functi
c1c0: 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65  on was determine
c1d0: 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74  d to be constant
c1e0: 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65   at compile time
c1f0: 2e 20 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a  . If the first.*
c200: 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63  * argument was c
c210: 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74  onstant then bit
c220: 20 30 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e   0 of P1 is set.
c230: 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f   This is used to
c240: 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68   determine.** wh
c250: 65 74 68 65 72 20 6d 65 74 61 20 64 61 74 61 20  ether meta data 
c260: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
c270: 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  a user function 
c280: 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74  argument using t
c290: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65  he.** sqlite3_se
c2a0: 74 5f 61 75 78 64 61 74 61 28 29 20 41 50 49 20  t_auxdata() API 
c2b0: 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20 72 65  may be safely re
c2c0: 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65  tained until the
c2d0: 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74   next.** invocat
c2e0: 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f  ion of this opco
c2f0: 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  de..**.** See al
c300: 73 6f 3a 20 41 67 67 53 74 65 70 20 61 6e 64 20  so: AggStep and 
c310: 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65  AggFinal.*/.case
c320: 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a   OP_Function: {.
c330: 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a    int i;.  Mem *
c340: 70 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  pArg;.  sqlite3_
c350: 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73  context ctx;.  s
c360: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
c370: 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a  pVal;.  int n;..
c380: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20    n = pOp->p5;. 
c390: 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72   apVal = p->apAr
c3a0: 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56  g;.  assert( apV
c3b0: 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20  al || n==0 );.  
c3c0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
c3d0: 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
c3e0: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
c3f0: 72 29 20 29 3b 0a 20 20 63 74 78 2e 70 4f 75 74  r) );.  ctx.pOut
c400: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
c410: 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
c420: 68 61 6e 67 65 28 70 2c 20 63 74 78 2e 70 4f 75  hange(p, ctx.pOu
c430: 74 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 6e  t);..  assert( n
c440: 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e  ==0 || (pOp->p2>
c450: 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d  0 && pOp->p2+n<=
c460: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
c470: 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61 73 73  sor)+1) );.  ass
c480: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70  ert( pOp->p3<pOp
c490: 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e  ->p2 || pOp->p3>
c4a0: 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20  =pOp->p2+n );.  
c4b0: 70 41 72 67 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pArg = &aMem[pOp
c4c0: 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d 30  ->p2];.  for(i=0
c4d0: 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72 67  ; i<n; i++, pArg
c4e0: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
c4f0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 41 72 67   memIsValid(pArg
c500: 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69  ) );.    apVal[i
c510: 5d 20 3d 20 70 41 72 67 3b 0a 20 20 20 20 44 65  ] = pArg;.    De
c520: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 41 72  ephemeralize(pAr
c530: 67 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  g);.    REGISTER
c540: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69  _TRACE(pOp->p2+i
c550: 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20 20  , pArg);.  }..  
c560: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
c570: 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20  ype==P4_FUNCDEF 
c580: 29 3b 0a 20 20 63 74 78 2e 70 46 75 6e 63 20 3d  );.  ctx.pFunc =
c590: 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a   pOp->p4.pFunc;.
c5a0: 20 20 63 74 78 2e 69 4f 70 20 3d 20 70 63 3b 0a    ctx.iOp = pc;.
c5b0: 20 20 63 74 78 2e 70 56 64 62 65 20 3d 20 70 3b    ctx.pVdbe = p;
c5c0: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
c5d0: 67 28 63 74 78 2e 70 4f 75 74 2c 20 4d 45 4d 5f  g(ctx.pOut, MEM_
c5e0: 4e 75 6c 6c 29 3b 0a 20 20 63 74 78 2e 66 45 72  Null);.  ctx.fEr
c5f0: 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20 20  rorOrAux = 0;.  
c600: 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  db->lastRowid = 
c610: 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 28 2a 63  lastRowid;.  (*c
c620: 74 78 2e 70 46 75 6e 63 2d 3e 78 46 75 6e 63 29  tx.pFunc->xFunc)
c630: 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29  (&ctx, n, apVal)
c640: 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30  ; /* IMP: R-2450
c650: 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 6c 61 73  5-23230 */.  las
c660: 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73  tRowid = db->las
c670: 74 52 6f 77 69 64 3b 20 20 2f 2a 20 52 65 6d 65  tRowid;  /* Reme
c680: 6d 62 65 72 20 72 6f 77 69 64 20 63 68 61 6e 67  mber rowid chang
c690: 65 73 20 6d 61 64 65 20 62 79 20 78 46 75 6e 63  es made by xFunc
c6a0: 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   */..  /* If the
c6b0: 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
c6c0: 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74 68 72  ed an error, thr
c6d0: 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  ow an exception 
c6e0: 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 66 45 72  */.  if( ctx.fEr
c6f0: 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20 20 20  rorOrAux ){.    
c700: 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20  if( ctx.isError 
c710: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
c720: 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
c730: 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
c740: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
c750: 65 78 74 28 63 74 78 2e 70 4f 75 74 29 29 3b 0a  ext(ctx.pOut));.
c760: 20 20 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69        rc = ctx.i
c770: 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  sError;.    }.  
c780: 20 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c    sqlite3VdbeDel
c790: 65 74 65 41 75 78 44 61 74 61 28 70 2c 20 70 63  eteAuxData(p, pc
c7a0: 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 7d 0a  , pOp->p1);.  }.
c7b0: 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72  .  /* Copy the r
c7c0: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
c7d0: 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73  ction into regis
c7e0: 74 65 72 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69  ter P3 */.  sqli
c7f0: 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
c800: 6f 64 69 6e 67 28 63 74 78 2e 70 4f 75 74 2c 20  oding(ctx.pOut, 
c810: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28  encoding);.  if(
c820: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
c830: 6f 6f 42 69 67 28 63 74 78 2e 70 4f 75 74 29 20  ooBig(ctx.pOut) 
c840: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
c850: 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 52 45 47 49  big;.  }..  REGI
c860: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
c870: 70 33 2c 20 63 74 78 2e 70 4f 75 74 29 3b 0a 20  p3, ctx.pOut);. 
c880: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
c890: 53 49 5a 45 28 63 74 78 2e 70 4f 75 74 29 3b 0a  SIZE(ctx.pOut);.
c8a0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
c8b0: 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31  pcode: BitAnd P1
c8c0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
c8d0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
c8e0: 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]&r[P2].**.**
c8f0: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
c900: 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  se AND of the va
c910: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
c920: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
c930: 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  * store the resu
c940: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
c950: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
c960: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
c970: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
c980: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
c990: 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33 20   BitOr P1 P2 P3 
c9a0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
c9b0: 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b    r[P3]=r[P1]|r[
c9c0: 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  P2].**.** Take t
c9d0: 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f  he bit-wise OR o
c9e0: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
c9f0: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
ca00: 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
ca10: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
ca20: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
ca30: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
ca40: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
ca50: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
ca60: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65   Opcode: ShiftLe
ca70: 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ft P1 P2 P3 * *.
ca80: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
ca90: 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d  P3]=r[P2]<<r[P1]
caa0: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
cab0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
cac0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
cad0: 20 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65   the left by the
cae0: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  .** number of bi
caf0: 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ts specified by 
cb00: 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72  the integer in r
cb10: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53  egister P1..** S
cb20: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
cb30: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
cb40: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
cb50: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
cb60: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
cb70: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
cb80: 69 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50  iftRight P1 P2 P
cb90: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
cba0: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e  s:  r[P3]=r[P2]>
cbb0: 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69  >r[P1].**.** Shi
cbc0: 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  ft the integer v
cbd0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
cbe0: 20 50 32 20 74 6f 20 74 68 65 20 72 69 67 68 74   P2 to the right
cbf0: 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65   by the.** numbe
cc00: 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66  r of bits specif
cc10: 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67  ied by the integ
cc20: 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
cc30: 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  1..** Store the 
cc40: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
cc50: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
cc60: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
cc70: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
cc80: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
cc90: 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20  P_BitAnd:       
cca0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ccb0: 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20  e as TK_BITAND, 
ccc0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
ccd0: 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a  /.case OP_BitOr:
cce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccf0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
cd00: 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  BITOR, in1, in2,
cd10: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
cd20: 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20  _ShiftLeft:     
cd30: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
cd40: 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69   as TK_LSHIFT, i
cd50: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
cd60: 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69  .case OP_ShiftRi
cd70: 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ght: {          
cd80: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52   /* same as TK_R
cd90: 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  SHIFT, in1, in2,
cda0: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 69   out3 */.  i64 i
cdb0: 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20 20 69  A;.  u64 uA;.  i
cdc0: 36 34 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a  64 iB;.  u8 op;.
cdd0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
cde0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32  pOp->p1];.  pIn2
cdf0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
ce00: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
ce10: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
ce20: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c  ( (pIn1->flags |
ce30: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20   pIn2->flags) & 
ce40: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
ce50: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
ce60: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20  tNull(pOut);.   
ce70: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41   break;.  }.  iA
ce80: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
ce90: 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20  tValue(pIn2);.  
cea0: 69 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  iB = sqlite3Vdbe
ceb0: 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  IntValue(pIn1);.
cec0: 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f    op = pOp->opco
ced0: 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50  de;.  if( op==OP
cee0: 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20 20 20 69  _BitAnd ){.    i
cef0: 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65  A &= iB;.  }else
cf00: 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f   if( op==OP_BitO
cf10: 72 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69  r ){.    iA |= i
cf20: 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69  B;.  }else if( i
cf30: 42 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  B!=0 ){.    asse
cf40: 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74  rt( op==OP_Shift
cf50: 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f  Right || op==OP_
cf60: 53 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20  ShiftLeft );..  
cf70: 20 20 2f 2a 20 49 66 20 73 68 69 66 74 69 6e 67    /* If shifting
cf80: 20 62 79 20 61 20 6e 65 67 61 74 69 76 65 20 61   by a negative a
cf90: 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20 69 6e 20  mount, shift in 
cfa0: 74 68 65 20 6f 74 68 65 72 20 64 69 72 65 63 74  the other direct
cfb0: 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 69  ion */.    if( i
cfc0: 42 3c 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  B<0 ){.      ass
cfd0: 65 72 74 28 20 4f 50 5f 53 68 69 66 74 52 69 67  ert( OP_ShiftRig
cfe0: 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  ht==OP_ShiftLeft
cff0: 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d  +1 );.      op =
d000: 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74 20   2*OP_ShiftLeft 
d010: 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20  + 1 - op;.      
d020: 69 42 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20  iB = iB>(-64) ? 
d030: 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a  -iB : 64;.    }.
d040: 0a 20 20 20 20 69 66 28 20 69 42 3e 3d 36 34 20  .    if( iB>=64 
d050: 29 7b 0a 20 20 20 20 20 20 69 41 20 3d 20 28 69  ){.      iA = (i
d060: 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53  A>=0 || op==OP_S
d070: 68 69 66 74 4c 65 66 74 29 20 3f 20 30 20 3a 20  hiftLeft) ? 0 : 
d080: 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  -1;.    }else{. 
d090: 20 20 20 20 20 6d 65 6d 63 70 79 28 26 75 41 2c       memcpy(&uA,
d0a0: 20 26 69 41 2c 20 73 69 7a 65 6f 66 28 75 41 29   &iA, sizeof(uA)
d0b0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70 3d  );.      if( op=
d0c0: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 7b  =OP_ShiftLeft ){
d0d0: 0a 20 20 20 20 20 20 20 20 75 41 20 3c 3c 3d 20  .        uA <<= 
d0e0: 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  iB;.      }else{
d0f0: 0a 20 20 20 20 20 20 20 20 75 41 20 3e 3e 3d 20  .        uA >>= 
d100: 69 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 53  iB;.        /* S
d110: 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20  ign-extend on a 
d120: 72 69 67 68 74 20 73 68 69 66 74 20 6f 66 20 61  right shift of a
d130: 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72   negative number
d140: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
d150: 69 41 3c 30 20 29 20 75 41 20 7c 3d 20 28 28 28  iA<0 ) uA |= (((
d160: 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66 29  (u64)0xffffffff)
d170: 3c 3c 33 32 29 7c 30 78 66 66 66 66 66 66 66 66  <<32)|0xffffffff
d180: 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20  ) << (64-iB);.  
d190: 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63      }.      memc
d1a0: 70 79 28 26 69 41 2c 20 26 75 41 2c 20 73 69 7a  py(&iA, &uA, siz
d1b0: 65 6f 66 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a  eof(iA));.    }.
d1c0: 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
d1d0: 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79  = iA;.  MemSetTy
d1e0: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
d1f0: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
d200: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64  }../* Opcode: Ad
d210: 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20  dImm  P1 P2 * * 
d220: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
d230: 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a  r[P1]=r[P1]+P2.*
d240: 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f  * .** Add the co
d250: 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65  nstant P2 to the
d260: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
d270: 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65  er P1..** The re
d280: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61  sult is always a
d290: 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a  n integer..**.**
d2a0: 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65   To force any re
d2b0: 67 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20  gister to be an 
d2c0: 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64  integer, just ad
d2d0: 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  d 0..*/.case OP_
d2e0: 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20  AddImm: {       
d2f0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
d300: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
d310: 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p1];.  memAbo
d320: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
d330: 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
d340: 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
d350: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  pIn1);.  pIn1->u
d360: 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  .i += pOp->p2;. 
d370: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
d380: 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20  code: MustBeInt 
d390: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
d3a0: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
d3b0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
d3c0: 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  1 to be an integ
d3d0: 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  er.  If the valu
d3e0: 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f  e.** in P1 is no
d3f0: 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  t an integer and
d400: 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
d410: 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74  rted into an int
d420: 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20  eger.** without 
d430: 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20  data loss, then 
d440: 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
d450: 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32   to P2, or if P2
d460: 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20  ==0.** raise an 
d470: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20  SQLITE_MISMATCH 
d480: 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  exception..*/.ca
d490: 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a  se OP_MustBeInt:
d4a0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
d4b0: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
d4c0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
d4d0: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
d4e0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
d4f0: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61  Int)==0 ){.    a
d500: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
d510: 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  1, SQLITE_AFF_NU
d520: 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29  MERIC, encoding)
d530: 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  ;.    VdbeBranch
d540: 54 61 6b 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61  Taken((pIn1->fla
d550: 67 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20  gs&MEM_Int)==0, 
d560: 32 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  2);.    if( (pIn
d570: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
d580: 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  nt)==0 ){.      
d590: 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29  if( pOp->p2==0 )
d5a0: 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
d5b0: 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a  QLITE_MISMATCH;.
d5c0: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
d5d0: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
d5e0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
d5f0: 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
d600: 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  p2 - 1;.        
d610: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
d620: 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65     }.  }.  MemSe
d630: 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20  tTypeFlag(pIn1, 
d640: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
d650: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
d660: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
d670: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
d680: 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79  de: RealAffinity
d690: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
d6a0: 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  * If register P1
d6b0: 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
d6c0: 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  r convert it to 
d6d0: 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a  a real value..**
d6e0: 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
d6f0: 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78 74  is used when ext
d700: 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74  racting informat
d710: 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d  ion from a colum
d720: 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45  n that.** has RE
d730: 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75  AL affinity.  Su
d740: 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73  ch column values
d750: 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74   may still be st
d760: 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67  ored as.** integ
d770: 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65  ers, for space e
d780: 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61  fficiency, but a
d790: 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20  fter extraction 
d7a0: 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20  we want them.** 
d7b0: 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72  to have only a r
d7c0: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61  eal value..*/.ca
d7d0: 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69  se OP_RealAffini
d7e0: 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ty: {           
d7f0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
d800: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
d810: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
d820: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
d830: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c  M_Int ){.    sql
d840: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
d850: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
d860: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
d870: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
d880: 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63  OMIT_CAST./* Opc
d890: 6f 64 65 3a 20 43 61 73 74 20 50 31 20 50 32 20  ode: Cast P1 P2 
d8a0: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
d8b0: 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31  s: affinity(r[P1
d8c0: 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74  ]).**.** Force t
d8d0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
d8e0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74 68  ster P1 to be th
d8f0: 65 20 74 79 70 65 20 64 65 66 69 6e 65 64 20 62  e type defined b
d900: 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c  y P2..** .** <ul
d910: 3e 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22  >.** <li value="
d920: 39 37 22 3e 20 54 45 58 54 0a 2a 2a 20 3c 6c 69  97"> TEXT.** <li
d930: 20 76 61 6c 75 65 3d 22 39 38 22 3e 20 42 4c 4f   value="98"> BLO
d940: 42 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22  B.** <li value="
d950: 39 39 22 3e 20 4e 55 4d 45 52 49 43 0a 2a 2a 20  99"> NUMERIC.** 
d960: 3c 6c 69 20 76 61 6c 75 65 3d 22 31 30 30 22 3e  <li value="100">
d970: 20 49 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 20   INTEGER.** <li 
d980: 76 61 6c 75 65 3d 22 31 30 31 22 3e 20 52 45 41  value="101"> REA
d990: 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a  L.** </ul>.**.**
d9a0: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
d9b0: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
d9c0: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
d9d0: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
d9e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 61 73 74 3a  */.case OP_Cast:
d9f0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
da00: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
da10: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
da20: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45  =SQLITE_AFF_NONE
da30: 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c   && pOp->p2<=SQL
da40: 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a  ITE_AFF_REAL );.
da50: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
da60: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
da70: 54 45 58 54 20 29 3b 0a 20 20 74 65 73 74 63 61  TEXT );.  testca
da80: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
da90: 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 29 3b 0a  ITE_AFF_NONE );.
daa0: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
dab0: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
dac0: 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 74 65 73  NUMERIC );.  tes
dad0: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
dae0: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
daf0: 45 52 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  ER );.  testcase
db00: 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
db10: 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20  E_AFF_REAL );.  
db20: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
db30: 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p1];.  memAbou
db40: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
db50: 31 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e  1);.  rc = Expan
db60: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 73  dBlob(pIn1);.  s
db70: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 61 73  qlite3VdbeMemCas
db80: 74 28 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c  t(pIn1, pOp->p2,
db90: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50   encoding);.  UP
dba0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
dbb0: 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  E(pIn1);.  break
dbc0: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
dbd0: 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a  LITE_OMIT_CAST *
dbe0: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74  /../* Opcode: Lt
dbf0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
dc00: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
dc10: 72 5b 50 31 5d 3c 72 5b 50 33 5d 20 67 6f 74 6f  r[P1]<r[P3] goto
dc20: 20 50 32 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72   P2.**.** Compar
dc30: 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  e the values in 
dc40: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
dc50: 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c  P3.  If reg(P3)<
dc60: 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20  reg(P1) then.** 
dc70: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
dc80: 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74  P2.  .**.** If t
dc90: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
dca0: 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20 69  NULL bit of P5 i
dcb0: 73 20 73 65 74 20 61 6e 64 20 65 69 74 68 65 72  s set and either
dcc0: 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72   reg(P1) or.** r
dcd0: 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20 74  eg(P3) is NULL t
dce0: 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
dcf0: 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c 49 54  p.  If the SQLIT
dd00: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a  E_JUMPIFNULL .**
dd10: 20 62 69 74 20 69 73 20 63 6c 65 61 72 20 74 68   bit is clear th
dd20: 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
dd30: 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
dd40: 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  d is NULL..**.**
dd50: 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
dd60: 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20  MASK portion of 
dd70: 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66  P5 must be an af
dd80: 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65 72  finity character
dd90: 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46   -.** SQLITE_AFF
dda0: 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46  _TEXT, SQLITE_AF
ddb0: 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73  F_INTEGER, and s
ddc0: 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65  o forth. An atte
ddd0: 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20  mpt is made .** 
dde0: 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69  to coerce both i
ddf0: 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20  nputs according 
de00: 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74 79  to this affinity
de10: 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63   before the.** c
de20: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64  omparison is mad
de30: 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  e. If the SQLITE
de40: 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30  _AFF_MASK is 0x0
de50: 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a  0, then numeric.
de60: 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20 75  ** affinity is u
de70: 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74  sed. Note that t
de80: 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76  he affinity conv
de90: 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72  ersions are stor
dea0: 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20  ed.** back into 
deb0: 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
dec0: 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20  ers P1 and P3.  
ded0: 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63  So this opcode c
dee0: 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73  an cause.** pers
def0: 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74  istent changes t
df00: 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  o registers P1 a
df10: 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63  nd P3..**.** Onc
df20: 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e  e any conversion
df30: 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61  s have taken pla
df40: 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20  ce, and neither 
df50: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a  value is NULL, .
df60: 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61 72  ** the values ar
df70: 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62  e compared. If b
df80: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20 62  oth values are b
df90: 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70  lobs then memcmp
dfa0: 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f  () is.** used to
dfb0: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72   determine the r
dfc0: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f  esults of the co
dfd0: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f  mparison.  If bo
dfe0: 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  th values.** are
dff0: 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20   text, then the 
e000: 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c  appropriate coll
e010: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73  ating function s
e020: 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50  pecified in.** P
e030: 34 20 69 73 20 20 75 73 65 64 20 74 6f 20 64 6f  4 is  used to do
e040: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
e050: 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73    If P4 is not s
e060: 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a  pecified then.**
e070: 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65   memcmp() is use
e080: 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78  d to compare tex
e090: 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f  t string.  If bo
e0a0: 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a  th values are.**
e0b0: 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61   numeric, then a
e0c0: 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69   numeric compari
e0d0: 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20  son is used. If 
e0e0: 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a  the two values.*
e0f0: 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72 65  * are of differe
e100: 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e  nt types, then n
e110: 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69  umbers are consi
e120: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a  dered less than.
e130: 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73  ** strings and s
e140: 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69  trings are consi
e150: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20  dered less than 
e160: 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  blobs..**.** If 
e170: 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  the SQLITE_STORE
e180: 50 32 20 62 69 74 20 6f 66 20 50 35 20 69 73 20  P2 bit of P5 is 
e190: 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f 74  set, then do not
e1a0: 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61 64 2c   jump.  Instead,
e1b0: 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f 6c  .** store a bool
e1c0: 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69 74 68  ean result (eith
e1d0: 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20 4e  er 0, or 1, or N
e1e0: 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74 65 72  ULL) in register
e1f0: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P2..**.** If th
e200: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
e210: 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 50 35  bit is set in P5
e220: 2c 20 74 68 65 6e 20 4e 55 4c 4c 20 76 61 6c 75  , then NULL valu
e230: 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
e240: 64 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 20 6f 6e  d.** equal to on
e250: 65 20 61 6e 6f 74 68 65 72 2c 20 70 72 6f 76 69  e another, provi
e260: 64 65 64 20 74 68 61 74 20 74 68 65 79 20 64 6f  ded that they do
e270: 20 6e 6f 74 20 68 61 76 65 20 74 68 65 69 72 20   not have their 
e280: 4d 45 4d 5f 43 6c 65 61 72 65 64 0a 2a 2a 20 62  MEM_Cleared.** b
e290: 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  it set..*/./* Op
e2a0: 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50  code: Ne P1 P2 P
e2b0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
e2c0: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 72  sis: if r[P1]!=r
e2d0: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
e2e0: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
e2f0: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
e300: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
e310: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
e320: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70  ken if.** the op
e330: 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74  erands in regist
e340: 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72  ers P1 and P3 ar
e350: 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65  e not equal.  Se
e360: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
e370: 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61  for.** additiona
e380: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
e390: 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e  *.** If SQLITE_N
e3a0: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20  ULLEQ is set in 
e3b0: 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  P5 then the resu
e3c0: 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  lt of comparison
e3d0: 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68 65   is always eithe
e3e0: 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c  r.** true or fal
e3f0: 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20  se and is never 
e400: 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f  NULL.  If both o
e410: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
e420: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
e430: 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  .** of compariso
e440: 6e 20 69 73 20 66 61 6c 73 65 2e 20 20 49 66 20  n is false.  If 
e450: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
e460: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
e470: 72 65 73 75 6c 74 20 69 73 20 74 72 75 65 2e 0a  result is true..
e480: 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70  ** If neither op
e490: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
e4a0: 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20  e result is the 
e4b0: 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64  same as it would
e4c0: 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51   be if.** the SQ
e4d0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67  LITE_NULLEQ flag
e4e0: 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72   were omitted fr
e4f0: 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  om P5..*/./* Opc
e500: 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20 50 33  ode: Eq P1 P2 P3
e510: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
e520: 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 72 5b  is: if r[P1]==r[
e530: 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3] goto P2.**.*
e540: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
e550: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
e560: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
e570: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
e580: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
e590: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
e5a0: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
e5b0: 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74   equal..** See t
e5c0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
e5d0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
e5e0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  rmation..**.** I
e5f0: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
e600: 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65  is set in P5 the
e610: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
e620: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c  comparison is al
e630: 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74  ways either.** t
e640: 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64  rue or false and
e650: 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20   is never NULL. 
e660: 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   If both operand
e670: 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  s are NULL then 
e680: 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66  the result.** of
e690: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74   comparison is t
e6a0: 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72 20  rue.  If either 
e6b0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
e6c0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
e6d0: 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20  is false..** If 
e6e0: 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  neither operand 
e6f0: 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75  is NULL the resu
e700: 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  lt is the same a
e710: 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66  s it would be if
e720: 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e  .** the SQLITE_N
e730: 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20  ULLEQ flag were 
e740: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e  omitted from P5.
e750: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .*/./* Opcode: L
e760: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
e770: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
e780: 20 72 5b 50 31 5d 3c 3d 72 5b 50 33 5d 20 67 6f   r[P1]<=r[P3] go
e790: 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
e7a0: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
e7b0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
e7c0: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
e7d0: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
e7e0: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
e7f0: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
e800: 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
e810: 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65  ual to the conte
e820: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
e830: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
e840: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
e850: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
e860: 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
e870: 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20 50  e: Gt P1 P2 P3 P
e880: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
e890: 3a 20 69 66 20 72 5b 50 31 5d 3e 72 5b 50 33 5d  : if r[P1]>r[P3]
e8a0: 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
e8b0: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
e8c0: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
e8d0: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
e8e0: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
e8f0: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
e900: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
e910: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
e920: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
e930: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
e940: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
e950: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
e960: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
e970: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20  /./* Opcode: Ge 
e980: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
e990: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
e9a0: 5b 50 31 5d 3e 3d 72 5b 50 33 5d 20 67 6f 74 6f  [P1]>=r[P3] goto
e9b0: 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P2.**.** This w
e9c0: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
e9d0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
e9e0: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
e9f0: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
ea00: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
ea10: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
ea20: 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
ea30: 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74  qual to the cont
ea40: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
ea50: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
ea60: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
ea70: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
ea80: 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
ea90: 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Eq:            
eaa0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
eab0: 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _EQ, jump, in1, 
eac0: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  in3 */.case OP_N
ead0: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
eae0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
eaf0: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
eb00: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a  3 */.case OP_Lt:
eb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
eb20: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c  * same as TK_LT,
eb30: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
eb40: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20  */.case OP_Le:  
eb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
eb60: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a  same as TK_LE, j
eb70: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
eb80: 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20  .case OP_Gt:    
eb90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
eba0: 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d  me as TK_GT, jum
ebb0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
ebc0: 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20  ase OP_Ge: {    
ebd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ebe0: 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c   as TK_GE, jump,
ebf0: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69   in1, in3 */.  i
ec00: 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20  nt res;         
ec10: 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
ec20: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  the comparison o
ec30: 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70  f pIn1 against p
ec40: 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  In3 */.  char af
ec50: 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20  finity;      /* 
ec60: 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20  Affinity to use 
ec70: 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a  for comparison *
ec80: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b 20  /.  u16 flags1; 
ec90: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
eca0: 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65  of initial value
ecb0: 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20   of pIn1->flags 
ecc0: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33 3b  */.  u16 flags3;
ecd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
ece0: 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
ecf0: 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73  e of pIn3->flags
ed00: 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   */..  pIn1 = &a
ed10: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
ed20: 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
ed30: 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20  ->p3];.  flags1 
ed40: 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20  = pIn1->flags;. 
ed50: 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e   flags3 = pIn3->
ed60: 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c  flags;.  if( (fl
ed70: 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d  ags1 | flags3)&M
ed80: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f  EM_Null ){.    /
ed90: 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70  * One or both op
eda0: 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20  erands are NULL 
edb0: 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  */.    if( pOp->
edc0: 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  p5 & SQLITE_NULL
edd0: 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  EQ ){.      /* I
ede0: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
edf0: 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77 69  is set (which wi
ee00: 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69  ll only happen i
ee10: 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69  f the operator i
ee20: 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71  s.      ** OP_Eq
ee30: 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20   or OP_Ne) then 
ee40: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72  take the jump or
ee50: 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f   not depending o
ee60: 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20 20  n whether.      
ee70: 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f  ** or not both o
ee80: 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c  perands are null
ee90: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
eea0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
eeb0: 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70  code==OP_Eq || p
eec0: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
eed0: 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  e );.      asser
eee0: 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d  t( (flags1 & MEM
eef0: 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a  _Cleared)==0 );.
ef00: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
ef10: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
ef20: 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30 20 29  JUMPIFNULL)==0 )
ef30: 3b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61  ;.      if( (fla
ef40: 67 73 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  gs1&MEM_Null)!=0
ef50: 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67  .       && (flag
ef60: 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a  s3&MEM_Null)!=0.
ef70: 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67 73         && (flags
ef80: 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d  3&MEM_Cleared)==
ef90: 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  0.      ){.     
efa0: 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20     res = 0;  /* 
efb0: 52 65 73 75 6c 74 73 20 61 72 65 20 65 71 75 61  Results are equa
efc0: 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65  l */.      }else
efd0: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  {.        res = 
efe0: 31 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 61  1;  /* Results a
eff0: 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a  re not equal */.
f000: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
f010: 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c 49  e{.      /* SQLI
f020: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65  TE_NULLEQ is cle
f030: 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74 20  ar and at least 
f040: 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  one operand is N
f050: 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68  ULL,.      ** th
f060: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
f070: 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20   always NULL..  
f080: 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20      ** The jump 
f090: 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
f0a0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
f0b0: 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20  L bit is set..  
f0c0: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
f0d0: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
f0e0: 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
f0f0: 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65       pOut = &aMe
f100: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
f110: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
f120: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c  ag(pOut, MEM_Nul
f130: 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49  l);.        REGI
f140: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
f150: 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20  p2, pOut);.     
f160: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
f170: 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
f180: 32 2c 33 29 3b 0a 20 20 20 20 20 20 20 20 69 66  2,3);.        if
f190: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
f1a0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b  TE_JUMPIFNULL ){
f1b0: 0a 20 20 20 20 20 20 20 20 20 20 70 63 20 3d 20  .          pc = 
f1c0: 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 20  pOp->p2-1;.     
f1d0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
f1e0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
f1f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
f200: 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  Neither operand 
f210: 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63  is NULL.  Do a c
f220: 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20  omparison. */.  
f230: 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70    affinity = pOp
f240: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46  ->p5 & SQLITE_AF
f250: 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28 20  F_MASK;.    if( 
f260: 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45  affinity>=SQLITE
f270: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a  _AFF_NUMERIC ){.
f280: 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d        if( (pIn1-
f290: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
f2a0: 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53  t|MEM_Real|MEM_S
f2b0: 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b  tr))==MEM_Str ){
f2c0: 0a 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75  .        applyNu
f2d0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
f2e0: 6e 31 2c 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20  n1,0);.      }. 
f2f0: 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e       if( (pIn3->
f300: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74  flags & (MEM_Int
f310: 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74  |MEM_Real|MEM_St
f320: 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a  r))==MEM_Str ){.
f330: 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d          applyNum
f340: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e  ericAffinity(pIn
f350: 33 2c 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  3,0);.      }.  
f360: 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69    }else if( affi
f370: 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46  nity==SQLITE_AFF
f380: 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20 69  _TEXT ){.      i
f390: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
f3a0: 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26  & MEM_Str)==0 &&
f3b0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
f3c0: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
f3d0: 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  l))!=0 ){.      
f3e0: 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31    testcase( pIn1
f3f0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
f400: 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73  t );.        tes
f410: 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61  tcase( pIn1->fla
f420: 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b  gs & MEM_Real );
f430: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
f440: 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79  VdbeMemStringify
f450: 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 2c  (pIn1, encoding,
f460: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73   1);.        tes
f470: 74 63 61 73 65 28 20 28 66 6c 61 67 73 31 26 4d  tcase( (flags1&M
f480: 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e 31  EM_Dyn) != (pIn1
f490: 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29  ->flags&MEM_Dyn)
f4a0: 20 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67   );.        flag
f4b0: 73 31 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67  s1 = (pIn1->flag
f4c0: 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73  s & ~MEM_TypeMas
f4d0: 6b 29 20 7c 20 28 66 6c 61 67 73 31 20 26 20 4d  k) | (flags1 & M
f4e0: 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20  EM_TypeMask);.  
f4f0: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
f500: 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
f510: 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 70  EM_Str)==0 && (p
f520: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  In3->flags & (ME
f530: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29  M_Int|MEM_Real))
f540: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74  !=0 ){.        t
f550: 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66  estcase( pIn3->f
f560: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
f570: 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61  ;.        testca
f580: 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  se( pIn3->flags 
f590: 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20  & MEM_Real );.  
f5a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
f5b0: 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49  eMemStringify(pI
f5c0: 6e 33 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29  n3, encoding, 1)
f5d0: 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61  ;.        testca
f5e0: 73 65 28 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f  se( (flags3&MEM_
f5f0: 44 79 6e 29 20 21 3d 20 28 70 49 6e 33 2d 3e 66  Dyn) != (pIn3->f
f600: 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b  lags&MEM_Dyn) );
f610: 0a 20 20 20 20 20 20 20 20 66 6c 61 67 73 33 20  .        flags3 
f620: 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  = (pIn3->flags &
f630: 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20   ~MEM_TypeMask) 
f640: 7c 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f  | (flags3 & MEM_
f650: 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20  TypeMask);.     
f660: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73   }.    }.    ass
f670: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
f680: 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20  ==P4_COLLSEQ || 
f690: 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30  pOp->p4.pColl==0
f6a0: 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 31   );.    if( pIn1
f6b0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65  ->flags & MEM_Ze
f6c0: 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ro ){.      sqli
f6d0: 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64  te3VdbeMemExpand
f6e0: 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20 20  Blob(pIn1);.    
f6f0: 20 20 66 6c 61 67 73 31 20 26 3d 20 7e 4d 45 4d    flags1 &= ~MEM
f700: 5f 5a 65 72 6f 3b 0a 20 20 20 20 7d 0a 20 20 20  _Zero;.    }.   
f710: 20 69 66 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73   if( pIn3->flags
f720: 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
f730: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
f740: 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  MemExpandBlob(pI
f750: 6e 33 29 3b 0a 20 20 20 20 20 20 66 6c 61 67 73  n3);.      flags
f760: 33 20 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a  3 &= ~MEM_Zero;.
f770: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 64 62      }.    if( db
f780: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
f790: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
f7a0: 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d    res = sqlite3M
f7b0: 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20  emCompare(pIn3, 
f7c0: 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43  pIn1, pOp->p4.pC
f7d0: 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69 74  oll);.  }.  swit
f7e0: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
f7f0: 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 45  ){.    case OP_E
f800: 71 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3d  q:    res = res=
f810: 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  =0;     break;. 
f820: 20 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20     case OP_Ne:  
f830: 20 20 72 65 73 20 3d 20 72 65 73 21 3d 30 3b 20    res = res!=0; 
f840: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
f850: 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65  ase OP_Lt:    re
f860: 73 20 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20  s = res<0;      
f870: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
f880: 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d 20  OP_Le:    res = 
f890: 72 65 73 3c 3d 30 3b 20 20 20 20 20 62 72 65 61  res<=0;     brea
f8a0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 47  k;.    case OP_G
f8b0: 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e  t:    res = res>
f8c0: 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  0;      break;. 
f8d0: 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20     default:     
f8e0: 20 20 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20    res = res>=0; 
f8f0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
f900: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
f910: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29  SQLITE_STOREP2 )
f920: 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d  {.    pOut = &aM
f930: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
f940: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
f950: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  e(p, pOut);.    
f960: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
f970: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
f980: 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72     pOut->u.i = r
f990: 65 73 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  es;.    REGISTER
f9a0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
f9b0: 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  pOut);.  }else{.
f9c0: 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
f9d0: 6b 65 6e 28 72 65 73 21 3d 30 2c 20 28 70 4f 70  ken(res!=0, (pOp
f9e0: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55  ->p5 & SQLITE_NU
f9f0: 4c 4c 45 51 29 3f 32 3a 33 29 3b 0a 20 20 20 20  LLEQ)?2:3);.    
fa00: 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
fa10: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
fa20: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 2f 2a 20  .    }.  }.  /* 
fa30: 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73  Undo any changes
fa40: 20 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41 66   made by applyAf
fa50: 66 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20  finity() to the 
fa60: 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 2e  input registers.
fa70: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70   */.  assert( (p
fa80: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
fa90: 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 31  _Dyn) == (flags1
faa0: 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20   & MEM_Dyn) );. 
fab0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66   pIn1->flags = f
fac0: 6c 61 67 73 31 3b 0a 20 20 61 73 73 65 72 74 28  lags1;.  assert(
fad0: 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
fae0: 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61  MEM_Dyn) == (fla
faf0: 67 73 33 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29  gs3 & MEM_Dyn) )
fb00: 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  ;.  pIn3->flags 
fb10: 3d 20 66 6c 61 67 73 33 3b 0a 20 20 62 72 65 61  = flags3;.  brea
fb20: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
fb30: 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a   Permutation * *
fb40: 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65   * P4 *.**.** Se
fb50: 74 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f  t the permutatio
fb60: 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 4f 50  n used by the OP
fb70: 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f  _Compare operato
fb80: 72 20 74 6f 20 62 65 20 74 68 65 20 61 72 72 61  r to be the arra
fb90: 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73  y.** of integers
fba0: 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68   in P4..**.** Th
fbb0: 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73  e permutation is
fbc0: 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74 69   only valid unti
fbd0: 6c 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f  l the next OP_Co
fbe0: 6d 70 61 72 65 20 74 68 61 74 20 68 61 73 0a 2a  mpare that has.*
fbf0: 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52  * the OPFLAG_PER
fc00: 4d 55 54 45 20 62 69 74 20 73 65 74 20 69 6e 20  MUTE bit set in 
fc10: 50 35 2e 20 54 79 70 69 63 61 6c 6c 79 20 74 68  P5. Typically th
fc20: 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  e OP_Permutation
fc30: 20 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75   should .** occu
fc40: 72 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 70 72  r immediately pr
fc50: 69 6f 72 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f  ior to the OP_Co
fc60: 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  mpare..*/.case O
fc70: 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b  P_Permutation: {
fc80: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
fc90: 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52  p4type==P4_INTAR
fca0: 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28  RAY );.  assert(
fcb0: 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20   pOp->p4.ai );. 
fcc0: 20 61 50 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d   aPermute = pOp-
fcd0: 3e 70 34 2e 61 69 3b 0a 20 20 62 72 65 61 6b 3b  >p4.ai;.  break;
fce0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
fcf0: 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33 20  ompare P1 P2 P3 
fd00: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
fd10: 73 3a 20 72 5b 50 31 40 50 33 5d 20 3c 2d 3e 20  s: r[P1@P3] <-> 
fd20: 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43  r[P2@P3].**.** C
fd30: 6f 6d 70 61 72 65 20 74 77 6f 20 76 65 63 74 6f  ompare two vecto
fd40: 72 73 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  rs of registers 
fd50: 69 6e 20 72 65 67 28 50 31 29 2e 2e 72 65 67 28  in reg(P1)..reg(
fd60: 50 31 2b 50 33 2d 31 29 20 28 63 61 6c 6c 20 74  P1+P3-1) (call t
fd70: 68 69 73 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41  his.** vector "A
fd80: 22 29 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32  ") and in reg(P2
fd90: 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20  )..reg(P2+P3-1) 
fda0: 28 22 42 22 29 2e 20 20 53 61 76 65 20 74 68 65  ("B").  Save the
fdb0: 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68   result of.** th
fdc0: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72  e comparison for
fdd0: 20 75 73 65 20 62 79 20 74 68 65 20 6e 65 78 74   use by the next
fde0: 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63   OP_Jump instruc
fdf0: 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68  t..**.** If P5 h
fe00: 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45  as the OPFLAG_PE
fe10: 52 4d 55 54 45 20 62 69 74 20 73 65 74 2c 20 74  RMUTE bit set, t
fe20: 68 65 6e 20 74 68 65 20 6f 72 64 65 72 20 6f 66  hen the order of
fe30: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 0a 2a   comparison is.*
fe40: 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  * determined by 
fe50: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
fe60: 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f  OP_Permutation o
fe70: 70 65 72 61 74 6f 72 2e 20 20 49 66 20 74 68 65  perator.  If the
fe80: 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  .** OPFLAG_PERMU
fe90: 54 45 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c  TE bit is clear,
fea0: 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 61   then register a
feb0: 72 65 20 63 6f 6d 70 61 72 65 64 20 69 6e 20 73  re compared in s
fec0: 65 71 75 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64  equential.** ord
fed0: 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  er..**.** P4 is 
fee0: 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
fef0: 75 72 65 20 74 68 61 74 20 64 65 66 69 6e 65 73  ure that defines
ff00: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
ff10: 6e 63 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a  nces and sort.**
ff20: 20 6f 72 64 65 72 73 20 66 6f 72 20 74 68 65 20   orders for the 
ff30: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65  comparison.  The
ff40: 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70   permutation app
ff50: 6c 69 65 73 20 74 6f 20 72 65 67 69 73 74 65 72  lies to register
ff60: 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20  s.** only.  The 
ff70: 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73  KeyInfo elements
ff80: 20 61 72 65 20 75 73 65 64 20 73 65 71 75 65 6e   are used sequen
ff90: 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  tially..**.** Th
ffa0: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  e comparison is 
ffb0: 61 20 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f  a sort compariso
ffc0: 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70  n, so NULLs comp
ffd0: 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55  are equal,.** NU
ffe0: 4c 4c 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  LLs are less tha
fff0: 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65  n numbers, numbe
10000 72 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  rs are less than
10010 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64   strings,.** and
10020 20 73 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73   strings are les
10030 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f  s than blobs..*/
10040 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65  .case OP_Compare
10050 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69  : {.  int n;.  i
10060 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a  nt i;.  int p1;.
10070 20 20 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73    int p2;.  cons
10080 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49  t KeyInfo *pKeyI
10090 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a  nfo;.  int idx;.
100a0 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c    CollSeq *pColl
100b0 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e  ;    /* Collatin
100c0 67 20 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73  g sequence to us
100d0 65 20 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a  e on this term *
100e0 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20  /.  int bRev;   
100f0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66         /* True f
10100 6f 72 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f  or DESCENDING so
10110 72 74 20 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 69  rt order */..  i
10120 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  f( (pOp->p5 & OP
10130 46 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d 3d 30  FLAG_PERMUTE)==0
10140 20 29 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b   ) aPermute = 0;
10150 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  .  n = pOp->p3;.
10160 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70    pKeyInfo = pOp
10170 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
10180 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a   assert( n>0 );.
10190 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
101a0 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20  fo!=0 );.  p1 = 
101b0 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20  pOp->p1;.  p2 = 
101c0 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 20 53 51 4c  pOp->p2;.#if SQL
101d0 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
101e0 61 50 65 72 6d 75 74 65 20 29 7b 0a 20 20 20 20  aPermute ){.    
101f0 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20  int k, mx = 0;. 
10200 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b     for(k=0; k<n;
10210 20 6b 2b 2b 29 20 69 66 28 20 61 50 65 72 6d 75   k++) if( aPermu
10220 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20  te[k]>mx ) mx = 
10230 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20  aPermute[k];.   
10240 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26   assert( p1>0 &&
10250 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d   p1+mx<=(p->nMem
10260 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29  -p->nCursor)+1 )
10270 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  ;.    assert( p2
10280 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d 28 70 2d  >0 && p2+mx<=(p-
10290 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
102a0 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  )+1 );.  }else{.
102b0 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30      assert( p1>0
102c0 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d   && p1+n<=(p->nM
102d0 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
102e0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
102f0 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70  p2>0 && p2+n<=(p
10300 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
10310 72 29 2b 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64  r)+1 );.  }.#end
10320 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  if /* SQLITE_DEB
10330 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b  UG */.  for(i=0;
10340 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20   i<n; i++){.    
10350 69 64 78 20 3d 20 61 50 65 72 6d 75 74 65 20 3f  idx = aPermute ?
10360 20 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69   aPermute[i] : i
10370 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
10380 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
10390 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 61  1+idx]) );.    a
103a0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
103b0 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29  d(&aMem[p2+idx])
103c0 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52   );.    REGISTER
103d0 5f 54 52 41 43 45 28 70 31 2b 69 64 78 2c 20 26  _TRACE(p1+idx, &
103e0 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20  aMem[p1+idx]);. 
103f0 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
10400 45 28 70 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b  E(p2+idx, &aMem[
10410 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61 73  p2+idx]);.    as
10420 73 65 72 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f  sert( i<pKeyInfo
10430 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20 20 20  ->nField );.    
10440 70 43 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f  pColl = pKeyInfo
10450 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20  ->aColl[i];.    
10460 62 52 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d  bRev = pKeyInfo-
10470 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a  >aSortOrder[i];.
10480 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73      iCompare = s
10490 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65  qlite3MemCompare
104a0 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20  (&aMem[p1+idx], 
104b0 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70  &aMem[p2+idx], p
104c0 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20 69  Coll);.    if( i
104d0 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20 20 20  Compare ){.     
104e0 20 69 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d   if( bRev ) iCom
104f0 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65  pare = -iCompare
10500 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
10510 20 20 20 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d     }.  }.  aPerm
10520 75 74 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  ute = 0;.  break
10530 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
10540 4a 75 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20  Jump P1 P2 P3 * 
10550 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
10560 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  the instruction 
10570 61 74 20 61 64 64 72 65 73 73 20 50 31 2c 20 50  at address P1, P
10580 32 2c 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69  2, or P3 dependi
10590 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a  ng on whether.**
105a0 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63   in the most rec
105b0 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69  ent OP_Compare i
105c0 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50  nstruction the P
105d0 31 20 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73  1 vector was les
105e0 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20  s than.** equal 
105f0 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74  to, or greater t
10600 68 61 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f  han the P2 vecto
10610 72 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  r, respectively.
10620 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70  .*/.case OP_Jump
10630 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
10640 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28  /* jump */.  if(
10650 20 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20   iCompare<0 ){. 
10660 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 31 20     pc = pOp->p1 
10670 2d 20 31 3b 20 20 56 64 62 65 42 72 61 6e 63 68  - 1;  VdbeBranch
10680 54 61 6b 65 6e 28 30 2c 33 29 3b 0a 20 20 7d 65  Taken(0,3);.  }e
10690 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72 65  lse if( iCompare
106a0 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  ==0 ){.    pc = 
106b0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 20 20 56 64  pOp->p2 - 1;  Vd
106c0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c  beBranchTaken(1,
106d0 33 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  3);.  }else{.   
106e0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20   pc = pOp->p3 - 
106f0 31 3b 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  1;  VdbeBranchTa
10700 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 7d 0a 20 20  ken(2,3);.  }.  
10710 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
10720 6f 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50  ode: And P1 P2 P
10730 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
10740 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20  s: r[P3]=(r[P1] 
10750 26 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  && r[P2]).**.** 
10760 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c  Take the logical
10770 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75   AND of the valu
10780 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  es in registers 
10790 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
107a0 20 77 72 69 74 65 20 74 68 65 20 72 65 73 75 6c   write the resul
107b0 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  t into register 
107c0 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74  P3..**.** If eit
107d0 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20  her P1 or P2 is 
107e0 30 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74  0 (false) then t
107f0 68 65 20 72 65 73 75 6c 74 20 69 73 20 30 20 65  he result is 0 e
10800 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74  ven if.** the ot
10810 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
10820 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74  L.  A NULL and t
10830 72 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73  rue or two NULLs
10840 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20   give.** a NULL 
10850 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  output..*/./* Op
10860 63 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50  code: Or P1 P2 P
10870 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
10880 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20  s: r[P3]=(r[P1] 
10890 7c 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  || r[P2]).**.** 
108a0 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c  Take the logical
108b0 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65   OR of the value
108c0 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
108d0 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
108e0 74 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72 20  tore the answer 
108f0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
10900 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  **.** If either 
10910 50 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a  P1 or P2 is nonz
10920 65 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20  ero (true) then 
10930 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 31 20  the result is 1 
10940 28 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69  (true).** even i
10950 66 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75  f the other inpu
10960 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55  t is NULL.  A NU
10970 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20  LL and false or 
10980 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76  two NULLs.** giv
10990 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e  e a NULL output.
109a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a  .*/.case OP_And:
109b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
109c0 20 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c   same as TK_AND,
109d0 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
109e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b  */.case OP_Or: {
109f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10a00 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69  same as TK_OR, i
10a10 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
10a20 0a 20 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a  .  int v1;    /*
10a30 20 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20   Left operand:  
10a40 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
10a50 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
10a60 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76   NULL */.  int v
10a70 32 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f  2;    /* Right o
10a80 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45  perand: 0==FALSE
10a90 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e  , 1==TRUE, 2==UN
10aa0 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f  KNOWN or NULL */
10ab0 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
10ac0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
10ad0 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
10ae0 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76  EM_Null ){.    v
10af0 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  1 = 2;.  }else{.
10b00 20 20 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33      v1 = sqlite3
10b10 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
10b20 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e  1)!=0;.  }.  pIn
10b30 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
10b40 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e  2];.  if( pIn2->
10b50 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
10b60 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a   ){.    v2 = 2;.
10b70 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32 20    }else{.    v2 
10b80 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
10b90 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a  Value(pIn2)!=0;.
10ba0 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f    }.  if( pOp->o
10bb0 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b  pcode==OP_And ){
10bc0 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
10bd0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
10be0 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20  and_logic[] = { 
10bf0 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32  0, 0, 0, 0, 1, 2
10c00 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20  , 0, 2, 2 };.   
10c10 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b   v1 = and_logic[
10c20 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73  v1*3+v2];.  }els
10c30 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  e{.    static co
10c40 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
10c50 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b  r or_logic[] = {
10c60 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20   0, 1, 2, 1, 1, 
10c70 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20  1, 2, 1, 2 };.  
10c80 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b    v1 = or_logic[
10c90 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20  v1*3+v2];.  }.  
10ca0 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
10cb0 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d  ->p3];.  if( v1=
10cc0 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74  =2 ){.    MemSet
10cd0 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
10ce0 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73  EM_Null);.  }els
10cf0 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  e{.    pOut->u.i
10d00 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65   = v1;.    MemSe
10d10 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
10d20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20  MEM_Int);.  }.  
10d30 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
10d40 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a  ode: Not P1 P2 *
10d50 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
10d60 3a 20 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a  : r[P2]= !r[P1].
10d70 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
10d80 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
10d90 69 73 74 65 72 20 50 31 20 61 73 20 61 20 62 6f  ister P1 as a bo
10da0 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74  olean value.  St
10db0 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65  ore the.** boole
10dc0 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e  an complement in
10dd0 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
10de0 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
10df0 65 67 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a  egister P1 is .*
10e00 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e  * NULL, then a N
10e10 55 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ULL is stored in
10e20 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
10e30 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Not: {          
10e40 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
10e50 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75   TK_NOT, in1, ou
10e60 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  t2 */.  pIn1 = &
10e70 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
10e80 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
10e90 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p2];.  sqlite
10ea0 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
10eb0 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70 49  pOut);.  if( (pI
10ec0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
10ed0 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
10ee0 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
10ef0 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d  M_Int;.    pOut-
10f00 3e 75 2e 69 20 3d 20 21 73 71 6c 69 74 65 33 56  >u.i = !sqlite3V
10f10 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
10f20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
10f30 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
10f40 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  tNot P1 P2 * * *
10f50 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
10f60 50 31 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a  P1]= ~r[P1].**.*
10f70 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
10f80 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
10f90 74 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74  ter P1 as an int
10fa0 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65  eger.  Store the
10fb0 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d  .** ones-complem
10fc0 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76 61  ent of the P1 va
10fd0 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
10fe0 72 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c  r P2.  If P1 hol
10ff0 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65  ds.** a NULL the
11000 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69  n store a NULL i
11010 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
11020 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20  _BitNot: {      
11030 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
11040 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31  s TK_BITNOT, in1
11050 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  , out2 */.  pIn1
11060 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
11070 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
11080 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71  m[pOp->p2];.  sq
11090 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
110a0 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66 28  ull(pOut);.  if(
110b0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
110c0 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
110d0 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
110e0 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70  = MEM_Int;.    p
110f0 4f 75 74 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c 69  Out->u.i = ~sqli
11100 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
11110 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
11120 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
11130 3a 20 4f 6e 63 65 20 50 31 20 50 32 20 2a 20 2a  : Once P1 P2 * *
11140 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74   *.**.** Check t
11150 68 65 20 22 6f 6e 63 65 22 20 66 6c 61 67 20 6e  he "once" flag n
11160 75 6d 62 65 72 20 50 31 2e 20 49 66 20 69 74 20  umber P1. If it 
11170 69 73 20 73 65 74 2c 20 6a 75 6d 70 20 74 6f 20  is set, jump to 
11180 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20  instruction P2. 
11190 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 73  .** Otherwise, s
111a0 65 74 20 74 68 65 20 66 6c 61 67 20 61 6e 64 20  et the flag and 
111b0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
111c0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
111d0 74 69 6f 6e 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  tion..** In othe
111e0 72 20 77 6f 72 64 73 2c 20 74 68 69 73 20 6f 70  r words, this op
111f0 63 6f 64 65 20 63 61 75 73 65 73 20 61 6c 6c 20  code causes all 
11200 66 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f 64 65  following opcode
11210 73 20 75 70 20 74 68 72 6f 75 67 68 20 50 32 0a  s up through P2.
11220 2a 2a 20 28 62 75 74 20 6e 6f 74 20 69 6e 63 6c  ** (but not incl
11230 75 64 69 6e 67 20 50 32 29 20 74 6f 20 72 75 6e  uding P2) to run
11240 20 6a 75 73 74 20 6f 6e 63 65 20 61 6e 64 20 74   just once and t
11250 6f 20 62 65 20 73 6b 69 70 70 65 64 20 6f 6e 20  o be skipped on 
11260 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 74 69  subsequent.** ti
11270 6d 65 73 20 74 68 72 6f 75 67 68 20 74 68 65 20  mes through the 
11280 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  loop..**.** All 
11290 22 6f 6e 63 65 22 20 66 6c 61 67 73 20 61 72 65  "once" flags are
112a0 20 69 6e 69 74 69 61 6c 6c 79 20 63 6c 65 61 72   initially clear
112b0 65 64 20 77 68 65 6e 65 76 65 72 20 61 20 70 72  ed whenever a pr
112c0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
112d0 0a 2a 2a 20 66 69 72 73 74 20 62 65 67 69 6e 73  .** first begins
112e0 20 74 6f 20 72 75 6e 2e 0a 2a 2f 0a 63 61 73 65   to run..*/.case
112f0 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20   OP_Once: {     
11300 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
11310 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
11320 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46 6c 61  ->p1<p->nOnceFla
11330 67 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  g );.  VdbeBranc
11340 68 54 61 6b 65 6e 28 70 2d 3e 61 4f 6e 63 65 46  hTaken(p->aOnceF
11350 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 2c  lag[pOp->p1]!=0,
11360 20 32 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4f   2);.  if( p->aO
11370 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d  nceFlag[pOp->p1]
11380 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
11390 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b  ->p2-1;.  }else{
113a0 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61  .    p->aOnceFla
113b0 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 31 3b 0a  g[pOp->p1] = 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 66 20 50 31  /* Opcode: If P1
113e0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
113f0 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
11400 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
11410 73 74 65 72 20 50 31 20 69 73 20 74 72 75 65 2e  ster P1 is true.
11420 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69    The value.** i
11430 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75  s considered tru
11440 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72  e if it is numer
11450 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e  ic and non-zero.
11460 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
11470 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
11480 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
11490 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  mp if and only i
114a0 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P3 is non-zero
114b0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
114c0 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20 2a  IfNot P1 P2 P3 *
114d0 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
114e0 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
114f0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
11500 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20 76  is False.  The v
11510 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69  alue.** is consi
11520 64 65 72 65 64 20 66 61 6c 73 65 20 69 66 20 69  dered false if i
11530 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20  t has a numeric 
11540 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20  value of zero.  
11550 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
11560 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68  in P1 is NULL th
11570 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
11580 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20   if and only if 
11590 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a  P3 is non-zero..
115a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20  */.case OP_If:  
115b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
115c0 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63  * jump, in1 */.c
115d0 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20  ase OP_IfNot: { 
115e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
115f0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74  mp, in1 */.  int
11600 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   c;.  pIn1 = &aM
11610 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
11620 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
11630 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
11640 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   c = pOp->p3;.  
11650 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20 53 51  }else{.#ifdef SQ
11660 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
11670 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d  NG_POINT.    c =
11680 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
11690 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 23  alue(pIn1)!=0;.#
116a0 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73 71 6c  else.    c = sql
116b0 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75  ite3VdbeRealValu
116c0 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65  e(pIn1)!=0.0;.#e
116d0 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70 4f 70  ndif.    if( pOp
116e0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e  ->opcode==OP_IfN
116f0 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d  ot ) c = !c;.  }
11700 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
11710 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20 20 69  en(c!=0, 2);.  i
11720 66 28 20 63 20 29 7b 0a 20 20 20 20 70 63 20 3d  f( c ){.    pc =
11730 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a   pOp->p2-1;.  }.
11740 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
11750 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31  pcode: IsNull P1
11760 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
11770 6f 70 73 69 73 3a 20 20 69 66 20 72 5b 50 31 5d  opsis:  if r[P1]
11780 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a  ==NULL goto P2.*
11790 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
117a0 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
117b0 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 4e  register P1 is N
117c0 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
117d0 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20  IsNull: {       
117e0 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
117f0 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c  TK_ISNULL, jump,
11800 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
11810 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
11820 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
11830 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  en( (pIn1->flags
11840 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 2c   & MEM_Null)!=0,
11850 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31   2);.  if( (pIn1
11860 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
11870 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20 70 63  ll)!=0 ){.    pc
11880 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
11890 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
118a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75  /* Opcode: NotNu
118b0 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ll P1 P2 * * *.*
118c0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
118d0 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74 6f 20  [P1]!=NULL goto 
118e0 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f  P2.**.** Jump to
118f0 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
11900 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
11910 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a  is not NULL.  .*
11920 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c  /.case OP_NotNul
11930 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
11940 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f  /* same as TK_NO
11950 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31  TNULL, jump, in1
11960 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
11970 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56  em[pOp->p1];.  V
11980 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20  dbeBranchTaken( 
11990 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
119a0 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32 29 3b  EM_Null)==0, 2);
119b0 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
119c0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
119d0 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  =0 ){.    pc = p
119e0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
119f0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
11a00 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31  pcode: Column P1
11a10 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
11a20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
11a30 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  =PX.**.** Interp
11a40 72 65 74 20 74 68 65 20 64 61 74 61 20 74 68 61  ret the data tha
11a50 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e  t cursor P1 poin
11a60 74 73 20 74 6f 20 61 73 20 61 20 73 74 72 75 63  ts to as a struc
11a70 74 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67  ture built using
11a80 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f  .** the MakeReco
11a90 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  rd instruction. 
11aa0 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65   (See the MakeRe
11ab0 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20  cord opcode for 
11ac0 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e  additional.** in
11ad0 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
11ae0 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68  the format of th
11af0 65 20 64 61 74 61 2e 29 20 20 45 78 74 72 61 63  e data.)  Extrac
11b00 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75  t the P2-th colu
11b10 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20  mn.** from this 
11b20 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72  record.  If ther
11b30 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 74 20  e are less that 
11b40 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65  (P2+1) .** value
11b50 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c  s in the record,
11b60 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e   extract a NULL.
11b70 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  .**.** The value
11b80 20 65 78 74 72 61 63 74 65 64 20 69 73 20 73 74   extracted is st
11b90 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
11ba0 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P3..**.** If th
11bb0 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e  e column contain
11bc0 73 20 66 65 77 65 72 20 74 68 61 6e 20 50 32 20  s fewer than P2 
11bd0 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74  fields, then ext
11be0 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72  ract a NULL.  Or
11bf0 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61  ,.** if the P4 a
11c00 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f  rgument is a P4_
11c10 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75  MEM use the valu
11c20 65 20 6f 66 20 74 68 65 20 50 34 20 61 72 67 75  e of the P4 argu
11c30 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72  ment as.** the r
11c40 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  esult..**.** If 
11c50 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52  the OPFLAG_CLEAR
11c60 43 41 43 48 45 20 62 69 74 20 69 73 20 73 65 74  CACHE bit is set
11c70 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73   on P5 and P1 is
11c80 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   a pseudo-table 
11c90 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20  cursor,.** then 
11ca0 74 68 65 20 63 61 63 68 65 20 6f 66 20 74 68 65  the cache of the
11cb0 20 63 75 72 73 6f 72 20 69 73 20 72 65 73 65 74   cursor is reset
11cc0 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63   prior to extrac
11cd0 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  ting the column.
11ce0 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50  .** The first OP
11cf0 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20  _Column against 
11d00 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61  a pseudo-table a
11d10 66 74 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f  fter the value o
11d20 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a  f the content.**
11d30 20 72 65 67 69 73 74 65 72 20 68 61 73 20 63 68   register has ch
11d40 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76  anged should hav
11d50 65 20 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a  e this bit set..
11d60 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
11d70 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e  LAG_LENGTHARG an
11d80 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  d OPFLAG_TYPEOFA
11d90 52 47 20 62 69 74 73 20 61 72 65 20 73 65 74 20  RG bits are set 
11da0 6f 6e 20 50 35 20 77 68 65 6e 0a 2a 2a 20 74 68  on P5 when.** th
11db0 65 20 72 65 73 75 6c 74 20 69 73 20 67 75 61 72  e result is guar
11dc0 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62  anteed to only b
11dd0 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72  e used as the ar
11de0 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67  gument of a leng
11df0 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f  th().** or typeo
11e00 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65  f() function, re
11e10 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65  spectively.  The
11e20 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72 67   loading of larg
11e30 65 20 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a  e blobs can be.*
11e40 2a 20 73 6b 69 70 70 65 64 20 66 6f 72 20 6c 65  * skipped for le
11e50 6e 67 74 68 28 29 20 61 6e 64 20 61 6c 6c 20 63  ngth() and all c
11e60 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63  ontent loading c
11e70 61 6e 20 62 65 20 73 6b 69 70 70 65 64 20 66 6f  an be skipped fo
11e80 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63  r typeof()..*/.c
11e90 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b  ase OP_Column: {
11ea0 0a 20 20 69 36 34 20 70 61 79 6c 6f 61 64 53 69  .  i64 payloadSi
11eb0 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d 62 65 72 20  ze64; /* Number 
11ec0 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  of bytes in the 
11ed0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
11ee0 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  p2;            /
11ef0 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * column number 
11f00 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20  to retrieve */. 
11f10 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
11f20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
11f30 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75  cursor */.  BtCu
11f40 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f  rsor *pCrsr;   /
11f50 2a 20 54 68 65 20 42 54 72 65 65 20 63 75 72 73  * The BTree curs
11f60 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66  or */.  u32 *aOf
11f70 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f  fset;      /* aO
11f80 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73  ffset[i] is offs
11f90 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64  et to start of d
11fa0 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c  ata for i-th col
11fb0 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e  umn */.  int len
11fc0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
11fd0 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
11fe0 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61   serialized data
11ff0 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20   for the column 
12000 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
12010 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
12020 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d  counter */.  Mem
12030 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20 20   *pDest;        
12040 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74  /* Where to writ
12050 65 20 74 68 65 20 65 78 74 72 61 63 74 65 64 20  e the extracted 
12060 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73  value */.  Mem s
12070 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Mem;          /*
12080 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65   For storing the
12090 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65   record being de
120a0 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74  coded */.  const
120b0 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a   u8 *zData;   /*
120c0 20 50 61 72 74 20 6f 66 20 74 68 65 20 72 65 63   Part of the rec
120d0 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
120e0 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20  d */.  const u8 
120f0 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78  *zHdr;    /* Nex
12100 74 20 75 6e 70 61 72 73 65 64 20 62 79 74 65 20  t unparsed byte 
12110 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f  of the header */
12120 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e  .  const u8 *zEn
12130 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72  dHdr; /* Pointer
12140 20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61   to first byte a
12150 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20  fter the header 
12160 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74 3b  */.  u32 offset;
12170 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65          /* Offse
12180 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20  t into the data 
12190 2a 2f 0a 20 20 75 33 32 20 73 7a 46 69 65 6c 64  */.  u32 szField
121a0 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
121b0 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
121c0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 66  e content of a f
121d0 69 65 6c 64 20 2a 2f 0a 20 20 75 33 32 20 61 76  ield */.  u32 av
121e0 61 69 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ail;         /* 
121f0 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
12200 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 64 61 74  of available dat
12210 61 20 2a 2f 0a 20 20 75 33 32 20 74 3b 20 20 20  a */.  u32 t;   
12220 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74            /* A t
12230 79 70 65 20 63 6f 64 65 20 66 72 6f 6d 20 74 68  ype code from th
12240 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20  e record header 
12250 2a 2f 0a 20 20 75 31 36 20 66 78 3b 20 20 20 20  */.  u16 fx;    
12260 20 20 20 20 20 20 20 20 2f 2a 20 70 44 65 73 74          /* pDest
12270 2d 3e 66 6c 61 67 73 20 76 61 6c 75 65 20 2a 2f  ->flags value */
12280 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20  .  Mem *pReg;   
12290 20 20 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54        /* PseudoT
122a0 61 62 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73  able input regis
122b0 74 65 72 20 2a 2f 0a 0a 20 20 70 32 20 3d 20 70  ter */..  p2 = p
122c0 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
122d0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
122e0 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
122f0 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
12300 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b    pDest = &aMem[
12310 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
12320 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
12330 70 44 65 73 74 29 3b 0a 20 20 61 73 73 65 72 74  pDest);.  assert
12340 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
12350 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
12360 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
12370 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
12380 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
12390 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c  );.  assert( p2<
123a0 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20  pC->nField );.  
123b0 61 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f  aOffset = pC->aO
123c0 66 66 73 65 74 3b 0a 23 69 66 6e 64 65 66 20 53  ffset;.#ifndef S
123d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
123e0 41 4c 54 41 42 4c 45 0a 20 20 61 73 73 65 72 74  ALTABLE.  assert
123f0 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  ( pC->pVtabCurso
12400 72 3d 3d 30 20 29 3b 20 2f 2a 20 4f 50 5f 43 6f  r==0 ); /* OP_Co
12410 6c 75 6d 6e 20 6e 65 76 65 72 20 63 61 6c 6c 65  lumn never calle
12420 64 20 6f 6e 20 76 69 72 74 75 61 6c 20 74 61 62  d on virtual tab
12430 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 70  le */.#endif.  p
12440 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
12450 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
12460 72 73 72 21 3d 30 20 7c 7c 20 70 43 2d 3e 70 73  rsr!=0 || pC->ps
12470 65 75 64 6f 54 61 62 6c 65 52 65 67 3e 30 20 29  eudoTableReg>0 )
12480 3b 20 2f 2a 20 70 43 72 73 72 20 4e 55 4c 4c 20  ; /* pCrsr NULL 
12490 6f 6e 20 50 73 65 75 64 6f 54 61 62 6c 65 73 20  on PseudoTables 
124a0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  */.  assert( pCr
124b0 73 72 21 3d 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c  sr!=0 || pC->nul
124c0 6c 52 6f 77 20 29 3b 20 20 20 20 20 20 20 20 20  lRow );         
124d0 20 2f 2a 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20   /* pC->nullRow 
124e0 6f 6e 20 50 73 65 75 64 6f 54 61 62 6c 65 73 20  on PseudoTables 
124f0 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  */..  /* If the 
12500 63 75 72 73 6f 72 20 63 61 63 68 65 20 69 73 20  cursor cache is 
12510 73 74 61 6c 65 2c 20 62 72 69 6e 67 20 69 74 20  stale, bring it 
12520 75 70 2d 74 6f 2d 64 61 74 65 20 2a 2f 0a 20 20  up-to-date */.  
12530 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
12540 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
12550 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
12560 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
12570 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 43 2d 3e  rror;.  if( pC->
12580 63 61 63 68 65 53 74 61 74 75 73 21 3d 70 2d 3e  cacheStatus!=p->
12590 63 61 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20  cacheCtr ){.    
125a0 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
125b0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43 72  ){.      if( pCr
125c0 73 72 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  sr==0 ){.       
125d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
125e0 75 64 6f 54 61 62 6c 65 52 65 67 3e 30 20 29 3b  udoTableReg>0 );
125f0 0a 20 20 20 20 20 20 20 20 70 52 65 67 20 3d 20  .        pReg = 
12600 26 61 4d 65 6d 5b 70 43 2d 3e 70 73 65 75 64 6f  &aMem[pC->pseudo
12610 54 61 62 6c 65 52 65 67 5d 3b 0a 20 20 20 20 20  TableReg];.     
12620 20 20 20 61 73 73 65 72 74 28 20 70 52 65 67 2d     assert( pReg-
12630 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
12640 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  b );.        ass
12650 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
12660 70 52 65 67 29 20 29 3b 0a 20 20 20 20 20 20 20  pReg) );.       
12670 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
12680 20 3d 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61   = pC->szRow = a
12690 76 61 69 6c 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a  vail = pReg->n;.
126a0 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77          pC->aRow
126b0 20 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e 7a 3b   = (u8*)pReg->z;
126c0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
126d0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
126e0 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73  eMemSetNull(pDes
126f0 74 29 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  t);.        goto
12700 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
12710 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
12720 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  e{.      assert(
12730 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20 20 20   pCrsr );.      
12740 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  if( pC->isTable=
12750 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  =0 ){.        as
12760 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
12770 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
12780 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20  pCrsr) );.      
12790 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29    VVA_ONLY(rc =)
127a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
127b0 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79  Size(pCrsr, &pay
127c0 6c 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20 20 20  loadSize64);.   
127d0 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d       assert( rc=
127e0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 2f 2a  =SQLITE_OK ); /*
127f0 20 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66   True because of
12800 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20   CursorMoveto() 
12810 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20  call above */.  
12820 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33        /* sqlite3
12830 42 74 72 65 65 50 61 72 73 65 43 65 6c 6c 50 74  BtreeParseCellPt
12840 72 28 29 20 75 73 65 73 20 67 65 74 56 61 72 69  r() uses getVari
12850 6e 74 33 32 28 29 20 74 6f 20 65 78 74 72 61 63  nt32() to extrac
12860 74 20 74 68 65 0a 20 20 20 20 20 20 20 20 2a 2a  t the.        **
12870 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 2c 20 73   payload size, s
12880 6f 20 69 74 20 69 73 20 69 6d 70 6f 73 73 69 62  o it is impossib
12890 6c 65 20 66 6f 72 20 70 61 79 6c 6f 61 64 53 69  le for payloadSi
128a0 7a 65 36 34 20 74 6f 20 62 65 0a 20 20 20 20 20  ze64 to be.     
128b0 20 20 20 2a 2a 20 6c 61 72 67 65 72 20 74 68 61     ** larger tha
128c0 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f 0a 20 20  n 32 bits. */.  
128d0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
128e0 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 26 20 53  ayloadSize64 & S
128f0 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 29 3d 3d  QLITE_MAX_U32)==
12900 28 75 36 34 29 70 61 79 6c 6f 61 64 53 69 7a 65  (u64)payloadSize
12910 36 34 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43  64 );.        pC
12920 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74 65 33  ->aRow = sqlite3
12930 42 74 72 65 65 4b 65 79 46 65 74 63 68 28 70 43  BtreeKeyFetch(pC
12940 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20  rsr, &avail);.  
12950 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61        pC->payloa
12960 64 53 69 7a 65 20 3d 20 28 75 33 32 29 70 61 79  dSize = (u32)pay
12970 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20 20 20  loadSize64;.    
12980 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
12990 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
129a0 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
129b0 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20  id(pCrsr) );.   
129c0 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63       VVA_ONLY(rc
129d0 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65   =) sqlite3Btree
129e0 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20  DataSize(pCrsr, 
129f0 26 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65  &pC->payloadSize
12a00 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
12a10 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
12a20 20 29 3b 20 20 20 2f 2a 20 44 61 74 61 53 69 7a   );   /* DataSiz
12a30 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20  e() cannot fail 
12a40 2a 2f 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61  */.        pC->a
12a50 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42 74 72  Row = sqlite3Btr
12a60 65 65 44 61 74 61 46 65 74 63 68 28 70 43 72 73  eeDataFetch(pCrs
12a70 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20  r, &avail);.    
12a80 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74    }.      assert
12a90 28 20 61 76 61 69 6c 3c 3d 36 35 35 33 36 20 29  ( avail<=65536 )
12aa0 3b 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 70 61  ;  /* Maximum pa
12ab0 67 65 20 73 69 7a 65 20 69 73 20 36 34 4b 69 42  ge size is 64KiB
12ac0 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43   */.      if( pC
12ad0 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3c 3d  ->payloadSize <=
12ae0 20 28 75 33 32 29 61 76 61 69 6c 20 29 7b 0a 20   (u32)avail ){. 
12af0 20 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77         pC->szRow
12b00 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69   = pC->payloadSi
12b10 7a 65 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  ze;.      }else{
12b20 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 73 7a 52  .        pC->szR
12b30 6f 77 20 3d 20 61 76 61 69 6c 3b 0a 20 20 20 20  ow = avail;.    
12b40 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 43    }.      if( pC
12b50 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e 20  ->payloadSize > 
12b60 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b  (u32)db->aLimit[
12b70 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
12b80 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  GTH] ){.        
12b90 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
12ba0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
12bb0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
12bc0 3d 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20  = p->cacheCtr;. 
12bd0 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65     pC->iHdrOffse
12be0 74 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28  t = getVarint32(
12bf0 70 43 2d 3e 61 52 6f 77 2c 20 6f 66 66 73 65 74  pC->aRow, offset
12c00 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 48 64 72 50  );.    pC->nHdrP
12c10 61 72 73 65 64 20 3d 20 30 3b 0a 20 20 20 20 61  arsed = 0;.    a
12c20 4f 66 66 73 65 74 5b 30 5d 20 3d 20 6f 66 66 73  Offset[0] = offs
12c30 65 74 3b 0a 0a 20 20 20 20 2f 2a 20 4d 61 6b 65  et;..    /* Make
12c40 20 73 75 72 65 20 61 20 63 6f 72 72 75 70 74 20   sure a corrupt 
12c50 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74  database has not
12c60 20 67 69 76 65 6e 20 75 73 20 61 6e 20 6f 76 65   given us an ove
12c70 72 73 69 7a 65 20 68 65 61 64 65 72 2e 0a 20 20  rsize header..  
12c80 20 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77    ** Do this now
12c90 20 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65   to avoid an ove
12ca0 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  rsize memory all
12cb0 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 0a  ocation..    **.
12cc0 20 20 20 20 2a 2a 20 54 79 70 65 20 65 6e 74 72      ** Type entr
12cd0 69 65 73 20 63 61 6e 20 62 65 20 62 65 74 77 65  ies can be betwe
12ce0 65 6e 20 31 20 61 6e 64 20 35 20 62 79 74 65 73  en 1 and 5 bytes
12cf0 20 65 61 63 68 2e 20 20 42 75 74 20 34 20 61 6e   each.  But 4 an
12d00 64 20 35 20 62 79 74 65 0a 20 20 20 20 2a 2a 20  d 5 byte.    ** 
12d10 74 79 70 65 73 20 75 73 65 20 73 6f 20 6d 75 63  types use so muc
12d20 68 20 64 61 74 61 20 73 70 61 63 65 20 74 68 61  h data space tha
12d30 74 20 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79  t there can only
12d40 20 62 65 20 34 30 39 36 20 61 6e 64 20 33 32 20   be 4096 and 32 
12d50 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20  of.    ** them, 
12d60 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53  respectively.  S
12d70 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 65  o the maximum he
12d80 61 64 65 72 20 6c 65 6e 67 74 68 20 72 65 73 75  ader length resu
12d90 6c 74 73 20 66 72 6f 6d 20 61 0a 20 20 20 20 2a  lts from a.    *
12da0 2a 20 33 2d 62 79 74 65 20 74 79 70 65 20 66 6f  * 3-byte type fo
12db0 72 20 65 61 63 68 20 6f 66 20 74 68 65 20 6d 61  r each of the ma
12dc0 78 69 6d 75 6d 20 6f 66 20 33 32 37 36 38 20 63  ximum of 32768 c
12dd0 6f 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68 72 65  olumns plus thre
12de0 65 0a 20 20 20 20 2a 2a 20 65 78 74 72 61 20 62  e.    ** extra b
12df0 79 74 65 73 20 66 6f 72 20 74 68 65 20 68 65 61  ytes for the hea
12e00 64 65 72 20 6c 65 6e 67 74 68 20 69 74 73 65 6c  der length itsel
12e10 66 2e 20 20 33 32 37 36 38 2a 33 20 2b 20 33 20  f.  32768*3 + 3 
12e20 3d 20 39 38 33 30 37 2e 0a 20 20 20 20 2a 2f 0a  = 98307..    */.
12e30 20 20 20 20 69 66 28 20 6f 66 66 73 65 74 20 3e      if( offset >
12e40 20 39 38 33 30 37 20 7c 7c 20 6f 66 66 73 65 74   98307 || offset
12e50 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69   > pC->payloadSi
12e60 7a 65 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  ze ){.      rc =
12e70 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
12e80 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f  BKPT;.      goto
12e90 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72   op_column_error
12ea0 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28  ;.    }..    if(
12eb0 20 61 76 61 69 6c 3c 6f 66 66 73 65 74 20 29 7b   avail<offset ){
12ec0 0a 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52  .      /* pC->aR
12ed0 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  ow does not have
12ee0 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e 74   to hold the ent
12ef0 69 72 65 20 72 6f 77 2c 20 62 75 74 20 69 74 20  ire row, but it 
12f00 64 6f 65 73 20 61 74 20 6c 65 61 73 74 0a 20 20  does at least.  
12f10 20 20 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63      ** need to c
12f20 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72 20  over the header 
12f30 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20  of the record.  
12f40 49 66 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73  If pC->aRow does
12f50 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20   not contain.   
12f60 20 20 20 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65     ** the comple
12f70 74 65 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20  te header, then 
12f80 73 65 74 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20  set it to zero, 
12f90 66 6f 72 63 69 6e 67 20 74 68 65 20 68 65 61 64  forcing the head
12fa0 65 72 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a  er to be.      *
12fb0 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  * dynamically al
12fc0 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20  located. */.    
12fd0 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a    pC->aRow = 0;.
12fe0 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20        pC->szRow 
12ff0 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  = 0;.    }..    
13000 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
13010 20 67 6f 74 6f 20 69 73 20 61 6e 20 6f 70 74 69   goto is an opti
13020 6d 69 7a 61 74 69 6f 6e 2e 20 20 49 74 20 63 61  mization.  It ca
13030 6e 20 62 65 20 6f 6d 69 74 74 65 64 20 61 6e 64  n be omitted and
13040 0a 20 20 20 20 2a 2a 20 65 76 65 72 79 74 68 69  .    ** everythi
13050 6e 67 20 77 69 6c 6c 20 73 74 69 6c 6c 20 77 6f  ng will still wo
13060 72 6b 2e 20 20 42 75 74 20 4f 50 5f 43 6f 6c 75  rk.  But OP_Colu
13070 6d 6e 20 69 73 20 6d 65 61 73 75 72 61 62 6c 79  mn is measurably
13080 20 66 61 73 74 65 72 0a 20 20 20 20 2a 2a 20 62   faster.    ** b
13090 79 20 73 6b 69 70 70 69 6e 67 20 74 68 65 20 73  y skipping the s
130a0 75 62 73 65 71 75 65 6e 74 20 63 6f 6e 64 69 74  ubsequent condit
130b0 69 6f 6e 61 6c 2c 20 77 68 69 63 68 20 69 73 20  ional, which is 
130c0 61 6c 77 61 79 73 20 74 72 75 65 2e 0a 20 20 20  always true..   
130d0 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
130e0 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d  pC->nHdrParsed<=
130f0 70 32 20 29 3b 20 20 20 20 20 20 20 20 20 2f 2a  p2 );         /*
13100 20 43 6f 6e 64 69 74 69 6f 6e 61 6c 20 73 6b 69   Conditional ski
13110 70 70 65 64 20 2a 2f 0a 20 20 20 20 67 6f 74 6f  pped */.    goto
13120 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f   op_column_read_
13130 68 65 61 64 65 72 3b 0a 20 20 7d 0a 0a 20 20 2f  header;.  }..  /
13140 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 74 20 6c  * Make sure at l
13150 65 61 73 74 20 74 68 65 20 66 69 72 73 74 20 70  east the first p
13160 32 2b 31 20 65 6e 74 72 69 65 73 20 6f 66 20 74  2+1 entries of t
13170 68 65 20 68 65 61 64 65 72 20 68 61 76 65 20 62  he header have b
13180 65 65 6e 0a 20 20 2a 2a 20 70 61 72 73 65 64 20  een.  ** parsed 
13190 61 6e 64 20 76 61 6c 69 64 20 69 6e 66 6f 72 6d  and valid inform
131a0 61 74 69 6f 6e 20 69 73 20 69 6e 20 61 4f 66 66  ation is in aOff
131b0 73 65 74 5b 5d 20 61 6e 64 20 70 43 2d 3e 61 54  set[] and pC->aT
131c0 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66  ype[]..  */.  if
131d0 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  ( pC->nHdrParsed
131e0 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a 20 49  <=p2 ){.    /* I
131f0 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20  f there is more 
13200 68 65 61 64 65 72 20 61 76 61 69 6c 61 62 6c 65  header available
13210 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69 6e 20   for parsing in 
13220 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72 79 0a  the record, try.
13230 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72 61 63      ** to extrac
13240 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66 69 65  t additional fie
13250 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68 20 74  lds up through t
13260 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65 6c 64  he p2+1-th field
13270 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6f 70 5f   .    */.    op_
13280 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64  column_read_head
13290 65 72 3a 0a 20 20 20 20 69 66 28 20 70 43 2d 3e  er:.    if( pC->
132a0 69 48 64 72 4f 66 66 73 65 74 3c 61 4f 66 66 73  iHdrOffset<aOffs
132b0 65 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 2f  et[0] ){.      /
132c0 2a 20 4d 61 6b 65 20 73 75 72 65 20 7a 44 61 74  * Make sure zDat
132d0 61 20 70 6f 69 6e 74 73 20 74 6f 20 65 6e 6f 75  a points to enou
132e0 67 68 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  gh of the record
132f0 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68 65   to cover the he
13300 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69  ader. */.      i
13310 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29  f( pC->aRow==0 )
13320 7b 0a 20 20 20 20 20 20 20 20 6d 65 6d 73 65 74  {.        memset
13330 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f  (&sMem, 0, sizeo
13340 66 28 73 4d 65 6d 29 29 3b 0a 20 20 20 20 20 20  f(sMem));.      
13350 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
13360 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
13370 43 72 73 72 2c 20 30 2c 20 61 4f 66 66 73 65 74  Crsr, 0, aOffset
13380 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 20 20 20  [0], .          
13390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133a0 20 20 20 20 20 20 20 20 20 20 20 21 70 43 2d 3e             !pC->
133b0 69 73 54 61 62 6c 65 2c 20 26 73 4d 65 6d 29 3b  isTable, &sMem);
133c0 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
133d0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
133e0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
133f0 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20  column_error;.  
13400 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
13410 7a 44 61 74 61 20 3d 20 28 75 38 2a 29 73 4d 65  zData = (u8*)sMe
13420 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  m.z;.      }else
13430 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  {.        zData 
13440 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20  = pC->aRow;.    
13450 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20    }.  .      /* 
13460 46 69 6c 6c 20 69 6e 20 70 43 2d 3e 61 54 79 70  Fill in pC->aTyp
13470 65 5b 69 5d 20 61 6e 64 20 61 4f 66 66 73 65 74  e[i] and aOffset
13480 5b 69 5d 20 76 61 6c 75 65 73 20 74 68 72 6f 75  [i] values throu
13490 67 68 20 74 68 65 20 70 32 2d 74 68 20 66 69 65  gh the p2-th fie
134a0 6c 64 2e 20 2a 2f 0a 20 20 20 20 20 20 69 20 3d  ld. */.      i =
134b0 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3b   pC->nHdrParsed;
134c0 0a 20 20 20 20 20 20 6f 66 66 73 65 74 20 3d 20  .      offset = 
134d0 61 4f 66 66 73 65 74 5b 69 5d 3b 0a 20 20 20 20  aOffset[i];.    
134e0 20 20 7a 48 64 72 20 3d 20 7a 44 61 74 61 20 2b    zHdr = zData +
134f0 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3b   pC->iHdrOffset;
13500 0a 20 20 20 20 20 20 7a 45 6e 64 48 64 72 20 3d  .      zEndHdr =
13510 20 7a 44 61 74 61 20 2b 20 61 4f 66 66 73 65 74   zData + aOffset
13520 5b 30 5d 3b 0a 20 20 20 20 20 20 61 73 73 65 72  [0];.      asser
13530 74 28 20 69 3c 3d 70 32 20 26 26 20 7a 48 64 72  t( i<=p2 && zHdr
13540 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20 20 20  <zEndHdr );.    
13550 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 69 66    do{.        if
13560 28 20 7a 48 64 72 5b 30 5d 3c 30 78 38 30 20 29  ( zHdr[0]<0x80 )
13570 7b 0a 20 20 20 20 20 20 20 20 20 20 74 20 3d 20  {.          t = 
13580 7a 48 64 72 5b 30 5d 3b 0a 20 20 20 20 20 20 20  zHdr[0];.       
13590 20 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20     zHdr++;.     
135a0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
135b0 20 20 20 20 7a 48 64 72 20 2b 3d 20 73 71 6c 69      zHdr += sqli
135c0 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 7a  te3GetVarint32(z
135d0 48 64 72 2c 20 26 74 29 3b 0a 20 20 20 20 20 20  Hdr, &t);.      
135e0 20 20 7d 0a 20 20 20 20 20 20 20 20 70 43 2d 3e    }.        pC->
135f0 61 54 79 70 65 5b 69 5d 20 3d 20 74 3b 0a 20 20  aType[i] = t;.  
13600 20 20 20 20 20 20 73 7a 46 69 65 6c 64 20 3d 20        szField = 
13610 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
13620 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20  lTypeLen(t);.   
13630 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73       offset += s
13640 7a 46 69 65 6c 64 3b 0a 20 20 20 20 20 20 20 20  zField;.        
13650 69 66 28 20 6f 66 66 73 65 74 3c 73 7a 46 69 65  if( offset<szFie
13660 6c 64 20 29 7b 20 20 2f 2a 20 54 72 75 65 20 69  ld ){  /* True i
13670 66 20 6f 66 66 73 65 74 20 6f 76 65 72 66 6c 6f  f offset overflo
13680 77 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ws */.          
13690 7a 48 64 72 20 3d 20 26 7a 45 6e 64 48 64 72 5b  zHdr = &zEndHdr[
136a0 31 5d 3b 20 20 2f 2a 20 46 6f 72 63 65 73 20 53  1];  /* Forces S
136b0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 72 65  QLITE_CORRUPT re
136c0 74 75 72 6e 20 62 65 6c 6f 77 20 2a 2f 0a 20 20  turn below */.  
136d0 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
136e0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
136f0 20 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20 61 4f   i++;.        aO
13700 66 66 73 65 74 5b 69 5d 20 3d 20 6f 66 66 73 65  ffset[i] = offse
13710 74 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28  t;.      }while(
13720 20 69 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a   i<=p2 && zHdr<z
13730 45 6e 64 48 64 72 20 29 3b 0a 20 20 20 20 20 20  EndHdr );.      
13740 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d  pC->nHdrParsed =
13750 20 69 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69 48   i;.      pC->iH
13760 64 72 4f 66 66 73 65 74 20 3d 20 28 75 33 32 29  drOffset = (u32)
13770 28 7a 48 64 72 20 2d 20 7a 44 61 74 61 29 3b 0a  (zHdr - zData);.
13780 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52        if( pC->aR
13790 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ow==0 ){.       
137a0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
137b0 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20  elease(&sMem);. 
137c0 20 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67         sMem.flag
137d0 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
137e0 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f      }.  .      /
137f0 2a 20 54 68 65 20 72 65 63 6f 72 64 20 69 73 20  * The record is 
13800 63 6f 72 72 75 70 74 20 69 66 20 61 6e 79 20 6f  corrupt if any o
13810 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
13820 61 72 65 20 74 72 75 65 3a 0a 20 20 20 20 20 20  are true:.      
13830 2a 2a 20 28 31 29 20 74 68 65 20 62 79 74 65 73  ** (1) the bytes
13840 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 65   of the header e
13850 78 74 65 6e 64 20 70 61 73 74 20 74 68 65 20 64  xtend past the d
13860 65 63 6c 61 72 65 64 20 68 65 61 64 65 72 20 73  eclared header s
13870 69 7a 65 0a 20 20 20 20 20 20 2a 2a 20 20 20 20  ize.      **    
13880 20 20 20 20 20 20 28 7a 48 64 72 3e 7a 45 6e 64        (zHdr>zEnd
13890 48 64 72 29 0a 20 20 20 20 20 20 2a 2a 20 28 32  Hdr).      ** (2
138a0 29 20 74 68 65 20 65 6e 74 69 72 65 20 68 65 61  ) the entire hea
138b0 64 65 72 20 77 61 73 20 75 73 65 64 20 62 75 74  der was used but
138c0 20 6e 6f 74 20 61 6c 6c 20 64 61 74 61 20 77 61   not all data wa
138d0 73 20 75 73 65 64 0a 20 20 20 20 20 20 2a 2a 20  s used.      ** 
138e0 20 20 20 20 20 20 20 20 20 28 7a 48 64 72 3d 3d           (zHdr==
138f0 7a 45 6e 64 48 64 72 20 26 26 20 6f 66 66 73 65  zEndHdr && offse
13900 74 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69  t!=pC->payloadSi
13910 7a 65 29 0a 20 20 20 20 20 20 2a 2a 20 28 33 29  ze).      ** (3)
13920 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
13930 64 61 74 61 20 65 78 74 65 6e 64 73 20 62 65 79  data extends bey
13940 6f 6e 64 20 74 68 65 20 65 6e 64 20 6f 66 20 74  ond the end of t
13950 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20  he record..     
13960 20 2a 2a 20 20 20 20 20 20 20 20 20 20 28 6f 66   **          (of
13970 66 73 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c 6f  fset > pC->paylo
13980 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20 2a 2f  adSize).      */
13990 0a 20 20 20 20 20 20 69 66 28 20 28 7a 48 64 72  .      if( (zHdr
139a0 3e 3d 7a 45 6e 64 48 64 72 20 26 26 20 28 7a 48  >=zEndHdr && (zH
139b0 64 72 3e 7a 45 6e 64 48 64 72 20 7c 7c 20 6f 66  dr>zEndHdr || of
139c0 66 73 65 74 21 3d 70 43 2d 3e 70 61 79 6c 6f 61  fset!=pC->payloa
139d0 64 53 69 7a 65 29 29 0a 20 20 20 20 20 20 20 7c  dSize)).       |
139e0 7c 20 28 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e  | (offset > pC->
139f0 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20  payloadSize).   
13a00 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63     ){.        rc
13a10 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
13a20 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20 20  T_BKPT;.        
13a30 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65  goto op_column_e
13a40 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
13a50 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20 61    }..    /* If a
13a60 66 74 65 72 20 74 72 79 69 6e 67 20 74 6f 20 65  fter trying to e
13a70 78 74 72 61 20 6e 65 77 20 65 6e 74 72 69 65 73  xtra new entries
13a80 20 66 72 6f 6d 20 74 68 65 20 68 65 61 64 65 72   from the header
13a90 2c 20 6e 48 64 72 50 61 72 73 65 64 20 69 73 0a  , nHdrParsed is.
13aa0 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74      ** still not
13ab0 20 75 70 20 74 6f 20 70 32 2c 20 74 68 61 74 20   up to p2, that 
13ac0 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 72  means that the r
13ad0 65 63 6f 72 64 20 68 61 73 20 66 65 77 65 72 20  ecord has fewer 
13ae0 74 68 61 6e 20 70 32 0a 20 20 20 20 2a 2a 20 63  than p2.    ** c
13af0 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20 74 68 65 20  olumns.  So the 
13b00 72 65 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 65  result will be e
13b10 69 74 68 65 72 20 74 68 65 20 64 65 66 61 75 6c  ither the defaul
13b20 74 20 76 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c  t value or a NUL
13b30 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  L..    */.    if
13b40 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  ( pC->nHdrParsed
13b50 3c 3d 70 32 20 29 7b 0a 20 20 20 20 20 20 69 66  <=p2 ){.      if
13b60 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
13b70 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 20  4_MEM ){.       
13b80 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
13b90 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74  hallowCopy(pDest
13ba0 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20  , pOp->p4.pMem, 
13bb0 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20  MEM_Static);.   
13bc0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
13bd0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
13be0 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
13bf0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f        }.      go
13c00 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
13c10 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f  ;.    }.  }..  /
13c20 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 63 6f  * Extract the co
13c30 6e 74 65 6e 74 20 66 6f 72 20 74 68 65 20 70 32  ntent for the p2
13c40 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43  +1-th column.  C
13c50 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a  ontrol can only.
13c60 20 20 2a 2a 20 72 65 61 63 68 20 74 68 69 73 20    ** reach this 
13c70 70 6f 69 6e 74 20 69 66 20 61 4f 66 66 73 65 74  point if aOffset
13c80 5b 70 32 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32  [p2], aOffset[p2
13c90 2b 31 5d 2c 20 61 6e 64 20 70 43 2d 3e 61 54 79  +1], and pC->aTy
13ca0 70 65 5b 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20  pe[p2] are.  ** 
13cb0 61 6c 6c 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a  all valid..  */.
13cc0 20 20 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d    assert( p2<pC-
13cd0 3e 6e 48 64 72 50 61 72 73 65 64 20 29 3b 0a 20  >nHdrParsed );. 
13ce0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
13cf0 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 61 73 73 65  ITE_OK );.  asse
13d00 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43  rt( sqlite3VdbeC
13d10 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74  heckMemInvariant
13d20 73 28 70 44 65 73 74 29 20 29 3b 0a 20 20 69 66  s(pDest) );.  if
13d30 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63  ( VdbeMemDynamic
13d40 28 70 44 65 73 74 29 20 29 20 73 71 6c 69 74 65  (pDest) ) sqlite
13d50 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
13d60 70 44 65 73 74 29 3b 0a 20 20 74 20 3d 20 70 43  pDest);.  t = pC
13d70 2d 3e 61 54 79 70 65 5b 70 32 5d 3b 0a 20 20 69  ->aType[p2];.  i
13d80 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f  f( pC->szRow>=aO
13d90 66 66 73 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20  ffset[p2+1] ){. 
13da0 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68     /* This is th
13db0 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68  e common case wh
13dc0 65 72 65 20 74 68 65 20 64 65 73 69 72 65 64 20  ere the desired 
13dd0 63 6f 6e 74 65 6e 74 20 66 69 74 73 20 6f 6e 20  content fits on 
13de0 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20  the original.   
13df0 20 2a 2a 20 70 61 67 65 20 2d 20 77 68 65 72 65   ** page - where
13e00 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20   the content is 
13e10 6e 6f 74 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c  not on an overfl
13e20 6f 77 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 73  ow page */.    s
13e30 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
13e40 47 65 74 28 70 43 2d 3e 61 52 6f 77 2b 61 4f 66  Get(pC->aRow+aOf
13e50 66 73 65 74 5b 70 32 5d 2c 20 74 2c 20 70 44 65  fset[p2], t, pDe
13e60 73 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  st);.  }else{.  
13e70 20 20 2f 2a 20 54 68 69 73 20 62 72 61 6e 63 68    /* This branch
13e80 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20 77 68   happens only wh
13e90 65 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20 6f 6e  en content is on
13ea0 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 20   overflow pages 
13eb0 2a 2f 0a 20 20 20 20 69 66 28 20 28 28 70 4f 70  */.    if( ((pOp
13ec0 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 4c  ->p5 & (OPFLAG_L
13ed0 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c 41 47 5f  ENGTHARG|OPFLAG_
13ee0 54 59 50 45 4f 46 41 52 47 29 29 21 3d 30 0a 20  TYPEOFARG))!=0. 
13ef0 20 20 20 20 20 20 20 20 20 26 26 20 28 28 74 3e           && ((t>
13f00 3d 31 32 20 26 26 20 28 74 26 31 29 3d 3d 30 29  =12 && (t&1)==0)
13f10 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f   || (pOp->p5 & O
13f20 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29  PFLAG_TYPEOFARG)
13f30 21 3d 30 29 29 0a 20 20 20 20 20 7c 7c 20 28 6c  !=0)).     || (l
13f40 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  en = sqlite3Vdbe
13f50 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29  SerialTypeLen(t)
13f60 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20  )==0.    ){.    
13f70 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69 73 20    /* Content is 
13f80 69 72 72 65 6c 65 76 61 6e 74 20 66 6f 72 0a 20  irrelevant for. 
13f90 20 20 20 20 20 2a 2a 20 20 20 20 31 2e 20 74 68       **    1. th
13fa0 65 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  e typeof() funct
13fb0 69 6f 6e 2c 0a 20 20 20 20 20 20 2a 2a 20 20 20  ion,.      **   
13fc0 20 32 2e 20 74 68 65 20 6c 65 6e 67 74 68 28 58   2. the length(X
13fd0 29 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 58 20  ) function if X 
13fe0 69 73 20 61 20 62 6c 6f 62 2c 20 61 6e 64 0a 20  is a blob, and. 
13ff0 20 20 20 20 20 2a 2a 20 20 20 20 33 2e 20 69 66       **    3. if
14000 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6c 65 6e   the content len
14010 67 74 68 20 69 73 20 7a 65 72 6f 2e 0a 20 20 20  gth is zero..   
14020 20 20 20 2a 2a 20 53 6f 20 77 65 20 6d 69 67 68     ** So we migh
14030 74 20 61 73 20 77 65 6c 6c 20 75 73 65 20 62 6f  t as well use bo
14040 67 75 73 20 63 6f 6e 74 65 6e 74 20 72 61 74 68  gus content rath
14050 65 72 20 74 68 61 6e 20 72 65 61 64 69 6e 67 0a  er than reading.
14060 20 20 20 20 20 20 2a 2a 20 63 6f 6e 74 65 6e 74        ** content
14070 20 66 72 6f 6d 20 64 69 73 6b 2e 20 20 4e 55 4c   from disk.  NUL
14080 4c 20 77 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20  L will work for 
14090 74 68 65 20 76 61 6c 75 65 20 66 6f 72 20 73 74  the value for st
140a0 72 69 6e 67 73 0a 20 20 20 20 20 20 2a 2a 20 61  rings.      ** a
140b0 6e 64 20 62 6c 6f 62 73 20 61 6e 64 20 77 68 61  nd blobs and wha
140c0 74 65 76 65 72 20 69 73 20 69 6e 20 74 68 65 20  tever is in the 
140d0 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 76 61  payloadSize64 va
140e0 72 69 61 62 6c 65 0a 20 20 20 20 20 20 2a 2a 20  riable.      ** 
140f0 77 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20 65 76  will work for ev
14100 65 72 79 74 68 69 6e 67 20 65 6c 73 65 2e 20 2a  erything else. *
14110 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
14120 64 62 65 53 65 72 69 61 6c 47 65 74 28 74 3c 3d  dbeSerialGet(t<=
14130 31 33 20 3f 20 28 75 38 2a 29 26 70 61 79 6c 6f  13 ? (u8*)&paylo
14140 61 64 53 69 7a 65 36 34 20 3a 20 30 2c 20 74 2c  adSize64 : 0, t,
14150 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c   pDest);.    }el
14160 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
14170 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
14180 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 61 4f  mBtree(pCrsr, aO
14190 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20  ffset[p2], len, 
141a0 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 0a 20 20  !pC->isTable,.  
141b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141d0 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 69   pDest);.      i
141e0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
141f0 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
14200 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72   op_column_error
14210 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
14220 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
14230 6c 47 65 74 28 28 63 6f 6e 73 74 20 75 38 2a 29  lGet((const u8*)
14240 70 44 65 73 74 2d 3e 7a 2c 20 74 2c 20 70 44 65  pDest->z, t, pDe
14250 73 74 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74  st);.      pDest
14260 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f  ->flags &= ~MEM_
14270 45 70 68 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d  Ephem;.    }.  }
14280 0a 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20  .  pDest->enc = 
14290 65 6e 63 6f 64 69 6e 67 3b 0a 0a 6f 70 5f 63 6f  encoding;..op_co
142a0 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 2f 2a 20 49  lumn_out:.  /* I
142b0 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c  f the column val
142c0 75 65 20 69 73 20 61 6e 20 65 70 68 65 6d 65 72  ue is an ephemer
142d0 61 6c 20 73 74 72 69 6e 67 2c 20 67 6f 20 61 68  al string, go ah
142e0 65 61 64 20 61 6e 64 20 70 65 72 73 69 73 74 0a  ead and persist.
142f0 20 20 2a 2a 20 74 68 61 74 20 73 74 72 69 6e 67    ** that string
14300 20 69 6e 20 63 61 73 65 20 74 68 65 20 63 75 72   in case the cur
14310 73 6f 72 20 6d 6f 76 65 73 20 62 65 66 6f 72 65  sor moves before
14320 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75   the column valu
14330 65 20 69 73 0a 20 20 2a 2a 20 75 73 65 64 2e 20  e is.  ** used. 
14340 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
14350 6f 64 65 20 64 6f 65 73 20 74 68 65 20 65 71 75  ode does the equ
14360 69 76 61 6c 65 6e 74 20 6f 66 20 44 65 65 70 68  ivalent of Deeph
14370 65 6d 65 72 61 6c 69 7a 65 28 29 0a 20 20 2a 2a  emeralize().  **
14380 20 62 75 74 20 64 6f 65 73 20 69 74 20 66 61 73   but does it fas
14390 74 65 72 2e 20 2a 2f 0a 20 20 69 66 28 20 28 70  ter. */.  if( (p
143a0 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Dest->flags & ME
143b0 4d 5f 45 70 68 65 6d 29 21 3d 30 20 26 26 20 70  M_Ephem)!=0 && p
143c0 44 65 73 74 2d 3e 7a 20 29 7b 0a 20 20 20 20 66  Dest->z ){.    f
143d0 78 20 3d 20 70 44 65 73 74 2d 3e 66 6c 61 67 73  x = pDest->flags
143e0 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
143f0 42 6c 6f 62 29 3b 0a 20 20 20 20 61 73 73 65 72  Blob);.    asser
14400 74 28 20 66 78 21 3d 30 20 29 3b 0a 20 20 20 20  t( fx!=0 );.    
14410 7a 44 61 74 61 20 3d 20 28 63 6f 6e 73 74 20 75  zData = (const u
14420 38 2a 29 70 44 65 73 74 2d 3e 7a 3b 0a 20 20 20  8*)pDest->z;.   
14430 20 6c 65 6e 20 3d 20 70 44 65 73 74 2d 3e 6e 3b   len = pDest->n;
14440 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
14450 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52  VdbeMemClearAndR
14460 65 73 69 7a 65 28 70 44 65 73 74 2c 20 6c 65 6e  esize(pDest, len
14470 2b 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  +2) ) goto no_me
14480 6d 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 44  m;.    memcpy(pD
14490 65 73 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c  est->z, zData, l
144a0 65 6e 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e  en);.    pDest->
144b0 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20 20  z[len] = 0;.    
144c0 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31 5d 20  pDest->z[len+1] 
144d0 3d 20 30 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e  = 0;.    pDest->
144e0 66 6c 61 67 73 20 3d 20 66 78 7c 4d 45 4d 5f 54  flags = fx|MEM_T
144f0 65 72 6d 3b 0a 20 20 7d 0a 6f 70 5f 63 6f 6c 75  erm;.  }.op_colu
14500 6d 6e 5f 65 72 72 6f 72 3a 0a 20 20 55 50 44 41  mn_error:.  UPDA
14510 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
14520 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54  pDest);.  REGIST
14530 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
14540 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61  , pDest);.  brea
14550 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
14560 20 41 66 66 69 6e 69 74 79 20 50 31 20 50 32 20   Affinity P1 P2 
14570 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
14580 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50  is: affinity(r[P
14590 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70 70  1@P2]).**.** App
145a0 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20 74 6f  ly affinities to
145b0 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20 72   a range of P2 r
145c0 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e  egisters startin
145d0 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a  g with P1..**.**
145e0 20 50 34 20 69 73 20 61 20 73 74 72 69 6e 67 20   P4 is a string 
145f0 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
14600 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20  cters long. The 
14610 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66  nth character of
14620 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69   the.** string i
14630 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c  ndicates the col
14640 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61  umn affinity tha
14650 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  t should be used
14660 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20   for the nth.** 
14670 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74  memory cell in t
14680 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73  he range..*/.cas
14690 65 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b  e OP_Affinity: {
146a0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
146b0 41 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54  Affinity;   /* T
146c0 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62  he affinity to b
146d0 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 63  e applied */.  c
146e0 68 61 72 20 63 41 66 66 3b 20 20 20 20 20 20 20  har cAff;       
146f0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69 6e          /* A sin
14700 67 6c 65 20 63 68 61 72 61 63 74 65 72 20 6f 66  gle character of
14710 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20 20   affinity */..  
14720 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d  zAffinity = pOp-
14730 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28  >p4.z;.  assert(
14740 20 7a 41 66 66 69 6e 69 74 79 21 3d 30 20 29 3b   zAffinity!=0 );
14750 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69  .  assert( zAffi
14760 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30  nity[pOp->p2]==0
14770 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
14780 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77  em[pOp->p1];.  w
14790 68 69 6c 65 28 20 28 63 41 66 66 20 3d 20 2a 28  hile( (cAff = *(
147a0 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d 30  zAffinity++))!=0
147b0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
147c0 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d  pIn1 <= &p->aMem
147d0 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  [(p->nMem-p->nCu
147e0 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73  rsor)] );.    as
147f0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
14800 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 61 70  (pIn1) );.    ap
14810 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31  plyAffinity(pIn1
14820 2c 20 63 41 66 66 2c 20 65 6e 63 6f 64 69 6e 67  , cAff, encoding
14830 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20  );.    pIn1++;. 
14840 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
14850 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65  * Opcode: MakeRe
14860 63 6f 72 64 20 50 31 20 50 32 20 50 33 20 50 34  cord P1 P2 P3 P4
14870 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
14880 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31  r[P3]=mkrec(r[P1
14890 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76  @P2]).**.** Conv
148a0 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72 73  ert P2 registers
148b0 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
148c0 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63  P1 into the [rec
148d0 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75  ord format].** u
148e0 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65 63  se as a data rec
148f0 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61 73  ord in a databas
14900 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20  e table or as a 
14910 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64  key.** in an ind
14920 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75  ex.  The OP_Colu
14930 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65  mn opcode can de
14940 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64 20  code the record 
14950 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  later..**.** P4 
14960 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20  may be a string 
14970 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
14980 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65  cters long.  The
14990 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f   nth character o
149a0 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
149b0 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f  indicates the co
149c0 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68  lumn affinity th
149d0 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
149e0 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a  d for the nth.**
149f0 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e   field of the in
14a00 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54  dex key..**.** T
14a10 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20  he mapping from 
14a20 63 68 61 72 61 63 74 65 72 20 74 6f 20 61 66 66  character to aff
14a30 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20 62  inity is given b
14a40 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  y the SQLITE_AFF
14a50 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  _.** macros defi
14a60 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74  ned in sqliteInt
14a70 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  .h..**.** If P4 
14a80 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c  is NULL then all
14a90 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61   index fields ha
14aa0 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ve the affinity 
14ab0 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NONE..*/.case OP
14ac0 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20  _MakeRecord: {. 
14ad0 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b   u8 *zNewRecord;
14ae0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66          /* A buf
14af0 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  fer to hold the 
14b00 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77  data for the new
14b10 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
14b20 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20   *pRec;         
14b30 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
14b40 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e  ecord */.  u64 n
14b50 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20  Data;           
14b60 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
14b70 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61  ytes of data spa
14b80 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72  ce */.  int nHdr
14b90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
14ba0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
14bb0 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63  s of header spac
14bc0 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  e */.  i64 nByte
14bd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
14be0 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75   Data space requ
14bf0 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65  ired for this re
14c00 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a  cord */.  int nZ
14c10 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20  ero;            
14c20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
14c30 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20  ro bytes at the 
14c40 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
14c50 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69  d */.  int nVari
14c60 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
14c70 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
14c80 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a   in a varint */.
14c90 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70    u32 serial_typ
14ca0 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65  e;       /* Type
14cb0 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20   field */.  Mem 
14cc0 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20 20 20  *pData0;        
14cd0 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c     /* First fiel
14ce0 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64  d to be combined
14cf0 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64   into the record
14d00 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74   */.  Mem *pLast
14d10 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
14d20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68  Last field of th
14d30 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
14d40 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  t nField;       
14d50 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14d60 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
14d70 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72  record */.  char
14d80 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20   *zAffinity;    
14d90 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
14da0 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68  ty string for th
14db0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
14dc0 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20  t file_format;  
14dd0 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72       /* File for
14de0 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65  mat to use for e
14df0 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  ncoding */.  int
14e00 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
14e10 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65      /* Space use
14e20 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b  d in zNewRecord[
14e30 5d 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 69 6e  ] header */.  in
14e40 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20  t j;            
14e50 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73       /* Space us
14e60 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64  ed in zNewRecord
14e70 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20  [] content */.  
14e80 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20  int len;        
14e90 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68         /* Length
14ea0 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a   of a field */..
14eb0 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68    /* Assuming th
14ec0 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e  e record contain
14ed0 73 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20  s N fields, the 
14ee0 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f  record format lo
14ef0 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68  oks.  ** like th
14f00 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d  is:.  **.  ** --
14f10 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14f20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14f30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14f40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14f50 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64  ------.  ** | hd
14f60 72 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20  r-size | type 0 
14f70 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c  | type 1 | ... |
14f80 20 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61   type N-1 | data
14f90 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e  0 | ... | data N
14fa0 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d  -1 | .  ** -----
14fb0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14fc0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14fd0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14fe0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14ff0 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61  ---.  **.  ** Da
15000 74 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66  ta(0) is taken f
15010 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e  rom register P1.
15020 20 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20    Data(1) comes 
15030 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31  from register P1
15040 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66  +1.  ** and so f
15050 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  orth..  **.  ** 
15060 45 61 63 68 20 74 79 70 65 20 66 69 65 6c 64 20  Each type field 
15070 69 73 20 61 20 76 61 72 69 6e 74 20 72 65 70 72  is a varint repr
15080 65 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72  esenting the ser
15090 69 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20  ial type of the 
150a0 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  .  ** correspond
150b0 69 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74  ing data element
150c0 20 28 73 65 65 20 73 71 6c 69 74 65 33 56 64 62   (see sqlite3Vdb
150d0 65 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20  eSerialType()). 
150e0 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a  The.  ** hdr-siz
150f0 65 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20  e field is also 
15100 61 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69  a varint which i
15110 73 20 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f  s the offset fro
15120 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a  m the beginning.
15130 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f    ** of the reco
15140 72 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a  rd to data0..  *
15150 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20  /.  nData = 0;  
15160 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15170 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74   of bytes of dat
15180 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64  a space */.  nHd
15190 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  r = 0;          
151a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
151b0 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61  es of header spa
151c0 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20  ce */.  nZero = 
151d0 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  0;         /* Nu
151e0 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74  mber of zero byt
151f0 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  es at the end of
15200 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
15210 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
15220 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d  1;.  zAffinity =
15230 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73   pOp->p4.z;.  as
15240 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26  sert( nField>0 &
15250 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  & pOp->p2>0 && p
15260 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 28  Op->p2+nField<=(
15270 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
15280 6f 72 29 2b 31 20 29 3b 0a 20 20 70 44 61 74 61  or)+1 );.  pData
15290 30 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c 64  0 = &aMem[nField
152a0 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  ];.  nField = pO
152b0 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d  p->p2;.  pLast =
152c0 20 26 70 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d   &pData0[nField-
152d0 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61  1];.  file_forma
152e0 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46  t = p->minWriteF
152f0 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a  ileFormat;..  /*
15300 20 49 64 65 6e 74 69 66 79 20 74 68 65 20 6f 75   Identify the ou
15310 74 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f  tput register */
15320 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
15330 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f  p3<pOp->p1 || pO
15340 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70  p->p3>=pOp->p1+p
15350 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74  Op->p2 );.  pOut
15360 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
15370 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
15380 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
15390 0a 20 20 2f 2a 20 41 70 70 6c 79 20 74 68 65 20  .  /* Apply the 
153a0 72 65 71 75 65 73 74 65 64 20 61 66 66 69 6e 69  requested affini
153b0 74 79 20 74 6f 20 61 6c 6c 20 69 6e 70 75 74 73  ty to all inputs
153c0 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
153d0 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b  pData0<=pLast );
153e0 0a 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79  .  if( zAffinity
153f0 20 29 7b 0a 20 20 20 20 70 52 65 63 20 3d 20 70   ){.    pRec = p
15400 44 61 74 61 30 3b 0a 20 20 20 20 64 6f 7b 0a 20  Data0;.    do{. 
15410 20 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69       applyAffini
15420 74 79 28 70 52 65 63 2b 2b 2c 20 2a 28 7a 41 66  ty(pRec++, *(zAf
15430 66 69 6e 69 74 79 2b 2b 29 2c 20 65 6e 63 6f 64  finity++), encod
15440 69 6e 67 29 3b 0a 20 20 20 20 20 20 61 73 73 65  ing);.      asse
15450 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d  rt( zAffinity[0]
15460 3d 3d 30 20 7c 7c 20 70 52 65 63 3c 3d 70 4c 61  ==0 || pRec<=pLa
15470 73 74 20 29 3b 0a 20 20 20 20 7d 77 68 69 6c 65  st );.    }while
15480 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 20 29  ( zAffinity[0] )
15490 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 6f 70  ;.  }..  /* Loop
154a0 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65   through the ele
154b0 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20  ments that will 
154c0 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f  make up the reco
154d0 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a  rd to figure.  *
154e0 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73  * out how much s
154f0 70 61 63 65 20 69 73 20 72 65 71 75 69 72 65 64  pace is required
15500 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63   for the new rec
15510 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 70 52 65 63  ord..  */.  pRec
15520 20 3d 20 70 4c 61 73 74 3b 0a 20 20 64 6f 7b 0a   = pLast;.  do{.
15530 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
15540 73 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a  sValid(pRec) );.
15550 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20      pRec->uTemp 
15560 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20  = serial_type = 
15570 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
15580 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65  lType(pRec, file
15590 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c 65  _format);.    le
155a0 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  n = sqlite3VdbeS
155b0 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 73 65 72  erialTypeLen(ser
155c0 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69  ial_type);.    i
155d0 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
155e0 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
155f0 20 20 20 69 66 28 20 6e 44 61 74 61 20 29 7b 0a     if( nData ){.
15600 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
15610 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62  dbeMemExpandBlob
15620 28 70 52 65 63 29 3b 0a 20 20 20 20 20 20 7d 65  (pRec);.      }e
15630 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65  lse{.        nZe
15640 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a  ro += pRec->u.nZ
15650 65 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e  ero;.        len
15660 20 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72   -= pRec->u.nZer
15670 6f 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  o;.      }.    }
15680 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65  .    nData += le
15690 6e 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  n;.    testcase(
156a0 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32   serial_type==12
156b0 37 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73  7 );.    testcas
156c0 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d  e( serial_type==
156d0 31 32 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20  128 );.    nHdr 
156e0 2b 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d  += serial_type<=
156f0 31 32 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65  127 ? 1 : sqlite
15700 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61  3VarintLen(seria
15710 6c 5f 74 79 70 65 29 3b 0a 20 20 7d 77 68 69 6c  l_type);.  }whil
15720 65 28 20 28 2d 2d 70 52 65 63 29 3e 3d 70 44 61  e( (--pRec)>=pDa
15730 74 61 30 20 29 3b 0a 0a 20 20 2f 2a 20 45 56 49  ta0 );..  /* EVI
15740 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 32 35 36  DENCE-OF: R-2256
15750 34 2d 31 31 36 34 37 20 54 68 65 20 68 65 61 64  4-11647 The head
15760 65 72 20 62 65 67 69 6e 73 20 77 69 74 68 20 61  er begins with a
15770 20 73 69 6e 67 6c 65 20 76 61 72 69 6e 74 0a 20   single varint. 
15780 20 2a 2a 20 77 68 69 63 68 20 64 65 74 65 72 6d   ** which determ
15790 69 6e 65 73 20 74 68 65 20 74 6f 74 61 6c 20 6e  ines the total n
157a0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
157b0 6e 20 74 68 65 20 68 65 61 64 65 72 2e 20 54 68  n the header. Th
157c0 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 76 61  e varint.  ** va
157d0 6c 75 65 20 69 73 20 74 68 65 20 73 69 7a 65 20  lue is the size 
157e0 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 69 6e  of the header in
157f0 20 62 79 74 65 73 20 69 6e 63 6c 75 64 69 6e 67   bytes including
15800 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74   the size varint
15810 0a 20 20 2a 2a 20 69 74 73 65 6c 66 2e 20 2a 2f  .  ** itself. */
15820 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64  .  testcase( nHd
15830 72 3d 3d 31 32 36 20 29 3b 0a 20 20 74 65 73 74  r==126 );.  test
15840 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 37 20  case( nHdr==127 
15850 29 3b 0a 20 20 69 66 28 20 6e 48 64 72 3c 3d 31  );.  if( nHdr<=1
15860 32 36 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  26 ){.    /* The
15870 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a   common case */.
15880 20 20 20 20 6e 48 64 72 20 2b 3d 20 31 3b 0a 20      nHdr += 1;. 
15890 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 52   }else{.    /* R
158a0 61 72 65 20 63 61 73 65 20 6f 66 20 61 20 72 65  are case of a re
158b0 61 6c 6c 79 20 6c 61 72 67 65 20 68 65 61 64 65  ally large heade
158c0 72 20 2a 2f 0a 20 20 20 20 6e 56 61 72 69 6e 74  r */.    nVarint
158d0 20 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74   = sqlite3Varint
158e0 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20 20 20 6e  Len(nHdr);.    n
158f0 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a  Hdr += nVarint;.
15900 20 20 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c      if( nVarint<
15910 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
15920 28 6e 48 64 72 29 20 29 20 6e 48 64 72 2b 2b 3b  (nHdr) ) nHdr++;
15930 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e  .  }.  nByte = n
15940 48 64 72 2b 6e 44 61 74 61 3b 0a 20 20 69 66 28  Hdr+nData;.  if(
15950 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69   nByte>db->aLimi
15960 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
15970 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
15980 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
15990 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
159a0 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  the output regis
159b0 74 65 72 20 68 61 73 20 61 20 62 75 66 66 65 72  ter has a buffer
159c0 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f   large enough to
159d0 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65   store .  ** the
159e0 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65   new record. The
159f0 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72   output register
15a00 20 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f   (pOp->p3) is no
15a10 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a  t allowed to.  *
15a20 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20  * be one of the 
15a30 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20  input registers 
15a40 28 62 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c  (because the fol
15a50 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20  lowing call to. 
15a60 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d   ** sqlite3VdbeM
15a70 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65  emClearAndResize
15a80 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72  () could clobber
15a90 20 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72   the value befor
15aa0 65 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20  e it is used).. 
15ab0 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65   */.  if( sqlite
15ac0 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
15ad0 52 65 73 69 7a 65 28 70 4f 75 74 2c 20 28 69 6e  Resize(pOut, (in
15ae0 74 29 6e 42 79 74 65 29 20 29 7b 0a 20 20 20 20  t)nByte) ){.    
15af0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
15b00 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20  .  zNewRecord = 
15b10 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a  (u8 *)pOut->z;..
15b20 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72    /* Write the r
15b30 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70  ecord */.  i = p
15b40 75 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52  utVarint32(zNewR
15b50 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20  ecord, nHdr);.  
15b60 6a 20 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73 65  j = nHdr;.  asse
15b70 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73  rt( pData0<=pLas
15b80 74 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 70 44  t );.  pRec = pD
15b90 61 74 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20  ata0;.  do{.    
15ba0 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 70 52  serial_type = pR
15bb0 65 63 2d 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f  ec->uTemp;.    /
15bc0 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  * EVIDENCE-OF: R
15bd0 2d 30 36 35 32 39 2d 34 37 33 36 32 20 46 6f 6c  -06529-47362 Fol
15be0 6c 6f 77 69 6e 67 20 74 68 65 20 73 69 7a 65 20  lowing the size 
15bf0 76 61 72 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f  varint are one o
15c00 72 20 6d 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64  r more.    ** ad
15c10 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73  ditional varints
15c20 2c 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e  , one per column
15c30 2e 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 70 75  . */.    i += pu
15c40 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52  tVarint32(&zNewR
15c50 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c  ecord[i], serial
15c60 5f 74 79 70 65 29 3b 20 20 20 20 20 20 20 20 20  _type);         
15c70 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70     /* serial typ
15c80 65 20 2a 2f 0a 20 20 20 20 2f 2a 20 45 56 49 44  e */.    /* EVID
15c90 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 34 35 33 36  ENCE-OF: R-64536
15ca0 2d 35 31 37 32 38 20 54 68 65 20 76 61 6c 75 65  -51728 The value
15cb0 73 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  s for each colum
15cc0 6e 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 0a  n in the record.
15cd0 20 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65      ** immediate
15ce0 6c 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65  ly follow the he
15cf0 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20 6a 20 2b  ader. */.    j +
15d00 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
15d10 69 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f  ialPut(&zNewReco
15d20 72 64 5b 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72  rd[j], pRec, ser
15d30 69 61 6c 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f  ial_type); /* co
15d40 6e 74 65 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c  ntent */.  }whil
15d50 65 28 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61  e( (++pRec)<=pLa
15d60 73 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  st );.  assert( 
15d70 69 3d 3d 6e 48 64 72 20 29 3b 0a 20 20 61 73 73  i==nHdr );.  ass
15d80 65 72 74 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b  ert( j==nByte );
15d90 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
15da0 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
15db0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
15dc0 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
15dd0 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65  ->n = (int)nByte
15de0 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
15df0 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69 66  = MEM_Blob;.  if
15e00 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70  ( nZero ){.    p
15e10 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e  Out->u.nZero = n
15e20 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Zero;.    pOut->
15e30 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72  flags |= MEM_Zer
15e40 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65  o;.  }.  pOut->e
15e50 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38  nc = SQLITE_UTF8
15e60 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68  ;  /* In case th
15e70 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63  e blob is ever c
15e80 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78 74  onverted to text
15e90 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54   */.  REGISTER_T
15ea0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f  RACE(pOp->p3, pO
15eb0 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ut);.  UPDATE_MA
15ec0 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
15ed0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
15ee0 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50   Opcode: Count P
15ef0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
15f00 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 6f  nopsis: r[P2]=co
15f10 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  unt().**.** Stor
15f20 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
15f30 65 6e 74 72 69 65 73 20 28 61 6e 20 69 6e 74 65  entries (an inte
15f40 67 65 72 20 76 61 6c 75 65 29 20 69 6e 20 74 68  ger value) in th
15f50 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
15f60 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 63   .** opened by c
15f70 75 72 73 6f 72 20 50 31 20 69 6e 20 72 65 67 69  ursor P1 in regi
15f80 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64  ster P2.*/.#ifnd
15f90 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
15fa0 54 52 45 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f  TREECOUNT.case O
15fb0 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20  P_Count: {      
15fc0 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
15fd0 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 6e  lease */.  i64 n
15fe0 45 6e 74 72 79 3b 0a 20 20 42 74 43 75 72 73 6f  Entry;.  BtCurso
15ff0 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20 70 43 72  r *pCrsr;..  pCr
16000 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  sr = p->apCsr[pO
16010 70 2d 3e 70 31 5d 2d 3e 70 43 75 72 73 6f 72 3b  p->p1]->pCursor;
16020 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
16030 20 29 3b 0a 20 20 6e 45 6e 74 72 79 20 3d 20 30   );.  nEntry = 0
16040 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
16050 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20  .  Only used to 
16060 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e  silence a warnin
16070 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  g. */.  rc = sql
16080 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70  ite3BtreeCount(p
16090 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a  Crsr, &nEntry);.
160a0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45    pOut->u.i = nE
160b0 6e 74 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ntry;.  break;.}
160c0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
160d0 64 65 3a 20 53 61 76 65 70 6f 69 6e 74 20 50 31  de: Savepoint P1
160e0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
160f0 4f 70 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72  Open, release or
16100 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73 61   rollback the sa
16110 76 65 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79  vepoint named by
16120 20 70 61 72 61 6d 65 74 65 72 20 50 34 2c 20 64   parameter P4, d
16130 65 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74  epending.** on t
16140 68 65 20 76 61 6c 75 65 20 6f 66 20 50 31 2e 20  he value of P1. 
16150 54 6f 20 6f 70 65 6e 20 61 20 6e 65 77 20 73 61  To open a new sa
16160 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20  vepoint, P1==0. 
16170 54 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d  To release (comm
16180 69 74 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69  it) an.** existi
16190 6e 67 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31  ng savepoint, P1
161a0 3d 3d 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62  ==1, or to rollb
161b0 61 63 6b 20 61 6e 20 65 78 69 73 74 69 6e 67 20  ack an existing 
161c0 73 61 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e  savepoint P1==2.
161d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76 65  .*/.case OP_Save
161e0 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70  point: {.  int p
161f0 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1;              
16200 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
16210 6c 75 65 20 6f 66 20 50 31 20 6f 70 65 72 61 6e  lue of P1 operan
16220 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61  d */.  char *zNa
16230 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
16240 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
16250 66 20 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20  f savepoint */. 
16260 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61   int nName;.  Sa
16270 76 65 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20  vepoint *pNew;. 
16280 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76   Savepoint *pSav
16290 65 70 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f  epoint;.  Savepo
162a0 69 6e 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74  int *pTmp;.  int
162b0 20 69 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69   iSavepoint;.  i
162c0 6e 74 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70  nt ii;..  p1 = p
162d0 4f 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20  Op->p1;.  zName 
162e0 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20  = pOp->p4.z;..  
162f0 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74  /* Assert that t
16300 68 65 20 70 31 20 70 61 72 61 6d 65 74 65 72 20  he p1 parameter 
16310 69 73 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74  is valid. Also t
16320 68 61 74 20 69 66 20 74 68 65 72 65 20 69 73 20  hat if there is 
16330 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61  no open.  ** tra
16340 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74  nsaction, then t
16350 68 65 72 65 20 63 61 6e 6e 6f 74 20 62 65 20 61  here cannot be a
16360 6e 79 20 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a  ny savepoints. .
16370 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64    */.  assert( d
16380 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30  b->pSavepoint==0
16390 20 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d   || db->autoComm
163a0 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  it==0 );.  asser
163b0 74 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  t( p1==SAVEPOINT
163c0 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45  _BEGIN||p1==SAVE
163d0 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70  POINT_RELEASE||p
163e0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
163f0 4c 42 41 43 4b 20 29 3b 0a 20 20 61 73 73 65 72  LBACK );.  asser
16400 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  t( db->pSavepoin
16410 74 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73  t || db->isTrans
16420 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d  actionSavepoint=
16430 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
16440 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
16450 75 6e 74 28 64 62 29 20 29 3b 0a 20 20 61 73 73  unt(db) );.  ass
16460 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
16470 72 20 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d  r );..  if( p1==
16480 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20  SAVEPOINT_BEGIN 
16490 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e  ){.    if( db->n
164a0 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20  VdbeWrite>0 ){. 
164b0 20 20 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61       /* A new sa
164c0 76 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62  vepoint cannot b
164d0 65 20 63 72 65 61 74 65 64 20 69 66 20 74 68 65  e created if the
164e0 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72  re are active wr
164f0 69 74 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74  ite .      ** st
16500 61 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f  atements (i.e. o
16510 70 65 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69  pen read/write i
16520 6e 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20  ncremental blob 
16530 68 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20  handles)..      
16540 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
16550 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
16560 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e  rrMsg, db, "cann
16570 6f 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e  ot open savepoin
16580 74 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53  t - ".        "S
16590 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
165a0 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
165b0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
165c0 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  USY;.    }else{.
165d0 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71        nName = sq
165e0 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e  lite3Strlen30(zN
165f0 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  ame);..#ifndef S
16600 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
16610 41 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a  ALTABLE.      /*
16620 20 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b   This call is Ok
16630 20 65 76 65 6e 20 69 66 20 74 68 69 73 20 73 61   even if this sa
16640 76 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61  vepoint is actua
16650 6c 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f  lly a transactio
16660 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70  n.      ** savep
16670 6f 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66  oint (and theref
16680 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70  ore should not p
16690 72 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74  rompt xSavepoint
166a0 28 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20  ()) callbacks.. 
166b0 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20       ** If this 
166c0 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  is a transaction
166d0 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67   savepoint being
166e0 20 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67   opened, it is g
166f0 75 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20  uaranteed.      
16700 2a 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e  ** that the db->
16710 61 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20  aVTrans[] array 
16720 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20  is empty.  */.  
16730 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
16740 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c  autoCommit==0 ||
16750 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20   db->nVTrans==0 
16760 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
16770 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
16780 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54  nt(db, SAVEPOINT
16790 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20  _BEGIN,.        
167a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167b0 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61          db->nSta
167c0 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65  tement+db->nSave
167d0 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66  point);.      if
167e0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
167f0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
16800 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69  _to_error;.#endi
16810 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61  f..      /* Crea
16820 74 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69  te a new savepoi
16830 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f  nt structure. */
16840 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71  .      pNew = sq
16850 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
16860 28 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76 65  (db, sizeof(Save
16870 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b  point)+nName+1);
16880 0a 20 20 20 20 20 20 69 66 28 20 70 4e 65 77 20  .      if( pNew 
16890 29 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d  ){.        pNew-
168a0 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20 2a  >zName = (char *
168b0 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20  )&pNew[1];.     
168c0 20 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e     memcpy(pNew->
168d0 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e  zName, zName, nN
168e0 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20  ame+1);.    .   
168f0 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65       /* If there
16900 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e   is no open tran
16910 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61  saction, then ma
16920 72 6b 20 74 68 69 73 20 61 73 20 61 20 73 70 65  rk this as a spe
16930 63 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20  cial.        ** 
16940 22 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76  "transaction sav
16950 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20  epoint". */.    
16960 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f      if( db->auto
16970 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20  Commit ){.      
16980 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
16990 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  it = 0;.        
169a0 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74    db->isTransact
169b0 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 31  ionSavepoint = 1
169c0 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
169d0 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  .          db->n
169e0 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20  Savepoint++;.   
169f0 20 20 20 20 20 7d 0a 20 20 20 20 0a 20 20 20 20       }.    .    
16a00 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20      /* Link the 
16a10 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e  new savepoint in
16a20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
16a30 68 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a  handle's list. *
16a40 2f 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  /.        pNew->
16a50 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76  pNext = db->pSav
16a60 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20  epoint;.        
16a70 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
16a80 20 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70   pNew;.        p
16a90 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f  New->nDeferredCo
16aa0 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
16ab0 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20  edCons;.        
16ac0 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 49  pNew->nDeferredI
16ad0 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  mmCons = db->nDe
16ae0 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20  ferredImmCons;. 
16af0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
16b00 65 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70  else{.    iSavep
16b10 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f  oint = 0;..    /
16b20 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64  * Find the named
16b30 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74   savepoint. If t
16b40 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20  here is no such 
16b50 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20  savepoint, then 
16b60 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72  an.    ** an err
16b70 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 74  or is returned t
16b80 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a  o the user.  */.
16b90 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70      for(.      p
16ba0 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e  Savepoint = db->
16bb0 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20  pSavepoint; .   
16bc0 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26     pSavepoint &&
16bd0 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
16be0 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d  pSavepoint->zNam
16bf0 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  e, zName);.     
16c00 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53   pSavepoint = pS
16c10 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a  avepoint->pNext.
16c20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61      ){.      iSa
16c30 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d  vepoint++;.    }
16c40 0a 20 20 20 20 69 66 28 20 21 70 53 61 76 65 70  .    if( !pSavep
16c50 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71  oint ){.      sq
16c60 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
16c70 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
16c80 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69  "no such savepoi
16c90 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b  nt: %s", zName);
16ca0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
16cb0 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65  TE_ERROR;.    }e
16cc0 6c 73 65 20 69 66 28 20 64 62 2d 3e 6e 56 64 62  lse if( db->nVdb
16cd0 65 57 72 69 74 65 3e 30 20 26 26 20 70 31 3d 3d  eWrite>0 && p1==
16ce0 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
16cf0 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74  E ){.      /* It
16d00 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
16d10 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d   to release (com
16d20 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74  mit) a savepoint
16d30 20 69 66 20 74 68 65 72 65 20 61 72 65 20 0a 20   if there are . 
16d40 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77       ** active w
16d50 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e  rite statements.
16d60 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
16d70 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
16d80 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
16d90 2c 20 0a 20 20 20 20 20 20 20 20 22 63 61 6e 6e  , .        "cann
16da0 6f 74 20 72 65 6c 65 61 73 65 20 73 61 76 65 70  ot release savep
16db0 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74 61 74 65  oint - SQL state
16dc0 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
16dd0 73 22 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20  s".      );.    
16de0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
16df0 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a  SY;.    }else{..
16e00 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69        /* Determi
16e10 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ne whether or no
16e20 74 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e  t this is a tran
16e30 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
16e40 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20  t. If so,.      
16e50 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20 61  ** and this is a
16e60 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
16e70 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 72 65  , then the curre
16e80 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a  nt transaction .
16e90 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d        ** is comm
16ea0 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f  itted. .      */
16eb0 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54 72 61  .      int isTra
16ec0 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65  nsaction = pSave
16ed0 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20  point->pNext==0 
16ee0 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63  && db->isTransac
16ef0 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20  tionSavepoint;. 
16f00 20 20 20 20 20 69 66 28 20 69 73 54 72 61 6e 73       if( isTrans
16f10 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41  action && p1==SA
16f20 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
16f30 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  ){.        if( (
16f40 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
16f50 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d  CheckFk(p, 1))!=
16f60 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
16f70 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
16f80 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20  _return;.       
16f90 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61   }.        db->a
16fa0 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20  utoCommit = 1;. 
16fb0 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
16fc0 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53  e3VdbeHalt(p)==S
16fd0 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
16fe0 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20          p->pc = 
16ff0 70 63 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62  pc;.          db
17000 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30  ->autoCommit = 0
17010 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72  ;.          p->r
17020 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
17030 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20  BUSY;.          
17040 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
17050 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
17060 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61      db->isTransa
17070 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d  ctionSavepoint =
17080 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   0;.        rc =
17090 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65   p->rc;.      }e
170a0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  lse{.        int
170b0 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3b   isSchemaChange;
170c0 0a 20 20 20 20 20 20 20 20 69 53 61 76 65 70 6f  .        iSavepo
170d0 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70  int = db->nSavep
170e0 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e  oint - iSavepoin
170f0 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 69  t - 1;.        i
17100 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  f( p1==SAVEPOINT
17110 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20  _ROLLBACK ){.   
17120 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43         isSchemaC
17130 68 61 6e 67 65 20 3d 20 28 64 62 2d 3e 66 6c 61  hange = (db->fla
17140 67 73 20 26 20 53 51 4c 49 54 45 5f 49 6e 74 65  gs & SQLITE_Inte
17150 72 6e 43 68 61 6e 67 65 73 29 21 3d 30 3b 0a 20  rnChanges)!=0;. 
17160 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d           for(ii=
17170 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  0; ii<db->nDb; i
17180 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
17190 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
171a0 72 65 65 54 72 69 70 41 6c 6c 43 75 72 73 6f 72  reeTripAllCursor
171b0 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  s(db->aDb[ii].pB
171c0 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
171d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171e0 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
171f0 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 2c  _ABORT_ROLLBACK,
17200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17220 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61          isSchema
17230 43 68 61 6e 67 65 3d 3d 30 29 3b 0a 20 20 20 20  Change==0);.    
17240 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
17250 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
17260 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
17270 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  ror;.          }
17280 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
17290 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65            isSche
172a0 6d 61 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20  maChange = 0;.  
172b0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
172c0 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d  for(ii=0; ii<db-
172d0 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  >nDb; ii++){.   
172e0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
172f0 74 65 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e  te3BtreeSavepoin
17300 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  t(db->aDb[ii].pB
17310 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e  t, p1, iSavepoin
17320 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  t);.          if
17330 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
17340 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  ){.            g
17350 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
17360 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
17370 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
17380 20 20 20 20 20 20 69 66 28 20 69 73 53 63 68 65        if( isSche
17390 6d 61 43 68 61 6e 67 65 20 29 7b 0a 20 20 20 20  maChange ){.    
173a0 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70        sqlite3Exp
173b0 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
173c0 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 20  ments(db);.     
173d0 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65       sqlite3Rese
173e0 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e  tAllSchemasOfCon
173f0 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20  nection(db);.   
17400 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73         db->flags
17410 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 7c 20   = (db->flags | 
17420 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
17430 6e 67 65 73 29 3b 0a 20 20 20 20 20 20 20 20 7d  nges);.        }
17440 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20  .      }.  .    
17450 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73 20    /* Regardless 
17460 6f 66 20 77 68 65 74 68 65 72 20 74 68 69 73 20  of whether this 
17470 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72 20  is a RELEASE or 
17480 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f  ROLLBACK, destro
17490 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20  y all .      ** 
174a0 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74 65  savepoints neste
174b0 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20  d inside of the 
174c0 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
174d0 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a  operated on. */.
174e0 20 20 20 20 20 20 77 68 69 6c 65 28 20 64 62 2d        while( db-
174f0 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53 61  >pSavepoint!=pSa
17500 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20  vepoint ){.     
17510 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53     pTmp = db->pS
17520 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
17530 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
17540 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a   = pTmp->pNext;.
17550 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44          sqlite3D
17560 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29 3b  bFree(db, pTmp);
17570 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61  .        db->nSa
17580 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20  vepoint--;.     
17590 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   }..      /* If 
175a0 69 74 20 69 73 20 61 20 52 45 4c 45 41 53 45 2c  it is a RELEASE,
175b0 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74 68   then destroy th
175c0 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  e savepoint bein
175d0 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a 20  g operated on . 
175e0 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20       ** too. If 
175f0 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b  it is a ROLLBACK
17600 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20 74 68   TO, then set th
17610 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 66 65  e number of defe
17620 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a 20 63  rred .      ** c
17630 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
17640 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69 6e 20  ions present in 
17650 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f 20  the database to 
17660 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64  the value stored
17670 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e 20 74  .      ** when t
17680 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77 61 73  he savepoint was
17690 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20   created.  */.  
176a0 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45      if( p1==SAVE
176b0 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
176c0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
176d0 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d   pSavepoint==db-
176e0 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20  >pSavepoint );. 
176f0 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65         db->pSave
17700 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69  point = pSavepoi
17710 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20  nt->pNext;.     
17720 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
17730 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74 29  (db, pSavepoint)
17740 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 69  ;.        if( !i
17750 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a  sTransaction ){.
17760 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
17770 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20  avepoint--;.    
17780 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73      }.      }els
17790 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  e{.        db->n
177a0 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 70  DeferredCons = p
177b0 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65  Savepoint->nDefe
177c0 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
177d0 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49    db->nDeferredI
177e0 6d 6d 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f  mmCons = pSavepo
177f0 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d  int->nDeferredIm
17800 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 0a  mCons;.      }..
17810 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72 61        if( !isTra
17820 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20  nsaction ){.    
17830 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
17840 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62  VtabSavepoint(db
17850 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74  , p1, iSavepoint
17860 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
17870 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
17880 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
17890 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
178a0 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65      }.  }..  bre
178b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
178c0 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20  : AutoCommit P1 
178d0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  P2 * * *.**.** S
178e0 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  et the database 
178f0 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67  auto-commit flag
17900 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e   to P1 (1 or 0).
17910 20 49 66 20 50 32 20 69 73 20 74 72 75 65 2c 20   If P2 is true, 
17920 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79  roll.** back any
17930 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76   currently activ
17940 65 20 62 74 72 65 65 20 74 72 61 6e 73 61 63 74  e btree transact
17950 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61  ions. If there a
17960 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a  re any active.**
17970 20 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d   VMs (apart from
17980 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e   this one), then
17990 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c   a ROLLBACK fail
179a0 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66 61 69  s.  A COMMIT fai
179b0 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65 20 61  ls if.** there a
179c0 72 65 20 61 63 74 69 76 65 20 77 72 69 74 69 6e  re active writin
179d0 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76 65 20  g VMs or active 
179e0 56 4d 73 20 74 68 61 74 20 75 73 65 20 73 68 61  VMs that use sha
179f0 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a  red cache..**.**
17a00 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
17a10 6e 20 63 61 75 73 65 73 20 74 68 65 20 56 4d 20  n causes the VM 
17a20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65  to halt..*/.case
17a30 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20   OP_AutoCommit: 
17a40 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65 64 41  {.  int desiredA
17a50 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74  utoCommit;.  int
17a60 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69 6e   iRollback;.  in
17a70 74 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a 20 20 64  t turnOnAC;..  d
17a80 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
17a90 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52   = pOp->p1;.  iR
17aa0 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70  ollback = pOp->p
17ab0 32 3b 0a 20 20 74 75 72 6e 4f 6e 41 43 20 3d 20  2;.  turnOnAC = 
17ac0 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
17ad0 74 20 26 26 20 21 64 62 2d 3e 61 75 74 6f 43 6f  t && !db->autoCo
17ae0 6d 6d 69 74 3b 0a 20 20 61 73 73 65 72 74 28 20  mmit;.  assert( 
17af0 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
17b00 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41  t==1 || desiredA
17b10 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a  utoCommit==0 );.
17b20 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65    assert( desire
17b30 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c  dAutoCommit==1 |
17b40 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29  | iRollback==0 )
17b50 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
17b60 6e 56 64 62 65 41 63 74 69 76 65 3e 30 20 29 3b  nVdbeActive>0 );
17b70 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68    /* At least th
17b80 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74  is one VM is act
17b90 69 76 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ive */.  assert(
17ba0 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
17bb0 0a 0a 23 69 66 20 30 0a 20 20 69 66 28 20 74 75  ..#if 0.  if( tu
17bc0 72 6e 4f 6e 41 43 20 26 26 20 69 52 6f 6c 6c 62  rnOnAC && iRollb
17bd0 61 63 6b 20 26 26 20 64 62 2d 3e 6e 56 64 62 65  ack && db->nVdbe
17be0 41 63 74 69 76 65 3e 31 20 29 7b 0a 20 20 20 20  Active>1 ){.    
17bf0 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72  /* If this instr
17c00 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  uction implement
17c10 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 61 6e 64  s a ROLLBACK and
17c20 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 0a 20   other VMs are. 
17c30 20 20 20 2a 2a 20 73 74 69 6c 6c 20 72 75 6e 6e     ** still runn
17c40 69 6e 67 2c 20 61 6e 64 20 61 20 74 72 61 6e 73  ing, and a trans
17c50 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65  action is active
17c60 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  , return an erro
17c70 72 20 69 6e 64 69 63 61 74 69 6e 67 0a 20 20 20  r indicating.   
17c80 20 2a 2a 20 74 68 61 74 20 74 68 65 20 6f 74 68   ** that the oth
17c90 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70  er VMs must comp
17ca0 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20  lete first. .   
17cb0 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53   */.    sqlite3S
17cc0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
17cd0 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f  rMsg, db, "canno
17ce0 74 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73  t rollback trans
17cf0 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20  action - ".     
17d00 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
17d10 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
17d20 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
17d30 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 0a  E_BUSY;.  }else.
17d40 23 65 6e 64 69 66 0a 20 20 69 66 28 20 74 75 72  #endif.  if( tur
17d50 6e 4f 6e 41 43 20 26 26 20 21 69 52 6f 6c 6c 62  nOnAC && !iRollb
17d60 61 63 6b 20 26 26 20 64 62 2d 3e 6e 56 64 62 65  ack && db->nVdbe
17d70 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 2f  Write>0 ){.    /
17d80 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75  * If this instru
17d90 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73  ction implements
17da0 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74   a COMMIT and ot
17db0 68 65 72 20 56 4d 73 20 61 72 65 20 77 72 69 74  her VMs are writ
17dc0 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 74 75 72  ing.    ** retur
17dd0 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63  n an error indic
17de0 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20 6f  ating that the o
17df0 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f  ther VMs must co
17e00 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20  mplete first. . 
17e10 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65     */.    sqlite
17e20 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
17e30 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e  ErrMsg, db, "can
17e40 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73  not commit trans
17e50 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20  action - ".     
17e60 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
17e70 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
17e80 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
17e90 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20  E_BUSY;.  }else 
17ea0 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  if( desiredAutoC
17eb0 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43  ommit!=db->autoC
17ec0 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66 28  ommit ){.    if(
17ed0 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20   iRollback ){.  
17ee0 20 20 20 20 61 73 73 65 72 74 28 20 64 65 73 69      assert( desi
17ef0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
17f00 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   );.      sqlite
17f10 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 2c  3RollbackAll(db,
17f20 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f   SQLITE_ABORT_RO
17f30 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20 20 20 64  LLBACK);.      d
17f40 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
17f50 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  1;.    }else if(
17f60 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64   (rc = sqlite3Vd
17f70 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29  beCheckFk(p, 1))
17f80 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
17f90 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
17fa0 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73 65  eturn;.    }else
17fb0 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  {.      db->auto
17fc0 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64 65 73  Commit = (u8)des
17fd0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a  iredAutoCommit;.
17fe0 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
17ff0 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51  3VdbeHalt(p)==SQ
18000 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
18010 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b       p->pc = pc;
18020 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74  .        db->aut
18030 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28 31  oCommit = (u8)(1
18040 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  -desiredAutoComm
18050 69 74 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e  it);.        p->
18060 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
18070 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20 67  _BUSY;.        g
18080 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
18090 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
180a0 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
180b0 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a  Statement==0 );.
180c0 20 20 20 20 73 71 6c 69 74 65 33 43 6c 6f 73 65      sqlite3Close
180d0 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a  Savepoints(db);.
180e0 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53      if( p->rc==S
180f0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
18100 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f    rc = SQLITE_DO
18110 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  NE;.    }else{. 
18120 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
18130 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20  _ERROR;.    }.  
18140 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
18150 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  rn;.  }else{.   
18160 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
18170 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
18180 62 2c 0a 20 20 20 20 20 20 20 20 28 21 64 65 73  b,.        (!des
18190 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f  iredAutoCommit)?
181a0 22 63 61 6e 6e 6f 74 20 73 74 61 72 74 20 61 20  "cannot start a 
181b0 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68  transaction with
181c0 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
181d0 22 3a 28 0a 20 20 20 20 20 20 20 20 28 69 52 6f  ":(.        (iRo
181e0 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20  llback)?"cannot 
181f0 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72  rollback - no tr
18200 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74  ansaction is act
18210 69 76 65 22 3a 0a 20 20 20 20 20 20 20 20 20 20  ive":.          
18220 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74           "cannot
18230 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61   commit - no tra
18240 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69  nsaction is acti
18250 76 65 22 29 29 3b 0a 20 20 20 20 20 20 20 20 20  ve"));.         
18260 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
18270 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 62 72  _ERROR;.  }.  br
18280 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
18290 65 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 50  e: Transaction P
182a0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
182b0 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61 6e  .** Begin a tran
182c0 73 61 63 74 69 6f 6e 20 6f 6e 20 64 61 74 61 62  saction on datab
182d0 61 73 65 20 50 31 20 69 66 20 61 20 74 72 61 6e  ase P1 if a tran
182e0 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61  saction is not a
182f0 6c 72 65 61 64 79 0a 2a 2a 20 61 63 74 69 76 65  lready.** active
18300 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f  ..** If P2 is no
18310 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77  n-zero, then a w
18320 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
18330 20 69 73 20 73 74 61 72 74 65 64 2c 20 6f 72 20   is started, or 
18340 69 66 20 61 20 0a 2a 2a 20 72 65 61 64 2d 74 72  if a .** read-tr
18350 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 6c 72  ansaction is alr
18360 65 61 64 79 20 61 63 74 69 76 65 2c 20 69 74 20  eady active, it 
18370 69 73 20 75 70 67 72 61 64 65 64 20 74 6f 20 61  is upgraded to a
18380 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
18390 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  on..** If P2 is 
183a0 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61  zero, then a rea
183b0 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  d-transaction is
183c0 20 73 74 61 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20   started..**.** 
183d0 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P1 is the index 
183e0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
183f0 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68  file on which th
18400 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
18410 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e  .** started.  In
18420 64 65 78 20 30 20 69 73 20 74 68 65 20 6d 61 69  dex 0 is the mai
18430 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
18440 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20 74  and index 1 is t
18450 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20  he.** file used 
18460 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61  for temporary ta
18470 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f  bles.  Indices o
18480 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20  f 2 or more are 
18490 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61  used for.** atta
184a0 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  ched databases..
184b0 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74 65  **.** If a write
184c0 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
184d0 73 74 61 72 74 65 64 20 61 6e 64 20 74 68 65 20  started and the 
184e0 56 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75  Vdbe.usesStmtJou
184f0 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20  rnal flag is.** 
18500 74 72 75 65 20 28 74 68 69 73 20 66 6c 61 67 20  true (this flag 
18510 69 73 20 73 65 74 20 69 66 20 74 68 65 20 56 64  is set if the Vd
18520 62 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f  be may modify mo
18530 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20  re than one row 
18540 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77  and may.** throw
18550 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74   an ABORT except
18560 69 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65 6e  ion), a statemen
18570 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61  t transaction ma
18580 79 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64  y also be opened
18590 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69 66  ..** More specif
185a0 69 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d  ically, a statem
185b0 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
185c0 69 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74 68  is opened iff th
185d0 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
185e0 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72  nnection is curr
185f0 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74  ently not in aut
18600 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72  ocommit mode, or
18610 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 74   if there are ot
18620 68 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73 74  her.** active st
18630 61 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61 74  atements. A stat
18640 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
18650 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20 63 68 61  n allows the cha
18660 6e 67 65 73 20 6d 61 64 65 20 62 79 20 74 68 69  nges made by thi
18670 73 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62 65 20  s.** VDBE to be 
18680 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66 74 65  rolled back afte
18690 72 20 61 6e 20 65 72 72 6f 72 20 77 69 74 68 6f  r an error witho
186a0 75 74 20 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c  ut having to rol
186b0 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e  l back the.** en
186c0 74 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  tire transaction
186d0 2e 20 49 66 20 6e 6f 20 65 72 72 6f 72 20 69 73  . If no error is
186e0 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74 68   encountered, th
186f0 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  e statement tran
18700 73 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20  saction.** will 
18710 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f  automatically co
18720 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56 44  mmit when the VD
18730 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20  BE halts..**.** 
18740 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 74 68  If P5!=0 then th
18750 69 73 20 6f 70 63 6f 64 65 20 61 6c 73 6f 20 63  is opcode also c
18760 68 65 63 6b 73 20 74 68 65 20 73 63 68 65 6d 61  hecks the schema
18770 20 63 6f 6f 6b 69 65 20 61 67 61 69 6e 73 74 20   cookie against 
18780 50 33 0a 2a 2a 20 61 6e 64 20 74 68 65 20 73 63  P3.** and the sc
18790 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20  hema generation 
187a0 63 6f 75 6e 74 65 72 20 61 67 61 69 6e 73 74 20  counter against 
187b0 50 34 2e 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69  P4..** The cooki
187c0 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61  e changes its va
187d0 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74 68 65  lue whenever the
187e0 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
187f0 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69   changes..** Thi
18800 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75  s operation is u
18810 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77 68  sed to detect wh
18820 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b  en that the cook
18830 69 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a  ie has changed.*
18840 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 63  * and that the c
18850 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e  urrent process n
18860 65 65 64 73 20 74 6f 20 72 65 72 65 61 64 20 74  eeds to reread t
18870 68 65 20 73 63 68 65 6d 61 2e 20 20 49 66 20 74  he schema.  If t
18880 68 65 20 73 63 68 65 6d 61 0a 2a 2a 20 63 6f 6f  he schema.** coo
18890 6b 69 65 20 69 6e 20 50 33 20 64 69 66 66 65 72  kie in P3 differ
188a0 73 20 66 72 6f 6d 20 74 68 65 20 73 63 68 65 6d  s from the schem
188b0 61 20 63 6f 6f 6b 69 65 20 69 6e 20 74 68 65 20  a cookie in the 
188c0 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72 20  database header 
188d0 6f 72 0a 2a 2a 20 69 66 20 74 68 65 20 73 63 68  or.** if the sch
188e0 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63  ema generation c
188f0 6f 75 6e 74 65 72 20 69 6e 20 50 34 20 64 69 66  ounter in P4 dif
18900 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20 63 75  fers from the cu
18910 72 72 65 6e 74 0a 2a 2a 20 67 65 6e 65 72 61 74  rrent.** generat
18920 69 6f 6e 20 63 6f 75 6e 74 65 72 2c 20 74 68 65  ion counter, the
18930 6e 20 61 6e 20 53 51 4c 49 54 45 5f 53 43 48 45  n an SQLITE_SCHE
18940 4d 41 20 65 72 72 6f 72 20 69 73 20 72 61 69 73  MA error is rais
18950 65 64 20 61 6e 64 20 65 78 65 63 75 74 69 6f 6e  ed and execution
18960 0a 2a 2a 20 68 61 6c 74 73 2e 20 20 54 68 65 20  .** halts.  The 
18970 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 77  sqlite3_step() w
18980 72 61 70 70 65 72 20 66 75 6e 63 74 69 6f 6e 20  rapper function 
18990 6d 69 67 68 74 20 74 68 65 6e 20 72 65 70 72 65  might then repre
189a0 70 61 72 65 20 74 68 65 0a 2a 2a 20 73 74 61 74  pare the.** stat
189b0 65 6d 65 6e 74 20 61 6e 64 20 72 65 72 75 6e 20  ement and rerun 
189c0 69 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  it from the begi
189d0 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f  nning..*/.case O
189e0 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b  P_Transaction: {
189f0 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20  .  Btree *pBt;. 
18a00 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e   int iMeta;.  in
18a10 74 20 69 47 65 6e 3b 0a 0a 20 20 61 73 73 65 72  t iGen;..  asser
18a20 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
18a30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
18a40 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70  readOnly==0 || p
18a50 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 61  Op->p2==0 );.  a
18a60 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
18a70 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
18a80 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
18a90 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
18aa0 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
18ab0 70 31 29 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  p1) );.  if( pOp
18ac0 2d 3e 70 32 20 26 26 20 28 64 62 2d 3e 66 6c 61  ->p2 && (db->fla
18ad0 67 73 20 26 20 53 51 4c 49 54 45 5f 51 75 65 72  gs & SQLITE_Quer
18ae0 79 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20 20 20  yOnly)!=0 ){.   
18af0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 45 41   rc = SQLITE_REA
18b00 44 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74 6f 20  DONLY;.    goto 
18b10 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
18b20 6f 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20 3d 20  or;.  }.  pBt = 
18b30 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
18b40 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42 74  .pBt;..  if( pBt
18b50 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
18b60 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72  ite3BtreeBeginTr
18b70 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32  ans(pBt, pOp->p2
18b80 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
18b90 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
18ba0 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a      p->pc = pc;.
18bb0 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
18bc0 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
18bd0 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
18be0 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20  return;.    }.  
18bf0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
18c00 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
18c10 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
18c20 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  rror;.    }..   
18c30 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20   if( pOp->p2 && 
18c40 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e  p->usesStmtJourn
18c50 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64 62 2d  al .     && (db-
18c60 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c  >autoCommit==0 |
18c70 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e  | db->nVdbeRead>
18c80 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  1) .    ){.     
18c90 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
18ca0 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70  BtreeIsInTrans(p
18cb0 42 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28  Bt) );.      if(
18cc0 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d   p->iStatement==
18cd0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
18ce0 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d  ert( db->nStatem
18cf0 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53  ent>=0 && db->nS
18d00 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20  avepoint>=0 );. 
18d10 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74         db->nStat
18d20 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20  ement++; .      
18d30 20 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20    p->iStatement 
18d40 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  = db->nSavepoint
18d50 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e   + db->nStatemen
18d60 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  t;.      }..    
18d70 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
18d80 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20  abSavepoint(db, 
18d90 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c  SAVEPOINT_BEGIN,
18da0 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31   p->iStatement-1
18db0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  );.      if( rc=
18dc0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
18dd0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
18de0 65 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74  e3BtreeBeginStmt
18df0 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d  (pBt, p->iStatem
18e00 65 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  ent);.      }.. 
18e10 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68       /* Store th
18e20 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20  e current value 
18e30 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
18e40 68 61 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64  handles deferred
18e50 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20   constraint.    
18e60 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66    ** counter. If
18e70 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   the statement t
18e80 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73  ransaction needs
18e90 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
18ea0 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  ck,.      ** the
18eb0 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
18ec0 6f 75 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20  ounter needs to 
18ed0 62 65 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e  be restored too.
18ee0 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53    */.      p->nS
18ef0 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d  tmtDefCons = db-
18f00 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
18f10 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65        p->nStmtDe
18f20 66 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  fImmCons = db->n
18f30 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
18f40 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 47  .    }..    /* G
18f50 61 74 68 65 72 20 74 68 65 20 73 63 68 65 6d 61  ather the schema
18f60 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
18f70 66 6f 72 20 63 68 65 63 6b 69 6e 67 3a 0a 20 20  for checking:.  
18f80 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54    ** IMPLEMENTAT
18f90 49 4f 4e 2d 4f 46 3a 20 52 2d 33 32 31 39 35 2d  ION-OF: R-32195-
18fa0 31 39 34 36 35 20 54 68 65 20 73 63 68 65 6d 61  19465 The schema
18fb0 20 76 65 72 73 69 6f 6e 20 69 73 20 75 73 65 64   version is used
18fc0 20 62 79 20 53 51 4c 69 74 65 0a 20 20 20 20 2a   by SQLite.    *
18fd0 2a 20 65 61 63 68 20 74 69 6d 65 20 61 20 71 75  * each time a qu
18fe0 65 72 79 20 69 73 20 65 78 65 63 75 74 65 64 20  ery is executed 
18ff0 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74  to ensure that t
19000 68 65 20 69 6e 74 65 72 6e 61 6c 20 63 61 63 68  he internal cach
19010 65 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20  e of the.    ** 
19020 73 63 68 65 6d 61 20 75 73 65 64 20 77 68 65 6e  schema used when
19030 20 63 6f 6d 70 69 6c 69 6e 67 20 74 68 65 20 53   compiling the S
19040 51 4c 20 71 75 65 72 79 20 6d 61 74 63 68 65 73  QL query matches
19050 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74   the schema of t
19060 68 65 0a 20 20 20 20 2a 2a 20 64 61 74 61 62 61  he.    ** databa
19070 73 65 20 61 67 61 69 6e 73 74 20 77 68 69 63 68  se against which
19080 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75   the compiled qu
19090 65 72 79 20 69 73 20 61 63 74 75 61 6c 6c 79 20  ery is actually 
190a0 65 78 65 63 75 74 65 64 2e 0a 20 20 20 20 2a 2f  executed..    */
190b0 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
190c0 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54  eGetMeta(pBt, BT
190d0 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  REE_SCHEMA_VERSI
190e0 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74  ON, (u32 *)&iMet
190f0 61 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d 20 64  a);.    iGen = d
19100 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
19110 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61  pSchema->iGenera
19120 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  tion;.  }else{. 
19130 20 20 20 69 47 65 6e 20 3d 20 69 4d 65 74 61 20     iGen = iMeta 
19140 3d 20 30 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  = 0;.  }.  asser
19150 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  t( pOp->p5==0 ||
19160 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
19170 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69 66 28 20  _INT32 );.  if( 
19180 70 4f 70 2d 3e 70 35 20 26 26 20 28 69 4d 65 74  pOp->p5 && (iMet
19190 61 21 3d 70 4f 70 2d 3e 70 33 20 7c 7c 20 69 47  a!=pOp->p3 || iG
191a0 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69 29 20 29  en!=pOp->p4.i) )
191b0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  {.    sqlite3DbF
191c0 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
191d0 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72  sg);.    p->zErr
191e0 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53  Msg = sqlite3DbS
191f0 74 72 44 75 70 28 64 62 2c 20 22 64 61 74 61 62  trDup(db, "datab
19200 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63  ase schema has c
19210 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a  hanged");.    /*
19220 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63   If the schema-c
19230 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64  ookie from the d
19240 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74  atabase file mat
19250 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20  ches the cookie 
19260 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77  .    ** stored w
19270 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72  ith the in-memor
19280 79 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  y representation
19290 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20   of the schema, 
192a0 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65  do.    ** not re
192b0 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 20  load the schema 
192c0 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
192d0 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20  e file..    **. 
192e0 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c     ** If virtual
192f0 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75  -tables are in u
19300 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20  se, this is not 
19310 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61  just an optimiza
19320 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74  tion..    ** Oft
19330 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f  en, v-tables sto
19340 72 65 20 74 68 65 69 72 20 64 61 74 61 20 69 6e  re their data in
19350 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74 61   other SQLite ta
19360 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20  bles, which.    
19370 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64 20 66  ** are queried f
19380 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74  rom within xNext
19390 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74  () and other v-t
193a0 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69  able methods usi
193b0 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72  ng.    ** prepar
193c0 65 64 20 71 75 65 72 69 65 73 2e 20 49 66 20 73  ed queries. If s
193d0 75 63 68 20 61 20 71 75 65 72 79 20 69 73 20 6f  uch a query is o
193e0 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64  ut-of-date, we d
193f0 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20  o not want to.  
19400 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65    ** discard the
19410 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
19420 2c 20 61 73 20 74 68 65 20 75 73 65 72 20 63 6f  , as the user co
19430 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  de implementing 
19440 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62  the.    ** v-tab
19450 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f  le would have to
19460 20 62 65 20 72 65 61 64 79 20 66 6f 72 20 74 68   be ready for th
19470 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  e sqlite3_vtab s
19480 74 72 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a  tructure itself.
19490 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76      ** to be inv
194a0 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76 65  alidated wheneve
194b0 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  r sqlite3_step()
194c0 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20   is called from 
194d0 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61  within .    ** a
194e0 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e   v-table method.
194f0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
19500 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
19510 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
19520 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29  _cookie!=iMeta )
19530 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  {.      sqlite3R
19540 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62  esetOneSchema(db
19550 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
19560 7d 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  }.    p->expired
19570 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53   = 1;.    rc = S
19580 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20  QLITE_SCHEMA;.  
19590 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
195a0 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f   Opcode: ReadCoo
195b0 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  kie P1 P2 P3 * *
195c0 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b  .**.** Read cook
195d0 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f  ie number P3 fro
195e0 6d 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e  m database P1 an
195f0 64 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20  d write it into 
19600 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
19610 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68  P3==1 is the sch
19620 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33  ema version.  P3
19630 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62  ==2 is the datab
19640 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50  ase format..** P
19650 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f  3==3 is the reco
19660 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61  mmended pager ca
19670 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f  che size, and so
19680 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69   forth.  P1==0 i
19690 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61  s.** the main da
196a0 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
196b0 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74  P1==1 is the dat
196c0 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
196d0 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70  to store.** temp
196e0 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
196f0 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62  .** There must b
19700 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e  e a read-lock on
19710 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28 65   the database (e
19720 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74  ither a transact
19730 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73  ion.** must be s
19740 74 61 72 74 65 64 20 6f 72 20 74 68 65 72 65 20  tarted or there 
19750 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20  must be an open 
19760 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a  cursor) before.*
19770 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73  * executing this
19780 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
19790 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f  .case OP_ReadCoo
197a0 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  kie: {          
197b0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
197c0 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74  release */.  int
197d0 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 44   iMeta;.  int iD
197e0 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65  b;.  int iCookie
197f0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ;..  assert( p->
19800 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 69  bIsReader );.  i
19810 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
19820 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70  iCookie = pOp->p
19830 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  3;.  assert( pOp
19840 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p3<SQLITE_N_BT
19850 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73  REE_META );.  as
19860 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
19870 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
19880 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62   assert( db->aDb
19890 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a  [iDb].pBt!=0 );.
198a0 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
198b0 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
198c0 6b 2c 20 69 44 62 29 20 29 3b 0a 0a 20 20 73 71  k, iDb) );..  sq
198d0 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74  lite3BtreeGetMet
198e0 61 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  a(db->aDb[iDb].p
198f0 42 74 2c 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33  Bt, iCookie, (u3
19900 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 70  2 *)&iMeta);.  p
19910 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61  Out->u.i = iMeta
19920 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
19930 20 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b   Opcode: SetCook
19940 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ie P1 P2 P3 * *.
19950 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
19960 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
19970 74 65 72 20 50 33 20 28 69 6e 74 65 72 70 72 65  ter P3 (interpre
19980 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ted as an intege
19990 72 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69  r).** into cooki
199a0 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64  e number P2 of d
199b0 61 74 61 62 61 73 65 20 50 31 2e 20 20 50 32 3d  atabase P1.  P2=
199c0 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61  =1 is the schema
199d0 20 76 65 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50   version.  .** P
199e0 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  2==2 is the data
199f0 62 61 73 65 20 66 6f 72 6d 61 74 2e 20 50 32 3d  base format. P2=
19a00 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d  =3 is the recomm
19a10 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68  ended pager cach
19a20 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20  e .** size, and 
19a30 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30  so forth.  P1==0
19a40 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
19a50 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50  abase file and P
19a60 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a 20  1==1 is the .** 
19a70 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73  database file us
19a80 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70  ed to store temp
19a90 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
19aa0 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f  .** A transactio
19ab0 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65  n must be starte
19ac0 64 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69  d before executi
19ad0 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
19ae0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f  */.case OP_SetCo
19af0 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a  okie: {       /*
19b00 20 69 6e 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44   in3 */.  Db *pD
19b10 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  b;.  assert( pOp
19b20 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p2<SQLITE_N_BT
19b30 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73  REE_META );.  as
19b40 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
19b50 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
19b60 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
19b70 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
19b80 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
19b90 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
19ba0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
19bb0 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61  ;.  pDb = &db->a
19bc0 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  Db[pOp->p1];.  a
19bd0 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21  ssert( pDb->pBt!
19be0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
19bf0 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74  sqlite3SchemaMut
19c00 65 78 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e  exHeld(db, pOp->
19c10 70 31 2c 20 30 29 20 29 3b 0a 20 20 70 49 6e 33  p1, 0) );.  pIn3
19c20 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
19c30 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ];.  sqlite3Vdbe
19c40 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
19c50 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f  n3);.  /* See no
19c60 74 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73  te about index s
19c70 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65  hifting on OP_Re
19c80 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63  adCookie */.  rc
19c90 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 55   = sqlite3BtreeU
19ca0 70 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70  pdateMeta(pDb->p
19cb0 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e  Bt, pOp->p2, (in
19cc0 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  t)pIn3->u.i);.  
19cd0 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52  if( pOp->p2==BTR
19ce0 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  EE_SCHEMA_VERSIO
19cf0 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e  N ){.    /* When
19d00 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
19d10 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f  ie changes, reco
19d20 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69  rd the new cooki
19d30 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a  e internally */.
19d40 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
19d50 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20  ->schema_cookie 
19d60 3d 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69  = (int)pIn3->u.i
19d70 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20  ;.    db->flags 
19d80 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e  |= SQLITE_Intern
19d90 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65  Changes;.  }else
19da0 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54   if( pOp->p2==BT
19db0 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20  REE_FILE_FORMAT 
19dc0 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64  ){.    /* Record
19dd0 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20   changes in the 
19de0 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20  file format */. 
19df0 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
19e00 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28  >file_format = (
19e10 75 38 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20  u8)pIn3->u.i;.  
19e20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d  }.  if( pOp->p1=
19e30 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76  =1 ){.    /* Inv
19e40 61 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70  alidate all prep
19e50 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  ared statements 
19e60 77 68 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d  whenever the TEM
19e70 50 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a  P database.    *
19e80 2a 20 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e  * schema is chan
19e90 67 65 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36  ged.  Ticket #16
19ea0 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  44 */.    sqlite
19eb0 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
19ec0 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
19ed0 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
19ee0 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  0;.  }.  break;.
19ef0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
19f00 65 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20  enRead P1 P2 P3 
19f10 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
19f20 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50  s: root=P2 iDb=P
19f30 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  3.**.** Open a r
19f40 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20  ead-only cursor 
19f50 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
19f60 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f   table whose roo
19f70 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20  t page is.** P2 
19f80 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69  in a database fi
19f90 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62 61 73  le.  The databas
19fa0 65 20 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d  e file is determ
19fb0 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20  ined by P3. .** 
19fc0 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20  P3==0 means the 
19fd0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50  main database, P
19fe0 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64  3==1 means the d
19ff0 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72  atabase used for
1a000 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74   .** temporary t
1a010 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20  ables, and P3>1 
1a020 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65 20 63  means used the c
1a030 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74  orresponding att
1a040 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  ached.** databas
1a050 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65 77  e.  Give the new
1a060 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74   cursor an ident
1a070 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68  ifier of P1.  Th
1a080 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e  e P1.** values n
1a090 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69  eed not be conti
1a0a0 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31  guous but all P1
1a0b0 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62   values should b
1a0c0 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73  e small integers
1a0d0 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72  ..** It is an er
1a0e0 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65  ror for P1 to be
1a0f0 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a   negative..**.**
1a100 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75   If P5!=0 then u
1a110 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
1a120 66 20 72 65 67 69 73 74 65 72 20 50 32 20 61 73  f register P2 as
1a130 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20   the root page, 
1a140 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  not.** the value
1a150 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a   of P2 itself..*
1a160 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20  *.** There will 
1a170 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f  be a read lock o
1a180 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  n the database w
1a190 68 65 6e 65 76 65 72 20 74 68 65 72 65 20 69 73  henever there is
1a1a0 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73   an.** open curs
1a1b0 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61 74 61  or.  If the data
1a1c0 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65  base was unlocke
1a1d0 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20  d prior to this 
1a1e0 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74  instruction.** t
1a1f0 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20  hen a read lock 
1a200 69 73 20 61 63 71 75 69 72 65 64 20 61 73 20 70  is acquired as p
1a210 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74  art of this inst
1a220 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64  ruction.  A read
1a230 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20  .** lock allows 
1a240 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20  other processes 
1a250 74 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61  to read the data
1a260 62 61 73 65 20 62 75 74 20 70 72 6f 68 69 62 69  base but prohibi
1a270 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20  ts.** any other 
1a280 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64  process from mod
1a290 69 66 79 69 6e 67 20 74 68 65 20 64 61 74 61 62  ifying the datab
1a2a0 61 73 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c  ase.  The read l
1a2b0 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73  ock is.** releas
1a2c0 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73  ed when all curs
1a2d0 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20  ors are closed. 
1a2e0 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   If this instruc
1a2f0 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a  tion attempts.**
1a300 20 74 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c   to get a read l
1a310 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74  ock but fails, t
1a320 68 65 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e  he script termin
1a330 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20  ates with an.** 
1a340 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f  SQLITE_BUSY erro
1a350 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  r code..**.** Th
1a360 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62  e P4 value may b
1a370 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65  e either an inte
1a380 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f  ger (P4_INT32) o
1a390 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a  r a pointer to.*
1a3a0 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  * a KeyInfo stru
1a3b0 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46  cture (P4_KEYINF
1a3c0 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70  O). If it is a p
1a3d0 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49  ointer to a KeyI
1a3e0 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72  nfo .** structur
1a3f0 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72  e, then said str
1a400 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74  ucture defines t
1a410 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  he content and c
1a420 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71  ollating .** seq
1a430 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64  uence of the ind
1a440 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e  ex being opened.
1a450 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
1a460 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  4 is an integer 
1a470 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73  .** value, it is
1a480 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
1a490 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1a4a0 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a   the table..**.*
1a4b0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f 70 65 6e  * See also: Open
1a4c0 57 72 69 74 65 2c 20 52 65 6f 70 65 6e 49 64 78  Write, ReopenIdx
1a4d0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
1a4e0 65 6f 70 65 6e 49 64 78 20 50 31 20 50 32 20 50  eopenIdx P1 P2 P
1a4f0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
1a500 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62  sis: root=P2 iDb
1a510 3d 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65  =P3.**.** The Re
1a520 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 77  openIdx opcode w
1a530 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b  orks exactly lik
1a540 65 20 52 65 61 64 4f 70 65 6e 20 65 78 63 65 70  e ReadOpen excep
1a550 74 20 74 68 61 74 20 69 74 20 66 69 72 73 74 0a  t that it first.
1a560 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65  ** checks to see
1a570 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 6f   if the cursor o
1a580 6e 20 50 31 20 69 73 20 61 6c 72 65 61 64 79 20  n P1 is already 
1a590 6f 70 65 6e 20 77 69 74 68 20 61 20 72 6f 6f 74  open with a root
1a5a0 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20   page.** number 
1a5b0 6f 66 20 50 32 20 61 6e 64 20 69 66 20 69 74 20  of P2 and if it 
1a5c0 69 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 62  is this opcode b
1a5d0 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 20  ecomes a no-op. 
1a5e0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1a5f0 0a 2a 2a 20 69 66 20 74 68 65 20 63 75 72 73 6f  .** if the curso
1a600 72 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65  r is already ope
1a610 6e 2c 20 64 6f 20 6e 6f 74 20 72 65 6f 70 65 6e  n, do not reopen
1a620 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52   it..**.** The R
1a630 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20  eopenIdx opcode 
1a640 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64  may only be used
1a650 20 77 69 74 68 20 50 35 3d 3d 30 20 61 6e 64 20   with P5==0 and 
1a660 77 69 74 68 20 50 34 20 62 65 69 6e 67 0a 2a 2a  with P4 being.**
1a670 20 61 20 50 34 5f 4b 45 59 49 4e 46 4f 20 6f 62   a P4_KEYINFO ob
1a680 6a 65 63 74 2e 20 20 46 75 72 74 68 65 72 6d 6f  ject.  Furthermo
1a690 72 65 2c 20 74 68 65 20 50 33 20 76 61 6c 75 65  re, the P3 value
1a6a0 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d   must be the sam
1a6b0 65 20 61 73 0a 2a 2a 20 65 76 65 72 79 20 6f 74  e as.** every ot
1a6c0 68 65 72 20 52 65 6f 70 65 6e 49 64 78 20 6f 72  her ReopenIdx or
1a6d0 20 4f 70 65 6e 52 65 61 64 20 66 6f 72 20 74 68   OpenRead for th
1a6e0 65 20 73 61 6d 65 20 63 75 72 73 6f 72 20 6e 75  e same cursor nu
1a6f0 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  mber..**.** See 
1a700 74 68 65 20 4f 70 65 6e 52 65 61 64 20 6f 70 63  the OpenRead opc
1a710 6f 64 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  ode documentatio
1a720 6e 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  n for additional
1a730 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
1a740 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1a750 57 72 69 74 65 20 50 31 20 50 32 20 50 33 20 50  Write P1 P2 P3 P
1a760 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
1a770 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33  : root=P2 iDb=P3
1a780 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65  .**.** Open a re
1a790 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20  ad/write cursor 
1a7a0 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20  named P1 on the 
1a7b0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
1a7c0 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67  hose root.** pag
1a7d0 65 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66 20  e is P2.  Or if 
1a7e0 50 35 21 3d 30 20 75 73 65 20 74 68 65 20 63 6f  P5!=0 use the co
1a7f0 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
1a800 72 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68 65  r P2 to find the
1a810 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a  .** root page..*
1a820 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  *.** The P4 valu
1a830 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20  e may be either 
1a840 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49  an integer (P4_I
1a850 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74  NT32) or a point
1a860 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e  er to.** a KeyIn
1a870 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34  fo structure (P4
1a880 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74  _KEYINFO). If it
1a890 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
1a8a0 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73   a KeyInfo .** s
1a8b0 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73  tructure, then s
1a8c0 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64 65  aid structure de
1a8d0 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e  fines the conten
1a8e0 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20  t and collating 
1a8f0 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20  .** sequence of 
1a900 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20  the index being 
1a910 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73  opened. Otherwis
1a920 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69  e, if P4 is an i
1a930 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65  nteger .** value
1a940 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  , it is set to t
1a950 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1a960 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
1a970 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20  e, or to the.** 
1a980 6c 61 72 67 65 73 74 20 69 6e 64 65 78 20 6f 66  largest index of
1a990 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74   any column of t
1a9a0 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73  he table that is
1a9b0 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a   actually used..
1a9c0 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
1a9d0 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73  uction works jus
1a9e0 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20  t like OpenRead 
1a9f0 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f  except that it o
1aa00 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a  pens the cursor.
1aa10 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65  ** in read/write
1aa20 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67 69   mode.  For a gi
1aa30 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72 65  ven table, there
1aa40 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d   can be one or m
1aa50 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a  ore read-only.**
1aa60 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73 69   cursors or a si
1aa70 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65 20  ngle read/write 
1aa80 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20 62  cursor but not b
1aa90 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  oth..**.** See a
1aaa0 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f  lso OpenRead..*/
1aab0 0a 63 61 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49  .case OP_ReopenI
1aac0 64 78 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65  dx: {.  int nFie
1aad0 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70  ld;.  KeyInfo *p
1aae0 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70  KeyInfo;.  int p
1aaf0 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20  2;.  int iDb;.  
1ab00 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20 42 74  int wrFlag;.  Bt
1ab10 72 65 65 20 2a 70 58 3b 0a 20 20 56 64 62 65 43  ree *pX;.  VdbeC
1ab20 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44  ursor *pCur;.  D
1ab30 62 20 2a 70 44 62 3b 0a 0a 20 20 61 73 73 65 72  b *pDb;..  asser
1ab40 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  t( pOp->p5==0 ||
1ab50 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47   pOp->p5==OPFLAG
1ab60 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20 61 73 73  _SEEKEQ );.  ass
1ab70 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
1ab80 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a  ==P4_KEYINFO );.
1ab90 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73    pCur = p->apCs
1aba0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  r[pOp->p1];.  if
1abb0 28 20 70 43 75 72 20 26 26 20 70 43 75 72 2d 3e  ( pCur && pCur->
1abc0 70 67 6e 6f 52 6f 6f 74 3d 3d 28 75 33 32 29 70  pgnoRoot==(u32)p
1abd0 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 61 73  Op->p2 ){.    as
1abe0 73 65 72 74 28 20 70 43 75 72 2d 3e 69 44 62 3d  sert( pCur->iDb=
1abf0 3d 70 4f 70 2d 3e 70 33 20 29 3b 20 20 20 20 20  =pOp->p3 );     
1ac00 20 2f 2a 20 47 75 61 72 61 6e 74 65 65 64 20 62   /* Guaranteed b
1ac10 79 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  y the code gener
1ac20 61 74 6f 72 20 2a 2f 0a 20 20 20 20 67 6f 74 6f  ator */.    goto
1ac30 20 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74   open_cursor_set
1ac40 5f 68 69 6e 74 73 3b 0a 20 20 7d 0a 20 20 2f 2a  _hints;.  }.  /*
1ac50 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   If the cursor i
1ac60 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
1ac70 6f 70 65 6e 20 6f 72 20 69 73 20 6f 70 65 6e 20  open or is open 
1ac80 6f 6e 20 61 20 64 69 66 66 65 72 65 6e 74 0a 20  on a different. 
1ac90 20 2a 2a 20 69 6e 64 65 78 2c 20 74 68 65 6e 20   ** index, then 
1aca0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  fall through int
1acb0 6f 20 4f 50 5f 4f 70 65 6e 52 65 61 64 20 74 6f  o OP_OpenRead to
1acc0 20 66 6f 72 63 65 20 61 20 72 65 6f 70 65 6e 20   force a reopen 
1acd0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52  */.case OP_OpenR
1ace0 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ead:.case OP_Ope
1acf0 6e 57 72 69 74 65 3a 0a 0a 20 20 61 73 73 65 72  nWrite:..  asser
1ad00 74 28 20 28 70 4f 70 2d 3e 70 35 26 28 4f 50 46  t( (pOp->p5&(OPF
1ad10 4c 41 47 5f 50 32 49 53 52 45 47 7c 4f 50 46 4c  LAG_P2ISREG|OPFL
1ad20 41 47 5f 42 55 4c 4b 43 53 52 7c 4f 50 46 4c 41  AG_BULKCSR|OPFLA
1ad30 47 5f 53 45 45 4b 45 51 29 29 3d 3d 70 4f 70 2d  G_SEEKEQ))==pOp-
1ad40 3e 70 35 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >p5 );.  assert(
1ad50 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1ad60 5f 4f 70 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f  _OpenWrite || pO
1ad70 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d  p->p5==0 || pOp-
1ad80 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b  >p5==OPFLAG_SEEK
1ad90 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EQ );.  assert( 
1ada0 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
1adb0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
1adc0 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65  pcode==OP_OpenRe
1add0 61 64 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  ad || pOp->opcod
1ade0 65 3d 3d 4f 50 5f 52 65 6f 70 65 6e 49 64 78 0a  e==OP_ReopenIdx.
1adf0 20 20 20 20 20 20 20 20 20 20 7c 7c 20 70 2d 3e            || p->
1ae00 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a  readOnly==0 );..
1ae10 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64    if( p->expired
1ae20 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
1ae30 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41  ITE_ABORT_ROLLBA
1ae40 43 4b 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  CK;.    break;. 
1ae50 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30   }..  nField = 0
1ae60 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30  ;.  pKeyInfo = 0
1ae70 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
1ae80 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ;.  iDb = pOp->p
1ae90 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  3;.  assert( iDb
1aea0 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
1aeb0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
1aec0 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
1aed0 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b  reeMask, iDb) );
1aee0 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
1aef0 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70  b[iDb];.  pX = p
1af00 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65 72  Db->pBt;.  asser
1af10 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20 69 66  t( pX!=0 );.  if
1af20 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1af30 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a 20  P_OpenWrite ){. 
1af40 20 20 20 77 72 46 6c 61 67 20 3d 20 31 3b 0a 20     wrFlag = 1;. 
1af50 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
1af60 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c  e3SchemaMutexHel
1af70 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b  d(db, iDb, 0) );
1af80 0a 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70 53  .    if( pDb->pS
1af90 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
1afa0 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65  at < p->minWrite
1afb0 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20  FileFormat ){.  
1afc0 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46      p->minWriteF
1afd0 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d  ileFormat = pDb-
1afe0 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66  >pSchema->file_f
1aff0 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d  ormat;.    }.  }
1b000 65 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c 61 67  else{.    wrFlag
1b010 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20   = 0;.  }.  if( 
1b020 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
1b030 5f 50 32 49 53 52 45 47 20 29 7b 0a 20 20 20 20  _P2ISREG ){.    
1b040 61 73 73 65 72 74 28 20 70 32 3e 30 20 29 3b 0a  assert( p2>0 );.
1b050 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3c 3d      assert( p2<=
1b060 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
1b070 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 32  sor) );.    pIn2
1b080 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20   = &aMem[p2];.  
1b090 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
1b0a0 61 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a 20 20  alid(pIn2) );.  
1b0b0 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d    assert( (pIn2-
1b0c0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
1b0d0 29 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  )!=0 );.    sqli
1b0e0 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
1b0f0 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20  rify(pIn2);.    
1b100 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e  p2 = (int)pIn2->
1b110 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20  u.i;.    /* The 
1b120 70 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20  p2 value always 
1b130 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69  comes from a pri
1b140 6f 72 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  or OP_CreateTabl
1b150 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20  e opcode and.   
1b160 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20   ** that opcode 
1b170 77 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20  will always set 
1b180 74 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20  the p2 value to 
1b190 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73  2 or more or els
1b1a0 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49  e fail..    ** I
1b1b0 66 20 74 68 65 72 65 20 77 65 72 65 20 61 20 66  f there were a f
1b1c0 61 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70  ailure, the prep
1b1d0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77  ared statement w
1b1e0 6f 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64  ould have halted
1b1f0 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72  .    ** before r
1b200 65 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73  eaching this ins
1b210 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20  truction. */.   
1b220 20 69 66 28 20 4e 45 56 45 52 28 70 32 3c 32 29   if( NEVER(p2<2)
1b230 20 29 20 7b 0a 20 20 20 20 20 20 72 63 20 3d 20   ) {.      rc = 
1b240 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
1b250 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  KPT;.      goto 
1b260 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1b270 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  or;.    }.  }.  
1b280 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
1b290 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20  =P4_KEYINFO ){. 
1b2a0 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f     pKeyInfo = pO
1b2b0 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
1b2c0 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
1b2d0 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64  Info->enc==ENC(d
1b2e0 62 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  b) );.    assert
1b2f0 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d  ( pKeyInfo->db==
1b300 64 62 20 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64  db );.    nField
1b310 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69   = pKeyInfo->nFi
1b320 65 6c 64 2b 70 4b 65 79 49 6e 66 6f 2d 3e 6e 58  eld+pKeyInfo->nX
1b330 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73 65 20 69  Field;.  }else i
1b340 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
1b350 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20 20 20  P4_INT32 ){.    
1b360 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34  nField = pOp->p4
1b370 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  .i;.  }.  assert
1b380 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
1b390 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64    assert( nField
1b3a0 3e 3d 30 20 29 3b 0a 20 20 74 65 73 74 63 61 73  >=0 );.  testcas
1b3b0 65 28 20 6e 46 69 65 6c 64 3d 3d 30 20 29 3b 20  e( nField==0 ); 
1b3c0 20 2f 2a 20 54 61 62 6c 65 20 77 69 74 68 20 49   /* Table with I
1b3d0 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
1b3e0 45 59 20 61 6e 64 20 6e 6f 74 68 69 6e 67 20 65  EY and nothing e
1b3f0 6c 73 65 20 2a 2f 0a 20 20 70 43 75 72 20 3d 20  lse */.  pCur = 
1b400 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1b410 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69 65 6c  , pOp->p1, nFiel
1b420 64 2c 20 69 44 62 2c 20 31 29 3b 0a 20 20 69 66  d, iDb, 1);.  if
1b430 28 20 70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f  ( pCur==0 ) goto
1b440 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d   no_mem;.  pCur-
1b450 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
1b460 70 43 75 72 2d 3e 69 73 4f 72 64 65 72 65 64 20  pCur->isOrdered 
1b470 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 70 67 6e  = 1;.  pCur->pgn
1b480 6f 52 6f 6f 74 20 3d 20 70 32 3b 0a 20 20 72 63  oRoot = p2;.  rc
1b490 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1b4a0 75 72 73 6f 72 28 70 58 2c 20 70 32 2c 20 77 72  ursor(pX, p2, wr
1b4b0 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20  Flag, pKeyInfo, 
1b4c0 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  pCur->pCursor);.
1b4d0 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f    pCur->pKeyInfo
1b4e0 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 2f   = pKeyInfo;.  /
1b4f0 2a 20 53 65 74 20 74 68 65 20 56 64 62 65 43 75  * Set the VdbeCu
1b500 72 73 6f 72 2e 69 73 54 61 62 6c 65 20 76 61 72  rsor.isTable var
1b510 69 61 62 6c 65 2e 20 50 72 65 76 69 6f 75 73 20  iable. Previous 
1b520 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a  versions of.  **
1b530 20 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f 20   SQLite used to 
1b540 63 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f 6f  check if the roo
1b550 74 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65 72  t-page flags wer
1b560 65 20 73 61 6e 65 20 61 74 20 74 68 69 73 20 70  e sane at this p
1b570 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65  oint.  ** and re
1b580 70 6f 72 74 20 64 61 74 61 62 61 73 65 20 63 6f  port database co
1b590 72 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65 79  rruption if they
1b5a0 20 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20 74   were not, but t
1b5b0 68 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20 20  his check has.  
1b5c0 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20 69  ** since moved i
1b5d0 6e 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c 61  nto the btree la
1b5e0 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75  yer.  */  .  pCu
1b5f0 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70  r->isTable = pOp
1b600 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59  ->p4type!=P4_KEY
1b610 49 4e 46 4f 3b 0a 0a 6f 70 65 6e 5f 63 75 72 73  INFO;..open_curs
1b620 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3a 0a 20 20  or_set_hints:.  
1b630 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 42  assert( OPFLAG_B
1b640 55 4c 4b 43 53 52 3d 3d 42 54 52 45 45 5f 42 55  ULKCSR==BTREE_BU
1b650 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20 61 73 73 65  LKLOAD );.  asse
1b660 72 74 28 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  rt( OPFLAG_SEEKE
1b670 51 3d 3d 42 54 52 45 45 5f 53 45 45 4b 5f 45 51  Q==BTREE_SEEK_EQ
1b680 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 42 74 72   );.  sqlite3Btr
1b690 65 65 43 75 72 73 6f 72 48 69 6e 74 73 28 70 43  eeCursorHints(pC
1b6a0 75 72 2d 3e 70 43 75 72 73 6f 72 2c 0a 20 20 20  ur->pCursor,.   
1b6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6c0 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20         (pOp->p5 
1b6d0 26 20 28 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  & (OPFLAG_BULKCS
1b6e0 52 7c 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 29  R|OPFLAG_SEEKEQ)
1b6f0 29 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ));.  break;.}..
1b700 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45  /* Opcode: OpenE
1b710 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20 2a  phemeral P1 P2 *
1b720 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
1b730 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a  is: nColumn=P2.*
1b740 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20  *.** Open a new 
1b750 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 74  cursor P1 to a t
1b760 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a  ransient table..
1b770 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69 73  ** The cursor is
1b780 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20 72   always opened r
1b790 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20 69  ead/write even i
1b7a0 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  f .** the main d
1b7b0 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64 2d  atabase is read-
1b7c0 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68 65 6d  only.  The ephem
1b7d0 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73  eral.** table is
1b7e0 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61 74   deleted automat
1b7f0 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65 20  ically when the 
1b800 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65 64  cursor is closed
1b810 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68  ..**.** P2 is th
1b820 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
1b830 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68 65 6d  mns in the ephem
1b840 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  eral table..** T
1b850 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 73  he cursor points
1b860 20 74 6f 20 61 20 42 54 72 65 65 20 74 61 62 6c   to a BTree tabl
1b870 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20 74  e if P4==0 and t
1b880 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65 78 0a  o a BTree index.
1b890 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20  ** if P4 is not 
1b8a0 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74  0.  If P4 is not
1b8b0 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73   NULL, it points
1b8c0 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73 74   to a KeyInfo st
1b8d0 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74 20  ructure.** that 
1b8e0 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d  defines the form
1b8f0 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74 68  at of keys in th
1b900 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54  e index..**.** T
1b910 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72 20  he P5 parameter 
1b920 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f 66  can be a mask of
1b930 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66 6c 61   the BTREE_* fla
1b940 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e  gs defined.** in
1b950 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65 73 65   btree.h.  These
1b960 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61   flags control a
1b970 73 70 65 63 74 73 20 6f 66 20 74 68 65 20 6f 70  spects of the op
1b980 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  eration of.** th
1b990 65 20 62 74 72 65 65 2e 20 20 54 68 65 20 42 54  e btree.  The BT
1b9a0 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c  REE_OMIT_JOURNAL
1b9b0 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e 47 4c   and BTREE_SINGL
1b9c0 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61  E flags are.** a
1b9d0 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  dded automatical
1b9e0 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ly..*/./* Opcode
1b9f0 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 20  : OpenAutoindex 
1ba00 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
1ba10 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d  Synopsis: nColum
1ba20 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  n=P2.**.** This 
1ba30 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74 68 65  opcode works the
1ba40 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e   same as OP_Open
1ba50 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74 20 68  Ephemeral.  It h
1ba60 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e  as a.** differen
1ba70 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74 69 6e  t name to distin
1ba80 67 75 69 73 68 20 69 74 73 20 75 73 65 2e 20 20  guish its use.  
1ba90 54 61 62 6c 65 73 20 63 72 65 61 74 65 64 20 75  Tables created u
1baa0 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73 20  sing.** by this 
1bab0 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75  opcode will be u
1bac0 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61 74 69  sed for automati
1bad0 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 72  cally created tr
1bae0 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63  ansient.** indic
1baf0 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a  es in joins..*/.
1bb00 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f  case OP_OpenAuto
1bb10 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f  index: .case OP_
1bb20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b  OpenEphemeral: {
1bb30 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1bb40 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70  Cx;.  KeyInfo *p
1bb50 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74  KeyInfo;..  stat
1bb60 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76 66 73  ic const int vfs
1bb70 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53  Flags = .      S
1bb80 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57  QLITE_OPEN_READW
1bb90 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  RITE |.      SQL
1bba0 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20  ITE_OPEN_CREATE 
1bbb0 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1bbc0 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a  PEN_EXCLUSIVE |.
1bbd0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1bbe0 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20  N_DELETEONCLOSE 
1bbf0 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1bc00 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42  PEN_TRANSIENT_DB
1bc10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1bc20 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1bc30 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29  rt( pOp->p2>=0 )
1bc40 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
1bc50 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1bc60 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31  >p1, pOp->p2, -1
1bc70 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  , 1);.  if( pCx=
1bc80 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1bc90 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77  ;.  pCx->nullRow
1bca0 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45   = 1;.  pCx->isE
1bcb0 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20  phemeral = 1;.  
1bcc0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1bcd0 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20  eOpen(db->pVfs, 
1bce0 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e 70 42 74  0, db, &pCx->pBt
1bcf0 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
1bd00 20 20 20 20 20 20 20 20 20 20 20 42 54 52 45 45             BTREE
1bd10 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20  _OMIT_JOURNAL | 
1bd20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70  BTREE_SINGLE | p
1bd30 4f 70 2d 3e 70 35 2c 20 76 66 73 46 6c 61 67 73  Op->p5, vfsFlags
1bd40 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
1bd50 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63  ITE_OK ){.    rc
1bd60 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
1bd70 65 67 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70  eginTrans(pCx->p
1bd80 42 74 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66  Bt, 1);.  }.  if
1bd90 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1bda0 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 74  ){.    /* If a t
1bdb0 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 69  ransient index i
1bdc0 73 20 72 65 71 75 69 72 65 64 2c 20 63 72 65 61  s required, crea
1bdd0 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69 6e 67  te it by calling
1bde0 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 42  .    ** sqlite3B
1bdf0 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
1be00 29 20 77 69 74 68 20 74 68 65 20 42 54 52 45 45  ) with the BTREE
1be10 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67 20 62 65  _BLOBKEY flag be
1be20 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e  fore.    ** open
1be30 69 6e 67 20 69 74 2e 20 49 66 20 61 20 74 72 61  ing it. If a tra
1be40 6e 73 69 65 6e 74 20 74 61 62 6c 65 20 69 73 20  nsient table is 
1be50 72 65 71 75 69 72 65 64 2c 20 6a 75 73 74 20 75  required, just u
1be60 73 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 61 75  se the.    ** au
1be70 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61  tomatically crea
1be80 74 65 64 20 74 61 62 6c 65 20 77 69 74 68 20 72  ted table with r
1be90 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e 20 42  oot-page 1 (an B
1bea0 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65  LOB_INTKEY table
1beb0 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  )..    */.    if
1bec0 28 20 28 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  ( (pKeyInfo = pO
1bed0 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 29 21  p->p4.pKeyInfo)!
1bee0 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  =0 ){.      int 
1bef0 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73 65  pgno;.      asse
1bf00 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1bf10 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20  =P4_KEYINFO );. 
1bf20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1bf30 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c  3BtreeCreateTabl
1bf40 65 28 70 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e  e(pCx->pBt, &pgn
1bf50 6f 2c 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59  o, BTREE_BLOBKEY
1bf60 20 7c 20 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20   | pOp->p5); .  
1bf70 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
1bf80 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
1bf90 20 61 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d   assert( pgno==M
1bfa0 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a  ASTER_ROOT+1 );.
1bfb0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1bfc0 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62  pKeyInfo->db==db
1bfd0 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1bfe0 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e  rt( pKeyInfo->en
1bff0 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20  c==ENC(db) );.  
1c000 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49        pCx->pKeyI
1c010 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a  nfo = pKeyInfo;.
1c020 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1c030 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1c040 70 43 78 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20  pCx->pBt, pgno, 
1c050 31 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78  1, pKeyInfo, pCx
1c060 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
1c070 20 20 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e 69    }.      pCx->i
1c080 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20  sTable = 0;.    
1c090 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
1c0a0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  = sqlite3BtreeCu
1c0b0 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d  rsor(pCx->pBt, M
1c0c0 41 53 54 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30  ASTER_ROOT, 1, 0
1c0d0 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  , pCx->pCursor);
1c0e0 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
1c0f0 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20  ble = 1;.    }. 
1c100 20 7d 0a 20 20 70 43 78 2d 3e 69 73 4f 72 64 65   }.  pCx->isOrde
1c110 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d  red = (pOp->p5!=
1c120 42 54 52 45 45 5f 55 4e 4f 52 44 45 52 45 44 29  BTREE_UNORDERED)
1c130 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1c140 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f   Opcode: SorterO
1c150 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  pen P1 P2 P3 P4 
1c160 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
1c170 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f  ode works like O
1c180 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
1c190 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f  except that it o
1c1a0 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69  pens.** a transi
1c1b0 65 6e 74 20 69 6e 64 65 78 20 74 68 61 74 20 69  ent index that i
1c1c0 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79 20 64  s specifically d
1c1d0 65 73 69 67 6e 65 64 20 74 6f 20 73 6f 72 74 20  esigned to sort 
1c1e0 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20  large.** tables 
1c1f0 75 73 69 6e 67 20 61 6e 20 65 78 74 65 72 6e 61  using an externa
1c200 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20 61 6c 67  l merge-sort alg
1c210 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66  orithm..**.** If
1c220 20 61 72 67 75 6d 65 6e 74 20 50 33 20 69 73 20   argument P3 is 
1c230 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 69  non-zero, then i
1c240 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74  t indicates that
1c250 20 74 68 65 20 73 6f 72 74 65 72 20 6d 61 79 0a   the sorter may.
1c260 2a 2a 20 61 73 73 75 6d 65 20 74 68 61 74 20 61  ** assume that a
1c270 20 73 74 61 62 6c 65 20 73 6f 72 74 20 63 6f 6e   stable sort con
1c280 73 69 64 65 72 69 6e 67 20 74 68 65 20 66 69 72  sidering the fir
1c290 73 74 20 50 33 20 66 69 65 6c 64 73 20 6f 66 20  st P3 fields of 
1c2a0 65 61 63 68 0a 2a 2a 20 6b 65 79 20 69 73 20 73  each.** key is s
1c2b0 75 66 66 69 63 69 65 6e 74 20 74 6f 20 70 72 6f  ufficient to pro
1c2c0 64 75 63 65 20 74 68 65 20 72 65 71 75 69 72 65  duce the require
1c2d0 64 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61  d results..*/.ca
1c2e0 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e  se OP_SorterOpen
1c2f0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1c300 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74   *pCx;..  assert
1c310 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
1c320 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1c330 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  2>=0 );.  pCx = 
1c340 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1c350 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
1c360 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66  p2, -1, 1);.  if
1c370 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
1c380 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70  no_mem;.  pCx->p
1c390 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
1c3a0 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73  4.pKeyInfo;.  as
1c3b0 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49  sert( pCx->pKeyI
1c3c0 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20  nfo->db==db );. 
1c3d0 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b   assert( pCx->pK
1c3e0 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43  eyInfo->enc==ENC
1c3f0 28 64 62 29 20 29 3b 0a 20 20 72 63 20 3d 20 73  (db) );.  rc = s
1c400 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
1c410 49 6e 69 74 28 64 62 2c 20 70 4f 70 2d 3e 70 33  Init(db, pOp->p3
1c420 2c 20 70 43 78 29 3b 0a 20 20 62 72 65 61 6b 3b  , pCx);.  break;
1c430 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1c440 65 71 75 65 6e 63 65 54 65 73 74 20 50 31 20 50  equenceTest P1 P
1c450 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
1c460 73 69 73 3a 20 69 66 28 20 63 75 72 73 6f 72 5b  sis: if( cursor[
1c470 50 31 5d 2e 63 74 72 2b 2b 20 29 20 70 63 20 3d  P1].ctr++ ) pc =
1c480 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20   P2.**.** P1 is 
1c490 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e  a sorter cursor.
1c4a0 20 49 66 20 74 68 65 20 73 65 71 75 65 6e 63 65   If the sequence
1c4b0 20 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72   counter is curr
1c4c0 65 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d 70  ently zero, jump
1c4d0 0a 2a 2a 20 74 6f 20 50 32 2e 20 52 65 67 61 72  .** to P2. Regar
1c4e0 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
1c4f0 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70   or not the jump
1c500 20 69 73 20 74 61 6b 65 6e 2c 20 69 6e 63 72 65   is taken, incre
1c510 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 74 68 65 20  ment the.** the 
1c520 73 65 71 75 65 6e 63 65 20 76 61 6c 75 65 2e 0a  sequence value..
1c530 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65  */.case OP_Seque
1c540 6e 63 65 54 65 73 74 3a 20 7b 0a 20 20 56 64 62  nceTest: {.  Vdb
1c550 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61  eCursor *pC;.  a
1c560 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1c570 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1c580 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1c590 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1c5a0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1c5b0 43 2d 3e 70 53 6f 72 74 65 72 20 29 3b 0a 20 20  C->pSorter );.  
1c5c0 69 66 28 20 28 70 43 2d 3e 73 65 71 43 6f 75 6e  if( (pC->seqCoun
1c5d0 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70  t++)==0 ){.    p
1c5e0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1c5f0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1c600 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1c610 50 73 65 75 64 6f 20 50 31 20 50 32 20 50 33 20  Pseudo P1 P2 P3 
1c620 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
1c630 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72   P3 columns in r
1c640 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  [P2].**.** Open 
1c650 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61  a new cursor tha
1c660 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61  t points to a fa
1c670 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  ke table that co
1c680 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a  ntains a single.
1c690 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20  ** row of data. 
1c6a0 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   The content of 
1c6b0 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20  that one row is 
1c6c0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d  the content of m
1c6d0 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65  emory.** registe
1c6e0 72 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72 20  r P2.  In other 
1c6f0 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31  words, cursor P1
1c700 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61   becomes an alia
1c710 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45  s for the .** ME
1c720 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63  M_Blob content c
1c730 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69  ontained in regi
1c740 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41  ster P2..**.** A
1c750 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72   pseudo-table cr
1c760 65 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70  eated by this op
1c770 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20  code is used to 
1c780 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a  hold a single.**
1c790 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d   row output from
1c7a0 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74   the sorter so t
1c7b0 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20  hat the row can 
1c7c0 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e  be decomposed in
1c7d0 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c  to.** individual
1c7e0 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74   columns using t
1c7f0 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
1c800 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  ode.  The OP_Col
1c810 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73  umn opcode.** is
1c820 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72   the only cursor
1c830 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72   opcode that wor
1c840 6b 73 20 77 69 74 68 20 61 20 70 73 65 75 64 6f  ks with a pseudo
1c850 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33  -table..**.** P3
1c860 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
1c870 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
1c880 72 65 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c  records that wil
1c890 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a  l be stored by.*
1c8a0 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62  * the pseudo-tab
1c8b0 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  le..*/.case OP_O
1c8c0 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56  penPseudo: {.  V
1c8d0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
1c8e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1c8f0 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p1>=0 );.  asser
1c900 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b  t( pOp->p3>=0 );
1c910 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74  .  pCx = allocat
1c920 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1c930 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c  p1, pOp->p3, -1,
1c940 20 30 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d   0);.  if( pCx==
1c950 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1c960 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20  .  pCx->nullRow 
1c970 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75  = 1;.  pCx->pseu
1c980 64 6f 54 61 62 6c 65 52 65 67 20 3d 20 70 4f 70  doTableReg = pOp
1c990 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54  ->p2;.  pCx->isT
1c9a0 61 62 6c 65 20 3d 20 31 3b 0a 20 20 61 73 73 65  able = 1;.  asse
1c9b0 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29  rt( pOp->p5==0 )
1c9c0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1c9d0 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50   Opcode: Close P
1c9e0 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
1c9f0 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70  Close a cursor p
1ca00 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64  reviously opened
1ca10 20 61 73 20 50 31 2e 20 20 49 66 20 50 31 20 69   as P1.  If P1 i
1ca20 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74  s not.** current
1ca30 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e  ly open, this in
1ca40 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e  struction is a n
1ca50 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  o-op..*/.case OP
1ca60 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65  _Close: {.  asse
1ca70 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1ca80 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1ca90 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65  rsor );.  sqlite
1caa0 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28  3VdbeFreeCursor(
1cab0 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  p, p->apCsr[pOp-
1cac0 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73  >p1]);.  p->apCs
1cad0 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a  r[pOp->p1] = 0;.
1cae0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1caf0 70 63 6f 64 65 3a 20 53 65 65 6b 47 45 20 50 31  pcode: SeekGE P1
1cb00 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1cb10 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1cb20 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
1cb30 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1cb40 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1cb50 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1cb60 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1cb70 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1cb80 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1cb90 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49  3 as the key.  I
1cba0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1cbb0 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1cbc0 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1cbd0 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1cbe0 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1cbf0 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1cc00 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1cc10 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1cc20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1cc30 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1cc40 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
1cc50 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c  nts to the small
1cc60 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1cc70 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ** is greater th
1cc80 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1cc90 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1cca0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1ccb0 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65  cords .** greate
1ccc0 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
1ccd0 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  to the key and P
1cce0 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1ccf0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1cd00 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1cd10 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
1cd20 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
1cd30 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72  o move in forwar
1cd40 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  d order,.** from
1cd50 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74   the beginning t
1cd60 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20  oward the end.  
1cd70 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1cd80 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
1cd90 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
1cda0 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65  se Next, not Pre
1cdb0 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  v..**.** See als
1cdc0 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1cdd0 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b  nd, SeekLt, Seek
1cde0 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Gt, SeekLe.*/./*
1cdf0 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 54 20   Opcode: SeekGT 
1ce00 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1ce10 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1ce20 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1ce30 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1ce40 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1ce50 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1ce60 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1ce70 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1ce80 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1ce90 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66   P3 as a key. If
1cea0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1ceb0 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1cec0 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1ced0 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1cee0 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1cef0 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1cf00 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1cf10 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1cf20 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1cf30 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1cf40 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
1cf50 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65  ts to the smalle
1cf60 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1cf70 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  * is greater tha
1cf80 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  n the key value.
1cf90 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1cfa0 20 72 65 63 6f 72 64 73 20 67 72 65 61 74 65 72   records greater
1cfb0 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65   than .** the ke
1cfc0 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
1cfd0 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
1cfe0 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  to P2..**.** Thi
1cff0 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
1d000 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
1d010 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
1d020 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a   forward order,.
1d030 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  ** from the begi
1d040 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65  nning toward the
1d050 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20   end.  In other 
1d060 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
1d070 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
1d080 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20  ed to use Next, 
1d090 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20  not Prev..**.** 
1d0a0 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1d0b0 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c   NotFound, SeekL
1d0c0 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
1d0d0 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
1d0e0 53 65 65 6b 4c 54 20 50 31 20 50 32 20 50 33 20  SeekLT P1 P2 P3 
1d0f0 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 * .** Synopsi
1d100 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1d110 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1d120 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1d130 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1d140 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1d150 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1d160 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1d170 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
1d180 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
1d190 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
1d1a0 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
1d1b0 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
1d1c0 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
1d1d0 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1d1e0 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
1d1f0 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
1d200 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
1d210 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
1d220 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
1d230 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1d240 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20  e largest entry 
1d250 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73  that .** is less
1d260 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
1d270 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1d280 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73  e no records les
1d290 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b  s than .** the k
1d2a0 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1d2b0 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1d2c0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
1d2d0 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
1d2e0 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
1d2f0 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
1d300 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c  n reverse order,
1d310 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64  .** from the end
1d320 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69   toward the begi
1d330 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72  nning.  In other
1d340 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
1d350 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
1d360 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c  red to use Prev,
1d370 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a   not Next..**.**
1d380 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1d390 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b  , NotFound, Seek
1d3a0 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b  Gt, SeekGe, Seek
1d3b0 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
1d3c0 20 53 65 65 6b 4c 45 20 50 31 20 50 32 20 50 33   SeekLE P1 P2 P3
1d3d0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
1d3e0 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1d3f0 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1d400 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1d410 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1d420 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1d430 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1d440 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1d450 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
1d460 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
1d470 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
1d480 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
1d490 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
1d4a0 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
1d4b0 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1d4c0 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
1d4d0 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
1d4e0 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
1d4f0 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
1d500 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
1d510 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1d520 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74   largest entry t
1d530 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20  hat .** is less 
1d540 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
1d550 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1d560 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1d570 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73  records .** less
1d580 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1d590 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  o the key and P2
1d5a0 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1d5b0 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
1d5c0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1d5d0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
1d5e0 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
1d5f0 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65   move in reverse
1d600 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
1d610 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74  the end toward t
1d620 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49  he beginning.  I
1d630 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
1d640 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
1d650 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
1d660 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74  e Prev, not Next
1d670 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1d680 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1d690 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47  d, SeekGt, SeekG
1d6a0 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73  e, SeekLt.*/.cas
1d6b0 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20 20 20  e OP_SeekLT:    
1d6c0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1d6d0 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
1d6e0 6b 4c 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20  kLE:         /* 
1d6f0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1d700 65 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20 20 20  e OP_SeekGE:    
1d710 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1d720 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
1d730 6b 47 54 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  kGT: {       /* 
1d740 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69  jump, in3 */.  i
1d750 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6f 63  nt res;.  int oc
1d760 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
1d770 70 43 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  pC;.  UnpackedRe
1d780 63 6f 72 64 20 72 3b 0a 20 20 69 6e 74 20 6e 46  cord r;.  int nF
1d790 69 65 6c 64 3b 0a 20 20 69 36 34 20 69 4b 65 79  ield;.  i64 iKey
1d7a0 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 6f  ;      /* The ro
1d7b0 77 69 64 20 77 65 20 61 72 65 20 74 6f 20 73 65  wid we are to se
1d7c0 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65  ek to */..  asse
1d7d0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1d7e0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1d7f0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
1d800 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a  ( pOp->p2!=0 );.
1d810 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1d820 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1d830 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
1d840 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
1d850 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a  oTableReg==0 );.
1d860 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1d870 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54  kLE == OP_SeekLT
1d880 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +1 );.  assert( 
1d890 4f 50 5f 53 65 65 6b 47 45 20 3d 3d 20 4f 50 5f  OP_SeekGE == OP_
1d8a0 53 65 65 6b 4c 54 2b 32 20 29 3b 0a 20 20 61 73  SeekLT+2 );.  as
1d8b0 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 20  sert( OP_SeekGT 
1d8c0 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 33 20 29  == OP_SeekLT+3 )
1d8d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1d8e0 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61  isOrdered );.  a
1d8f0 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
1d900 6f 72 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20  or!=0 );.  oc = 
1d910 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 70  pOp->opcode;.  p
1d920 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
1d930 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1d940 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
1d950 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
1d960 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 46 6f 72  #endif..  /* For
1d970 20 61 20 63 75 72 73 6f 72 20 77 69 74 68 20 74   a cursor with t
1d980 68 65 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51  he BTREE_SEEK_EQ
1d990 20 68 69 6e 74 2c 20 6f 6e 6c 79 20 74 68 65 20   hint, only the 
1d9a0 4f 50 5f 53 65 65 6b 47 45 20 61 6e 64 0a 20 20  OP_SeekGE and.  
1d9b0 2a 2a 20 4f 50 5f 53 65 65 6b 4c 45 20 6f 70 63  ** OP_SeekLE opc
1d9c0 6f 64 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64  odes are allowed
1d9d0 2c 20 61 6e 64 20 74 68 65 73 65 20 6d 75 73 74  , and these must
1d9e0 20 62 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20   be immediately 
1d9f0 66 6f 6c 6c 6f 77 65 64 0a 20 20 2a 2a 20 62 79  followed.  ** by
1da00 20 61 6e 20 4f 50 5f 49 64 78 47 54 20 6f 72 20   an OP_IdxGT or 
1da10 4f 50 5f 49 64 78 4c 54 20 6f 70 63 6f 64 65 2c  OP_IdxLT opcode,
1da20 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20 77   respectively, w
1da30 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79  ith the same key
1da40 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ..  */.#ifdef SQ
1da50 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
1da60 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1da70 73 6f 72 48 61 73 48 69 6e 74 28 70 43 2d 3e 70  sorHasHint(pC->p
1da80 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 53 45  Cursor, BTREE_SE
1da90 45 4b 5f 45 51 29 20 29 7b 0a 20 20 20 20 61 73  EK_EQ) ){.    as
1daa0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
1dab0 65 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20  e==OP_SeekGE || 
1dac0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1dad0 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 61 73  SeekLE );.    as
1dae0 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63  sert( pOp[1].opc
1daf0 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c  ode==OP_IdxLT ||
1db00 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d   pOp[1].opcode==
1db10 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20  OP_IdxGT );.    
1db20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70  assert( pOp[1].p
1db30 31 3d 3d 70 4f 70 5b 30 5d 2e 70 31 20 29 3b 0a  1==pOp[0].p1 );.
1db40 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
1db50 31 5d 2e 70 32 3d 3d 70 4f 70 5b 30 5d 2e 70 32  1].p2==pOp[0].p2
1db60 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1db70 70 4f 70 5b 31 5d 2e 70 33 3d 3d 70 4f 70 5b 30  pOp[1].p3==pOp[0
1db80 5d 2e 70 33 20 29 3b 0a 20 20 20 20 61 73 73 65  ].p3 );.    asse
1db90 72 74 28 20 70 4f 70 5b 31 5d 2e 70 34 2e 69 3d  rt( pOp[1].p4.i=
1dba0 3d 70 4f 70 5b 30 5d 2e 70 34 2e 69 20 29 3b 0a  =pOp[0].p4.i );.
1dbb0 20 20 7d 0a 23 65 6e 64 69 66 0a 20 0a 20 20 69    }.#endif. .  i
1dbc0 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  f( pC->isTable )
1dbd0 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70  {.    /* The inp
1dbe0 75 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d  ut value in P3 m
1dbf0 69 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74  ight be of any t
1dc00 79 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65  ype: integer, re
1dc10 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20  al, string,.    
1dc20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c  ** blob, or NULL
1dc30 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64 73 20  .  But it needs 
1dc40 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
1dc50 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64   before we can d
1dc60 6f 0a 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65  o.    ** the see
1dc70 6b 2c 20 73 6f 20 63 6f 6e 76 65 72 74 20 69 74  k, so convert it
1dc80 2e 20 2a 2f 0a 20 20 20 20 70 49 6e 33 20 3d 20  . */.    pIn3 = 
1dc90 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1dca0 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66      if( (pIn3->f
1dcb0 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
1dcc0 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72  MEM_Real|MEM_Str
1dcd0 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20  ))==MEM_Str ){. 
1dce0 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69       applyNumeri
1dcf0 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20  cAffinity(pIn3, 
1dd00 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 4b  0);.    }.    iK
1dd10 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ey = sqlite3Vdbe
1dd20 49 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a  IntValue(pIn3);.
1dd30 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50  .    /* If the P
1dd40 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f  3 value could no
1dd50 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
1dd60 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77  nto an integer w
1dd70 69 74 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f  ithout.    ** lo
1dd80 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  ss of informatio
1dd90 6e 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20  n, then special 
1dda0 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65  processing is re
1ddb0 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20  quired... */.   
1ddc0 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
1ddd0 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20  s & MEM_Int)==0 
1dde0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70 49  ){.      if( (pI
1ddf0 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1de00 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Real)==0 ){.    
1de10 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33      /* If the P3
1de20 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65   value cannot be
1de30 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
1de40 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75  any kind of a nu
1de50 6d 62 65 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a  mber,.        **
1de60 20 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69   then the seek i
1de70 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20  s not possible, 
1de80 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f  so jump to P2 */
1de90 0a 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f  .        pc = pO
1dea0 70 2d 3e 70 32 20 2d 20 31 3b 20 20 56 64 62 65  p->p2 - 1;  Vdbe
1deb0 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29  BranchTaken(1,2)
1dec0 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
1ded0 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
1dee0 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f 78  /* If the approx
1def0 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20  imation iKey is 
1df00 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68 65 20  larger than the 
1df10 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72  actual real sear
1df20 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d  ch.      ** term
1df30 2c 20 73 75 62 73 74 69 74 75 74 65 20 3e 3d 20  , substitute >= 
1df40 66 6f 72 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20  for > and < for 
1df50 3c 3d 2e 20 65 2e 67 2e 20 69 66 20 74 68 65 20  <=. e.g. if the 
1df60 73 65 61 72 63 68 20 74 65 72 6d 0a 20 20 20 20  search term.    
1df70 20 20 2a 2a 20 69 73 20 34 2e 39 20 61 6e 64 20    ** is 4.9 and 
1df80 74 68 65 20 69 6e 74 65 67 65 72 20 61 70 70 72  the integer appr
1df90 6f 78 69 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20  oximation 5:.   
1dfa0 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20     **.      **  
1dfb0 20 20 20 20 20 20 28 78 20 3e 20 20 34 2e 39 29        (x >  4.9)
1dfc0 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d      ->     (x >=
1dfd0 20 35 29 0a 20 20 20 20 20 20 2a 2a 20 20 20 20   5).      **    
1dfe0 20 20 20 20 28 78 20 3c 3d 20 34 2e 39 29 20 20      (x <= 4.9)  
1dff0 20 20 2d 3e 20 20 20 20 20 28 78 20 3c 20 20 35    ->     (x <  5
1e000 29 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ).      */.     
1e010 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3c 28   if( pIn3->u.r<(
1e020 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20  double)iKey ){. 
1e030 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f         assert( O
1e040 50 5f 53 65 65 6b 47 45 3d 3d 28 4f 50 5f 53 65  P_SeekGE==(OP_Se
1e050 65 6b 47 54 2d 31 29 20 29 3b 0a 20 20 20 20 20  ekGT-1) );.     
1e060 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65     assert( OP_Se
1e070 65 6b 4c 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45  ekLT==(OP_SeekLE
1e080 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  -1) );.        a
1e090 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c  ssert( (OP_SeekL
1e0a0 45 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50  E & 0x0001)==(OP
1e0b0 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30 30 31  _SeekGT & 0x0001
1e0c0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ) );.        if(
1e0d0 20 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d   (oc & 0x0001)==
1e0e0 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30  (OP_SeekGT & 0x0
1e0f0 30 30 31 29 20 29 20 6f 63 2d 2d 3b 0a 20 20 20  001) ) oc--;.   
1e100 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49     }..      /* I
1e110 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74  f the approximat
1e120 69 6f 6e 20 69 4b 65 79 20 69 73 20 73 6d 61 6c  ion iKey is smal
1e130 6c 65 72 20 74 68 61 6e 20 74 68 65 20 61 63 74  ler than the act
1e140 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a  ual real search.
1e150 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73        ** term, s
1e160 75 62 73 74 69 74 75 74 65 20 3c 3d 20 66 6f 72  ubstitute <= for
1e170 20 3c 20 61 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e   < and > for >=.
1e180 20 20 2a 2f 0a 20 20 20 20 20 20 65 6c 73 65 20    */.      else 
1e190 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3e 28 64  if( pIn3->u.r>(d
1e1a0 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20  ouble)iKey ){.  
1e1b0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
1e1c0 5f 53 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65  _SeekLE==(OP_See
1e1d0 6b 4c 54 2b 31 29 20 29 3b 0a 20 20 20 20 20 20  kLT+1) );.      
1e1e0 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1e1f0 6b 47 54 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 2b  kGT==(OP_SeekGE+
1e200 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  1) );.        as
1e210 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 54  sert( (OP_SeekLT
1e220 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f   & 0x0001)==(OP_
1e230 53 65 65 6b 47 45 20 26 20 30 78 30 30 30 31 29  SeekGE & 0x0001)
1e240 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   );.        if( 
1e250 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28  (oc & 0x0001)==(
1e260 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30  OP_SeekLT & 0x00
1e270 30 31 29 20 29 20 6f 63 2b 2b 3b 0a 20 20 20 20  01) ) oc++;.    
1e280 20 20 7d 0a 20 20 20 20 7d 20 0a 20 20 20 20 72    }.    } .    r
1e290 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1e2a0 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1e2b0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28  C->pCursor, 0, (
1e2c0 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65  u64)iKey, 0, &re
1e2d0 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65  s);.    pC->move
1e2e0 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b  toTarget = iKey;
1e2f0 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f    /* Used by OP_
1e300 44 65 6c 65 74 65 20 2a 2f 0a 20 20 20 20 69 66  Delete */.    if
1e310 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1e320 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
1e330 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1e340 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
1e350 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  .    nField = pO
1e360 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61 73 73  p->p4.i;.    ass
1e370 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
1e380 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
1e390 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64    assert( nField
1e3a0 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79  >0 );.    r.pKey
1e3b0 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
1e3c0 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c  nfo;.    r.nFiel
1e3d0 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b  d = (u16)nField;
1e3e0 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78  ..    /* The nex
1e3f0 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63  t line of code c
1e400 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f  omputes as follo
1e410 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a  ws, only faster:
1e420 0a 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63  .    **   if( oc
1e430 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 6f  ==OP_SeekGT || o
1e440 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 7b 0a  c==OP_SeekLE ){.
1e450 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66      **     r.def
1e460 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20  ault_rc = -1;.  
1e470 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20    **   }else{.  
1e480 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61 75    **     r.defau
1e490 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20 20 20  lt_rc = +1;.    
1e4a0 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20 20  **   }.    */.  
1e4b0 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
1e4c0 20 28 28 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f   ((1 & (oc - OP_
1e4d0 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20 3a 20  SeekLT)) ? -1 : 
1e4e0 2b 31 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  +1);.    assert(
1e4f0 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54 20 7c   oc!=OP_SeekGT |
1e500 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d  | r.default_rc==
1e510 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  -1 );.    assert
1e520 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 45 20  ( oc!=OP_SeekLE 
1e530 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d  || r.default_rc=
1e540 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  =-1 );.    asser
1e550 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 45  t( oc!=OP_SeekGE
1e560 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
1e570 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  ==+1 );.    asse
1e580 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c  rt( oc!=OP_SeekL
1e590 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  T || r.default_r
1e5a0 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20 72 2e  c==+1 );..    r.
1e5b0 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
1e5c0 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51  ->p3];.#ifdef SQ
1e5d0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b  LITE_DEBUG.    {
1e5e0 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
1e5f0 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
1e600 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
1e610 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
1e620 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20   ); }.#endif.   
1e630 20 45 78 70 61 6e 64 42 6c 6f 62 28 72 2e 61 4d   ExpandBlob(r.aM
1e640 65 6d 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  em);.    rc = sq
1e650 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1e660 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
1e670 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20  rsor, &r, 0, 0, 
1e680 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72  &res);.    if( r
1e690 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1e6a0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1e6b0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1e6c0 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 2d 3e 64     }.  }.  pC->d
1e6d0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1e6e0 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
1e6f0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1e700 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  LE;.#ifdef SQLIT
1e710 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33  E_TEST.  sqlite3
1e720 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b  _search_count++;
1e730 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 6f 63  .#endif.  if( oc
1e740 3e 3d 4f 50 5f 53 65 65 6b 47 45 20 29 7b 20 20  >=OP_SeekGE ){  
1e750 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
1e760 65 65 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekGE || oc==OP_
1e770 53 65 65 6b 47 54 20 29 3b 0a 20 20 20 20 69 66  SeekGT );.    if
1e780 28 20 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d  ( res<0 || (res=
1e790 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65  =0 && oc==OP_See
1e7a0 6b 47 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65  kGT) ){.      re
1e7b0 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20  s = 0;.      rc 
1e7c0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  = sqlite3BtreeNe
1e7d0 78 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  xt(pC->pCursor, 
1e7e0 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28  &res);.      if(
1e7f0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1e800 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1e810 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65  to_error;.    }e
1e820 6c 73 65 7b 0a 20 20 20 20 20 20 72 65 73 20 3d  lse{.      res =
1e830 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   0;.    }.  }els
1e840 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  e{.    assert( o
1e850 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20  c==OP_SeekLT || 
1e860 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b  oc==OP_SeekLE );
1e870 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30 20 7c  .    if( res>0 |
1e880 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d  | (res==0 && oc=
1e890 3d 4f 50 5f 53 65 65 6b 4c 54 29 20 29 7b 0a 20  =OP_SeekLT) ){. 
1e8a0 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
1e8b0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1e8c0 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70 43  BtreePrevious(pC
1e8d0 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1e8e0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
1e8f0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
1e900 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1e910 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ror;.    }else{.
1e920 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67        /* res mig
1e930 68 74 20 62 65 20 6e 65 67 61 74 69 76 65 20 62  ht be negative b
1e940 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65  ecause the table
1e950 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63   is empty.  Chec
1e960 6b 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 73 65  k to.      ** se
1e970 65 20 69 66 20 74 68 69 73 20 69 73 20 74 68 65  e if this is the
1e980 20 63 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a   case..      */.
1e990 20 20 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69        res = sqli
1e9a0 74 65 33 42 74 72 65 65 45 6f 66 28 70 43 2d 3e  te3BtreeEof(pC->
1e9b0 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  pCursor);.    }.
1e9c0 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f    }.  assert( pO
1e9d0 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64 62  p->p2>0 );.  Vdb
1e9e0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
1e9f0 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  !=0,2);.  if( re
1ea00 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  s ){.    pc = pO
1ea10 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
1ea20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1ea30 63 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 50 32  code: Seek P1 P2
1ea40 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
1ea50 69 73 3a 20 20 69 6e 74 6b 65 79 3d 72 5b 50 32  is:  intkey=r[P2
1ea60 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e  ].**.** P1 is an
1ea70 20 6f 70 65 6e 20 74 61 62 6c 65 20 63 75 72 73   open table curs
1ea80 6f 72 20 61 6e 64 20 50 32 20 69 73 20 61 20 72  or and P2 is a r
1ea90 6f 77 69 64 20 69 6e 74 65 67 65 72 2e 20 20 41  owid integer.  A
1eaa0 72 72 61 6e 67 65 0a 2a 2a 20 66 6f 72 20 50 31  rrange.** for P1
1eab0 20 74 6f 20 6d 6f 76 65 20 73 6f 20 74 68 61 74   to move so that
1eac0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1ead0 65 20 72 6f 77 69 64 20 67 69 76 65 6e 20 62 79  e rowid given by
1eae0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
1eaf0 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 64 65  is actually a de
1eb00 66 65 72 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f  ferred seek.  No
1eb10 74 68 69 6e 67 20 61 63 74 75 61 6c 6c 79 20 68  thing actually h
1eb20 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20  appens until.** 
1eb30 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 75 73  the cursor is us
1eb40 65 64 20 74 6f 20 72 65 61 64 20 61 20 72 65 63  ed to read a rec
1eb50 6f 72 64 2e 20 20 54 68 61 74 20 77 61 79 2c 20  ord.  That way, 
1eb60 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f  if no reads.** o
1eb70 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73  ccur, no unneces
1eb80 73 61 72 79 20 49 2f 4f 20 68 61 70 70 65 6e 73  sary I/O happens
1eb90 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  ..*/.case OP_See
1eba0 6b 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 32 20 2a  k: {    /* in2 *
1ebb0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
1ebc0 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  pC;..  assert( p
1ebd0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1ebe0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1ebf0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1ec00 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1ec10 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1ec20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
1ec30 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
1ec40 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1ec50 65 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  e );.  pC->nullR
1ec60 6f 77 20 3d 20 30 3b 0a 20 20 70 49 6e 32 20 3d  ow = 0;.  pIn2 =
1ec70 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
1ec80 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72  .  pC->movetoTar
1ec90 67 65 74 20 3d 20 73 71 6c 69 74 65 33 56 64 62  get = sqlite3Vdb
1eca0 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b  eIntValue(pIn2);
1ecb0 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
1ecc0 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 62 72 65  oveto = 1;.  bre
1ecd0 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63  ak;.}.  ../* Opc
1ece0 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32  ode: Found P1 P2
1ecf0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1ed00 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1ed10 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d  4].**.** If P4==
1ed20 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1ed30 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
1ed40 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
1ed50 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a  akeRecord.  If.*
1ed60 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69  * P4>0 then regi
1ed70 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
1ed80 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
1ed90 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
1eda0 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
1edb0 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73  cord..**.** Curs
1edc0 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
1edd0 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
1ede0 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74  the record ident
1edf0 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20  ified by P3 and 
1ee00 50 34 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69  P4.** is a prefi
1ee10 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69  x of any entry i
1ee20 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70  n P1 then a jump
1ee30 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61   is made to P2 a
1ee40 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74  nd.** P1 is left
1ee50 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
1ee60 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e   matching entry.
1ee70 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  .**.** This oper
1ee80 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65  ation leaves the
1ee90 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
1eea0 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 20  te where it can 
1eeb0 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69  be.** advanced i
1eec0 6e 20 74 68 65 20 66 6f 72 77 61 72 64 20 64 69  n the forward di
1eed0 72 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 4e 65  rection.  The Ne
1eee0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  xt instruction w
1eef0 69 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74  ill work,.** but
1ef00 20 6e 6f 74 20 74 68 65 20 50 72 65 76 20 69 6e   not the Prev in
1ef10 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
1ef20 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f   See also: NotFo
1ef30 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c  und, NoConflict,
1ef40 20 4e 6f 74 45 78 69 73 74 73 2e 20 53 65 65 6b   NotExists. Seek
1ef50 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Ge.*/./* Opcode:
1ef60 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20   NotFound P1 P2 
1ef70 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1ef80 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1ef90 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30  ].**.** If P4==0
1efa0 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
1efb0 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
1efc0 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
1efd0 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a  keRecord.  If.**
1efe0 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73   P4>0 then regis
1eff0 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69  ter P3 is the fi
1f000 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74  rst of P4 regist
1f010 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e  ers that form an
1f020 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63   unpacked.** rec
1f030 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73  ord..** .** Curs
1f040 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
1f050 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
1f060 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74  the record ident
1f070 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20  ified by P3 and 
1f080 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65  P4.** is not the
1f090 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65   prefix of any e
1f0a0 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20  ntry in P1 then 
1f0b0 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74  a jump is made t
1f0c0 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a  o P2.  If P1 .**
1f0d0 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e   does contain an
1f0e0 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65   entry whose pre
1f0f0 66 69 78 20 6d 61 74 63 68 65 73 20 74 68 65 20  fix matches the 
1f100 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65  P3/P4 record the
1f110 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c  n control.** fal
1f120 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ls through to th
1f130 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
1f140 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66  on and P1 is lef
1f150 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  t pointing at th
1f160 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e  e.** matching en
1f170 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  try..**.** This 
1f180 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73  operation leaves
1f190 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61   the cursor in a
1f1a0 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20   state where it 
1f1b0 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76  cannot be.** adv
1f1c0 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72 20  anced in either 
1f1d0 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f  direction.  In o
1f1e0 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
1f1f0 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a  Next and Prev.**
1f200 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20   opcodes do not 
1f210 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73 20  work after this 
1f220 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  operation..**.**
1f230 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1f240 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 4e 6f 43  , NotExists, NoC
1f250 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70  onflict.*/./* Op
1f260 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74  code: NoConflict
1f270 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1f280 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1f290 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
1f2a0 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67  f P4==0 then reg
1f2b0 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61  ister P3 holds a
1f2c0 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65   blob constructe
1f2d0 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e  d by MakeRecord.
1f2e0 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65    If.** P4>0 the
1f2f0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
1f300 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34   the first of P4
1f310 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20   registers that 
1f320 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
1f330 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a  .** record..** .
1f340 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20  ** Cursor P1 is 
1f350 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65  on an index btre
1f360 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72  e.  If the recor
1f370 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  d identified by 
1f380 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e  P3 and P4.** con
1f390 74 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76  tains any NULL v
1f3a0 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64  alue, jump immed
1f3b0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49  iately to P2.  I
1f3c0 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74  f all terms of t
1f3d0 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72 65  he.** record are
1f3e0 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61   not-NULL then a
1f3f0 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 74   check is done t
1f400 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61  o determine if a
1f410 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a  ny row in the.**
1f420 20 50 31 20 69 6e 64 65 78 20 62 74 72 65 65 20   P1 index btree 
1f430 68 61 73 20 61 20 6d 61 74 63 68 69 6e 67 20 6b  has a matching k
1f440 65 79 20 70 72 65 66 69 78 2e 20 20 49 66 20 74  ey prefix.  If t
1f450 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63  here are no matc
1f460 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d  hes, jump.** imm
1f470 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
1f480 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20 6d   If there is a m
1f490 61 74 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75  atch, fall throu
1f4a0 67 68 20 61 6e 64 20 6c 65 61 76 65 20 74 68 65  gh and leave the
1f4b0 20 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f   P1.** cursor po
1f4c0 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 6d 61  inting to the ma
1f4d0 74 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a  tching row..**.*
1f4e0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
1f4f0 20 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e   similar to OP_N
1f500 6f 74 46 6f 75 6e 64 20 77 69 74 68 20 74 68 65  otFound with the
1f510 20 65 78 63 65 70 74 69 6f 6e 73 20 74 68 61 74   exceptions that
1f520 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69   the.** branch i
1f530 73 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 69  s always taken i
1f540 66 20 61 6e 79 20 70 61 72 74 20 6f 66 20 74 68  f any part of th
1f550 65 20 73 65 61 72 63 68 20 6b 65 79 20 69 6e 70  e search key inp
1f560 75 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  ut is NULL..**.*
1f570 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  * This operation
1f580 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
1f590 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68  or in a state wh
1f5a0 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65  ere it cannot be
1f5b0 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20  .** advanced in 
1f5c0 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e  either direction
1f5d0 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1f5e0 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20  s, the Next and 
1f5f0 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20  Prev.** opcodes 
1f600 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65  do not work afte
1f610 72 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  r this operation
1f620 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1f630 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e  : NotFound, Foun
1f640 64 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a  d, NotExists.*/.
1f650 63 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69  case OP_NoConfli
1f660 63 74 3a 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  ct:     /* jump,
1f670 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1f680 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20  NotFound:       
1f690 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1f6a0 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b  case OP_Found: {
1f6b0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1f6c0 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c   in3 */.  int al
1f6d0 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 69  readyExists;.  i
1f6e0 6e 74 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72  nt ii;.  VdbeCur
1f6f0 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
1f700 65 73 3b 0a 20 20 63 68 61 72 20 2a 70 46 72 65  es;.  char *pFre
1f710 65 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  e;.  UnpackedRec
1f720 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20  ord *pIdxKey;.  
1f730 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
1f740 3b 0a 20 20 63 68 61 72 20 61 54 65 6d 70 52 65  ;.  char aTempRe
1f750 63 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28  c[ROUND8(sizeof(
1f760 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29  UnpackedRecord))
1f770 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 34   + sizeof(Mem)*4
1f780 20 2b 20 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53   + 7];..#ifdef S
1f790 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 66 28  QLITE_TEST.  if(
1f7a0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
1f7b0 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 20 73 71  _NoConflict ) sq
1f7c0 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e  lite3_found_coun
1f7d0 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61  t++;.#endif..  a
1f7e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1f7f0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1f800 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
1f810 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
1f820 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
1f830 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1f840 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1f850 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65  ( pC!=0 );.#ifde
1f860 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1f870 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f   pC->seekOp = pO
1f880 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69  p->opcode;.#endi
1f890 66 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  f.  pIn3 = &aMem
1f8a0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
1f8b0 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
1f8c0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1f8d0 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
1f8e0 29 3b 0a 20 20 70 46 72 65 65 20 3d 20 30 3b 20  );.  pFree = 0; 
1f8f0 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
1f900 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 75   Only used to su
1f910 70 70 72 65 73 73 20 61 20 63 6f 6d 70 69 6c 65  ppress a compile
1f920 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  r warning. */.  
1f930 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20  if( pOp->p4.i>0 
1f940 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  ){.    r.pKeyInf
1f950 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
1f960 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d  ;.    r.nField =
1f970 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b   (u16)pOp->p4.i;
1f980 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49  .    r.aMem = pI
1f990 6e 33 3b 0a 20 20 20 20 66 6f 72 28 69 69 3d 30  n3;.    for(ii=0
1f9a0 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  ; ii<r.nField; i
1f9b0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65  i++){.      asse
1f9c0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
1f9d0 72 2e 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20  r.aMem[ii]) );. 
1f9e0 20 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28       ExpandBlob(
1f9f0 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 69  &r.aMem[ii]);.#i
1fa00 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1fa10 47 0a 20 20 20 20 20 20 69 66 28 20 69 69 20 29  G.      if( ii )
1fa20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
1fa30 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61  pOp->p3+ii, &r.a
1fa40 4d 65 6d 5b 69 69 5d 29 3b 0a 23 65 6e 64 69 66  Mem[ii]);.#endif
1fa50 0a 20 20 20 20 7d 0a 20 20 20 20 70 49 64 78 4b  .    }.    pIdxK
1fa60 65 79 20 3d 20 26 72 3b 0a 20 20 7d 65 6c 73 65  ey = &r;.  }else
1fa70 7b 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20  {.    pIdxKey = 
1fa80 73 71 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f 63  sqlite3VdbeAlloc
1fa90 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 0a  UnpackedRecord(.
1faa0 20 20 20 20 20 20 20 20 70 43 2d 3e 70 4b 65 79          pC->pKey
1fab0 49 6e 66 6f 2c 20 61 54 65 6d 70 52 65 63 2c 20  Info, aTempRec, 
1fac0 73 69 7a 65 6f 66 28 61 54 65 6d 70 52 65 63 29  sizeof(aTempRec)
1fad0 2c 20 26 70 46 72 65 65 0a 20 20 20 20 29 3b 0a  , &pFree.    );.
1fae0 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d      if( pIdxKey=
1faf0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1fb00 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
1fb10 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1fb20 42 6c 6f 62 20 29 3b 0a 20 20 20 20 45 78 70 61  Blob );.    Expa
1fb30 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20  ndBlob(pIn3);.  
1fb40 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 63    sqlite3VdbeRec
1fb50 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b  ordUnpack(pC->pK
1fb60 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c  eyInfo, pIn3->n,
1fb70 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65   pIn3->z, pIdxKe
1fb80 79 29 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b 65  y);.  }.  pIdxKe
1fb90 79 2d 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20  y->default_rc = 
1fba0 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  0;.  if( pOp->op
1fbb0 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c  code==OP_NoConfl
1fbc0 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f  ict ){.    /* Fo
1fbd0 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c  r the OP_NoConfl
1fbe0 69 63 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65  ict opcode, take
1fbf0 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 79   the jump if any
1fc00 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 69   of the.    ** i
1fc10 6e 70 75 74 20 66 69 65 6c 64 73 20 61 72 65 20  nput fields are 
1fc20 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20  NULL, since any 
1fc30 6b 65 79 20 77 69 74 68 20 61 20 4e 55 4c 4c 20  key with a NULL 
1fc40 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20  will not.    ** 
1fc50 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20  conflict */.    
1fc60 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70 49 64  for(ii=0; ii<pId
1fc70 78 4b 65 79 2d 3e 6e 46 69 65 6c 64 3b 20 69 69  xKey->nField; ii
1fc80 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  ++){.      if( p
1fc90 49 64 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69 5d  IdxKey->aMem[ii]
1fca0 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  .flags & MEM_Nul
1fcb0 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 70 63 20  l ){.        pc 
1fcc0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 20 56  = pOp->p2 - 1; V
1fcd0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31  dbeBranchTaken(1
1fce0 2c 32 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65  ,2);.        bre
1fcf0 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
1fd00 7d 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  }.  }.  rc = sql
1fd10 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1fd20 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
1fd30 73 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c  sor, pIdxKey, 0,
1fd40 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28   0, &res);.  if(
1fd50 20 70 4f 70 2d 3e 70 34 2e 69 3d 3d 30 20 29 7b   pOp->p4.i==0 ){
1fd60 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
1fd70 65 65 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20  ee(db, pFree);. 
1fd80 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c   }.  if( rc!=SQL
1fd90 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 62 72  ITE_OK ){.    br
1fda0 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73  eak;.  }.  pC->s
1fdb0 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b  eekResult = res;
1fdc0 0a 20 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  .  alreadyExists
1fdd0 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20 70   = (res==0);.  p
1fde0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61  C->nullRow = 1-a
1fdf0 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20  lreadyExists;.  
1fe00 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1fe10 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  to = 0;.  pC->ca
1fe20 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1fe30 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70  E_STALE;.  if( p
1fe40 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46  Op->opcode==OP_F
1fe50 6f 75 6e 64 20 29 7b 0a 20 20 20 20 56 64 62 65  ound ){.    Vdbe
1fe60 42 72 61 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65  BranchTaken(alre
1fe70 61 64 79 45 78 69 73 74 73 21 3d 30 2c 32 29 3b  adyExists!=0,2);
1fe80 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61 64 79  .    if( already
1fe90 45 78 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f  Exists ) pc = pO
1fea0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c  p->p2 - 1;.  }el
1feb0 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  se{.    VdbeBran
1fec0 63 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45  chTaken(alreadyE
1fed0 78 69 73 74 73 3d 3d 30 2c 32 29 3b 0a 20 20 20  xists==0,2);.   
1fee0 20 69 66 28 20 21 61 6c 72 65 61 64 79 45 78 69   if( !alreadyExi
1fef0 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  sts ) pc = pOp->
1ff00 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
1ff10 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1ff20 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31 20  e: NotExists P1 
1ff30 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
1ff40 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b  opsis: intkey=r[
1ff50 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  P3].**.** P1 is 
1ff60 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 63  the index of a c
1ff70 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e  ursor open on an
1ff80 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65 65   SQL table btree
1ff90 20 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a 2a   (with integer.*
1ffa0 2a 20 6b 65 79 73 29 2e 20 20 50 33 20 69 73 20  * keys).  P3 is 
1ffb0 61 6e 20 69 6e 74 65 67 65 72 20 72 6f 77 69 64  an integer rowid
1ffc0 2e 20 20 49 66 20 50 31 20 64 6f 65 73 20 6e 6f  .  If P1 does no
1ffd0 74 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f  t contain a reco
1ffe0 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69 64  rd with.** rowid
1fff0 20 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d   P3 then jump im
20000 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
20010 20 20 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e    If P1 does con
20020 74 61 69 6e 20 61 20 72 65 63 6f 72 64 0a 2a 2a  tain a record.**
20030 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74   with rowid P3 t
20040 68 65 6e 20 6c 65 61 76 65 20 74 68 65 20 63 75  hen leave the cu
20050 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74  rsor pointing at
20060 20 74 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64   that record and
20070 20 66 61 6c 6c 0a 2a 2a 20 74 68 72 6f 75 67 68   fall.** through
20080 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
20090 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
200a0 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  The OP_NotFound 
200b0 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20  opcode performs 
200c0 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
200d0 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65  on on index btre
200e0 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69  es.** (with arbi
200f0 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75  trary multi-valu
20100 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54  e keys)..**.** T
20110 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
20120 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
20130 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
20140 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e   cannot be advan
20150 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72  ced.** in either
20160 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20   direction.  In 
20170 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
20180 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f   Next and Prev o
20190 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e  pcodes will.** n
201a0 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e  ot work followin
201b0 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  g this opcode..*
201c0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
201d0 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
201e0 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 63 61  NoConflict.*/.ca
201f0 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a  se OP_NotExists:
20200 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
20210 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65  p, in3 */.  Vdbe
20220 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
20230 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
20240 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20   int res;.  u64 
20250 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20  iKey;..  pIn3 = 
20260 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
20270 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
20280 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
20290 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
202a0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
202b0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
202c0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
202d0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
202e0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69  ert( pC!=0 );.#i
202f0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
20300 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
20310 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73 73   0;.#endif.  ass
20320 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
20330 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
20340 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
20350 3d 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  ==0 );.  pCrsr =
20360 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
20370 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
20380 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20   );.  res = 0;. 
20390 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e   iKey = pIn3->u.
203a0 69 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  i;.  rc = sqlite
203b0 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
203c0 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c 20 69  cked(pCrsr, 0, i
203d0 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  Key, 0, &res);. 
203e0 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
203f0 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73  t = iKey;  /* Us
20400 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20  ed by OP_Delete 
20410 2a 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  */.  pC->nullRow
20420 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
20430 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
20440 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66  STALE;.  pC->def
20450 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
20460 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
20470 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
20480 69 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20  if( res!=0 ){.  
20490 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
204a0 20 31 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65   1;.  }.  pC->se
204b0 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a  ekResult = res;.
204c0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
204d0 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20  pcode: Sequence 
204e0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
204f0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63  ynopsis: r[P2]=c
20500 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 0a  ursor[P1].ctr++.
20510 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e  **.** Find the n
20520 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65  ext available se
20530 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f  quence number fo
20540 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
20550 57 72 69 74 65 20 74 68 65 20 73 65 71 75 65 6e  Write the sequen
20560 63 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72  ce number into r
20570 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54  egister P2..** T
20580 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  he sequence numb
20590 65 72 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  er on the cursor
205a0 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
205b0 61 66 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e  after this.** in
205c0 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a  struction.  .*/.
205d0 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65  case OP_Sequence
205e0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
205f0 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
20600 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
20610 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
20620 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
20630 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
20640 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30  pCsr[pOp->p1]!=0
20650 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20   );.  pOut->u.i 
20660 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
20670 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b  p1]->seqCount++;
20680 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
20690 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69   Opcode: NewRowi
206a0 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
206b0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
206c0 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65  ]=rowid.**.** Ge
206d0 74 20 61 20 6e 65 77 20 69 6e 74 65 67 65 72 20  t a new integer 
206e0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 61  record number (a
206f0 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29 20 75 73  .k.a "rowid") us
20700 65 64 20 61 73 20 74 68 65 20 6b 65 79 20 74 6f  ed as the key to
20710 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65   a table..** The
20720 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69   record number i
20730 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
20740 20 75 73 65 64 20 61 73 20 61 20 6b 65 79 20 69   used as a key i
20750 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  n the database.*
20760 2a 20 74 61 62 6c 65 20 74 68 61 74 20 63 75 72  * table that cur
20770 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f  sor P1 points to
20780 2e 20 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72  .  The new recor
20790 64 20 6e 75 6d 62 65 72 20 69 73 20 77 72 69 74  d number is writ
207a0 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74  ten.** written t
207b0 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
207c0 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74 68 65  *.** If P3>0 the
207d0 6e 20 50 33 20 69 73 20 61 20 72 65 67 69 73 74  n P3 is a regist
207e0 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66  er in the root f
207f0 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 44 42  rame of this VDB
20800 45 20 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a  E that holds .**
20810 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 72 65   the largest pre
20820 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61 74 65  viously generate
20830 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e  d record number.
20840 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e   No new record n
20850 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c  umbers are.** al
20860 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73  lowed to be less
20870 20 74 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65   than this value
20880 2e 20 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75  . When this valu
20890 65 20 72 65 61 63 68 65 73 20 69 74 73 20 6d 61  e reaches its ma
208a0 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51  ximum, .** an SQ
208b0 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20  LITE_FULL error 
208c0 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20 54 68  is generated. Th
208d0 65 20 50 33 20 72 65 67 69 73 74 65 72 20 69 73  e P3 register is
208e0 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68   updated with th
208f0 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64  e '.** generated
20900 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20   record number. 
20910 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e 69 73  This P3 mechanis
20920 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c  m is used to hel
20930 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a  p implement the.
20940 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  ** AUTOINCREMENT
20950 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73   feature..*/.cas
20960 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b  e OP_NewRowid: {
20970 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
20980 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
20990 0a 20 20 69 36 34 20 76 3b 20 20 20 20 20 20 20  .  i64 v;       
209a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
209b0 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20   new rowid */.  
209c0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
209d0 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
209e0 20 6f 66 20 74 61 62 6c 65 20 74 6f 20 67 65 74   of table to get
209f0 20 74 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a   the new rowid *
20a00 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20  /.  int res;    
20a10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
20a20 73 75 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69 74  sult of an sqlit
20a30 65 33 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f  e3BtreeLast() */
20a40 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20 20 20 20  .  int cnt;     
20a50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75            /* Cou
20a60 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68  nter to limit th
20a70 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 61 72  e number of sear
20a80 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ches */.  Mem *p
20a90 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
20aa0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
20ab0 64 69 6e 67 20 6c 61 72 67 65 73 74 20 72 6f 77  ding largest row
20ac0 69 64 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45  id for AUTOINCRE
20ad0 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46 72  MENT */.  VdbeFr
20ae0 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20  ame *pFrame;    
20af0 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f   /* Root frame o
20b00 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d  f VDBE */..  v =
20b10 20 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20   0;.  res = 0;. 
20b20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
20b30 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
20b40 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
20b50 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
20b60 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
20b70 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20   pC!=0 );.  if( 
20b80 4e 45 56 45 52 28 70 43 2d 3e 70 43 75 72 73 6f  NEVER(pC->pCurso
20b90 72 3d 3d 30 29 20 29 7b 0a 20 20 20 20 2f 2a 20  r==0) ){.    /* 
20ba0 54 68 65 20 7a 65 72 6f 20 69 6e 69 74 69 61 6c  The zero initial
20bb0 69 7a 61 74 69 6f 6e 20 61 62 6f 76 65 20 69 73  ization above is
20bc0 20 61 6c 6c 20 74 68 61 74 20 69 73 20 6e 65 65   all that is nee
20bd0 64 65 64 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a  ded */.  }else{.
20be0 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20      /* The next 
20bf0 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72 64 20  rowid or record 
20c00 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72 65 6e  number (differen
20c10 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68 65 20  t terms for the 
20c20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e  same.    ** thin
20c30 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69  g) is obtained i
20c40 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61 6c 67  n a two-step alg
20c50 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20  orithm..    **. 
20c60 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65 20 61     ** First we a
20c70 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74  ttempt to find t
20c80 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74  he largest exist
20c90 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20 61 64  ing rowid and ad
20ca0 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20  d one.    ** to 
20cb0 74 68 61 74 2e 20 20 42 75 74 20 69 66 20 74 68  that.  But if th
20cc0 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69  e largest existi
20cd0 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c 72 65  ng rowid is alre
20ce0 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a  ady the maximum.
20cf0 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20      ** positive 
20d00 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61 76 65  integer, we have
20d10 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67 68   to fall through
20d20 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a 20   to the second. 
20d30 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73     ** probabilis
20d40 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20  tic algorithm.  
20d50 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20    **.    ** The 
20d60 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d  second algorithm
20d70 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20 61 20   is to select a 
20d80 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f 6d 20  rowid at random 
20d90 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20 20 2a  and see if.    *
20da0 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65 78 69  * it already exi
20db0 73 74 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  sts in the table
20dc0 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f  .  If it does no
20dd0 74 20 65 78 69 73 74 2c 20 77 65 20 68 61 76 65  t exist, we have
20de0 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65 64 65  .    ** succeede
20df0 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e 64 6f  d.  If the rando
20e00 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65 78 69  m rowid does exi
20e10 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20 61 20  st, we select a 
20e20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61  new one.    ** a
20e30 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20 75 70  nd try again, up
20e40 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a 20   to 100 times.. 
20e50 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74     */.    assert
20e60 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
20e70 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
20e80 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20  32BIT_ROWID.#   
20e90 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44  define MAX_ROWID
20ea0 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73   0x7fffffff.#els
20eb0 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f  e.    /* Some co
20ec0 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e  mpilers complain
20ed0 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73   about constants
20ee0 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37   of the form 0x7
20ef0 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 2e  fffffffffffffff.
20f00 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63  .    ** Others c
20f10 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78  omplain about 0x
20f20 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  7fffffffffffffff
20f30 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  fLL.  The follow
20f40 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a  ing macro seems.
20f50 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64      ** to provid
20f60 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77  e the constant w
20f70 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20  hile making all 
20f80 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e  compilers happy.
20f90 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69  .    */.#   defi
20fa0 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69  ne MAX_ROWID  (i
20fb0 36 34 29 28 20 28 28 28 75 36 34 29 30 78 37 66  64)( (((u64)0x7f
20fc0 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28  ffffff)<<32) | (
20fd0 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20 29  u64)0xffffffff )
20fe0 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28  .#endif..    if(
20ff0 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52   !pC->useRandomR
21000 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 72 63  owid ){.      rc
21010 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
21020 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ast(pC->pCursor,
21030 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66   &res);.      if
21040 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
21050 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
21060 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
21070 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
21080 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
21090 20 20 20 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a       v = 1;   /*
210a0 20 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34 38   IMP: R-61914-48
210b0 30 37 34 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c  074 */.      }el
210c0 73 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65  se{.        asse
210d0 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
210e0 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43  CursorIsValid(pC
210f0 2d 3e 70 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->pCursor) );.  
21100 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
21110 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
21120 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b  C->pCursor, &v);
21130 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
21140 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
21150 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 66 61  ;   /* Cannot fa
21160 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 42 74 72  il following Btr
21170 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 20 20  eeLast() */.    
21180 20 20 20 20 69 66 28 20 76 3e 3d 4d 41 58 5f 52      if( v>=MAX_R
21190 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20  OWID ){.        
211a0 20 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52    pC->useRandomR
211b0 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20  owid = 1;.      
211c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
211d0 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50     v++;   /* IMP
211e0 3a 20 52 2d 32 39 35 33 38 2d 33 34 39 38 37 20  : R-29538-34987 
211f0 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  */.        }.   
21200 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 23 69 66 6e     }.    }..#ifn
21210 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
21220 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
21230 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b    if( pOp->p3 ){
21240 0a 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74  .      /* Assert
21250 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61   that P3 is a va
21260 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e  lid memory cell.
21270 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
21280 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
21290 20 20 20 20 20 69 66 28 20 70 2d 3e 70 46 72 61       if( p->pFra
212a0 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f  me ){.        fo
212b0 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61  r(pFrame=p->pFra
212c0 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72  me; pFrame->pPar
212d0 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61  ent; pFrame=pFra
212e0 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20  me->pParent);.  
212f0 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20        /* Assert 
21300 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c  that P3 is a val
21310 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20  id memory cell. 
21320 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  */.        asser
21330 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61  t( pOp->p3<=pFra
21340 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  me->nMem );.    
21350 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 46 72 61      pMem = &pFra
21360 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  me->aMem[pOp->p3
21370 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  ];.      }else{.
21380 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72          /* Asser
21390 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76  t that P3 is a v
213a0 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  alid memory cell
213b0 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73  . */.        ass
213c0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  ert( pOp->p3<=(p
213d0 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
213e0 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d  r) );.        pM
213f0 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
21400 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d  p3];.        mem
21410 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
21420 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a   pMem);.      }.
21430 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
21440 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20 29  mIsValid(pMem) )
21450 3b 0a 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  ;..      REGISTE
21460 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
21470 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 73 71   pMem);.      sq
21480 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
21490 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20  gerify(pMem);.  
214a0 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65      assert( (pMe
214b0 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  m->flags & MEM_I
214c0 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65  nt)!=0 );  /* me
214d0 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20 69  m(P3) holds an i
214e0 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20 20  nteger */.      
214f0 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d  if( pMem->u.i==M
21500 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e  AX_ROWID || pC->
21510 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
21520 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
21530 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a  QLITE_FULL;   /*
21540 20 49 4d 50 3a 20 52 2d 31 32 32 37 35 2d 36 31   IMP: R-12275-61
21550 33 33 38 20 2a 2f 0a 20 20 20 20 20 20 20 20 67  338 */.        g
21560 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
21570 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
21580 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d        if( v<pMem
21590 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20  ->u.i+1 ){.     
215a0 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69     v = pMem->u.i
215b0 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20   + 1;.      }.  
215c0 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20      pMem->u.i = 
215d0 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  v;.    }.#endif.
215e0 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52      if( pC->useR
215f0 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20  andomRowid ){.  
21600 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54      /* IMPLEMENT
21610 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36 37  ATION-OF: R-0767
21620 37 2d 34 31 38 38 31 20 49 66 20 74 68 65 20 6c  7-41881 If the l
21630 61 72 67 65 73 74 20 52 4f 57 49 44 20 69 73 20  argest ROWID is 
21640 65 71 75 61 6c 20 74 6f 20 74 68 65 0a 20 20 20  equal to the.   
21650 20 20 20 2a 2a 20 6c 61 72 67 65 73 74 20 70 6f     ** largest po
21660 73 73 69 62 6c 65 20 69 6e 74 65 67 65 72 20 28  ssible integer (
21670 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
21680 38 30 37 29 20 74 68 65 6e 20 74 68 65 20 64 61  807) then the da
21690 74 61 62 61 73 65 0a 20 20 20 20 20 20 2a 2a 20  tabase.      ** 
216a0 65 6e 67 69 6e 65 20 73 74 61 72 74 73 20 70 69  engine starts pi
216b0 63 6b 69 6e 67 20 70 6f 73 69 74 69 76 65 20 63  cking positive c
216c0 61 6e 64 69 64 61 74 65 20 52 4f 57 49 44 73 20  andidate ROWIDs 
216d0 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a  at random until.
216e0 20 20 20 20 20 20 2a 2a 20 69 74 20 66 69 6e 64        ** it find
216f0 73 20 6f 6e 65 20 74 68 61 74 20 69 73 20 6e 6f  s one that is no
21700 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65  t previously use
21710 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  d. */.      asse
21720 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29  rt( pOp->p3==0 )
21730 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20  ;  /* We cannot 
21740 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77  be in random row
21750 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69 73 20  id mode if this 
21760 69 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  is.             
21770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21780 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d  ** an AUTOINCREM
21790 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20  ENT table. */.  
217a0 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20      cnt = 0;.   
217b0 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 73     do{.        s
217c0 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73  qlite3_randomnes
217d0 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76 29  s(sizeof(v), &v)
217e0 3b 0a 20 20 20 20 20 20 20 20 76 20 26 3d 20 28  ;.        v &= (
217f0 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 76  MAX_ROWID>>1); v
21800 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75 72 65 20 74  ++;  /* Ensure t
21810 68 61 74 20 76 20 69 73 20 67 72 65 61 74 65 72  hat v is greater
21820 20 74 68 61 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20   than zero */.  
21830 20 20 20 20 7d 77 68 69 6c 65 28 20 20 28 28 72      }while(  ((r
21840 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
21850 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
21860 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28  C->pCursor, 0, (
21870 75 36 34 29 76 2c 0a 20 20 20 20 20 20 20 20 20  u64)v,.         
21880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
218a0 20 20 20 20 20 20 20 20 30 2c 20 26 72 65 73 29          0, &res)
218b0 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20 20  )==SQLITE_OK).  
218c0 20 20 20 20 20 20 20 20 20 20 26 26 20 28 72 65            && (re
218d0 73 3d 3d 30 29 0a 20 20 20 20 20 20 20 20 20 20  s==0).          
218e0 20 20 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30 29    && (++cnt<100)
218f0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  );.      if( rc=
21900 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65  =SQLITE_OK && re
21910 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  s==0 ){.        
21920 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c  rc = SQLITE_FULL
21930 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38  ;   /* IMP: R-38
21940 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20  219-53002 */.   
21950 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
21960 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
21970 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65      }.      asse
21980 72 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45  rt( v>0 );  /* E
21990 56 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37 30  V: R-40812-03570
219a0 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70 43   */.    }.    pC
219b0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
219c0 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
219d0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
219e0 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70  E_STALE;.  }.  p
219f0 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Out->u.i = v;.  
21a00 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
21a10 6f 64 65 3a 20 49 6e 73 65 72 74 20 50 31 20 50  ode: Insert P1 P
21a20 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
21a30 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72  nopsis: intkey=r
21a40 5b 50 33 5d 20 64 61 74 61 3d 72 5b 50 32 5d 0a  [P3] data=r[P2].
21a50 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65  **.** Write an e
21a60 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61  ntry into the ta
21a70 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31  ble of cursor P1
21a80 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69  .  A new entry i
21a90 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20  s.** created if 
21aa0 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61  it doesn't alrea
21ab0 64 79 20 65 78 69 73 74 20 6f 72 20 74 68 65 20  dy exist or the 
21ac0 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73  data for an exis
21ad0 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73  ting.** entry is
21ae0 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54   overwritten.  T
21af0 68 65 20 64 61 74 61 20 69 73 20 74 68 65 20 76  he data is the v
21b00 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74  alue MEM_Blob st
21b10 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
21b20 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20 54  .** number P2. T
21b30 68 65 20 6b 65 79 20 69 73 20 73 74 6f 72 65 64  he key is stored
21b40 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
21b50 20 54 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a   The key must.**
21b60 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a   be a MEM_Int..*
21b70 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
21b80 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20  AG_NCHANGE flag 
21b90 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68  of P5 is set, th
21ba0 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67  en the row chang
21bb0 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e  e count is.** in
21bc0 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72  cremented (other
21bd0 77 69 73 65 20 6e 6f 74 29 2e 20 20 49 66 20 74  wise not).  If t
21be0 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f  he OPFLAG_LASTRO
21bf0 57 49 44 20 66 6c 61 67 20 6f 66 20 50 35 20 69  WID flag of P5 i
21c00 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72  s set,.** then r
21c10 6f 77 69 64 20 69 73 20 73 74 6f 72 65 64 20 66  owid is stored f
21c20 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20 72 65  or subsequent re
21c30 74 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73  turn by the.** s
21c40 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
21c50 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74  rt_rowid() funct
21c60 69 6f 6e 20 28 6f 74 68 65 72 77 69 73 65 20 69  ion (otherwise i
21c70 74 20 69 73 20 75 6e 6d 6f 64 69 66 69 65 64 29  t is unmodified)
21c80 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
21c90 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
21ca0 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69  ULT flag of P5 i
21cb0 73 20 73 65 74 20 61 6e 64 20 69 66 20 74 68 65  s set and if the
21cc0 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68   result of.** th
21cd0 65 20 6c 61 73 74 20 73 65 65 6b 20 6f 70 65 72  e last seek oper
21ce0 61 74 69 6f 6e 20 28 4f 50 5f 4e 6f 74 45 78 69  ation (OP_NotExi
21cf0 73 74 73 29 20 77 61 73 20 61 20 73 75 63 63 65  sts) was a succe
21d00 73 73 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a  ss, then this.**
21d10 20 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20   operation will 
21d20 6e 6f 74 20 61 74 74 65 6d 70 74 20 74 6f 20 66  not attempt to f
21d30 69 6e 64 20 74 68 65 20 61 70 70 72 6f 70 72 69  ind the appropri
21d40 61 74 65 20 72 6f 77 20 62 65 66 6f 72 65 20 64  ate row before d
21d50 6f 69 6e 67 0a 2a 2a 20 74 68 65 20 69 6e 73 65  oing.** the inse
21d60 72 74 20 62 75 74 20 77 69 6c 6c 20 69 6e 73 74  rt but will inst
21d70 65 61 64 20 6f 76 65 72 77 72 69 74 65 20 74 68  ead overwrite th
21d80 65 20 72 6f 77 20 74 68 61 74 20 74 68 65 20 63  e row that the c
21d90 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 75 72 72  ursor is.** curr
21da0 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
21db0 6f 2e 20 20 50 72 65 73 75 6d 61 62 6c 79 2c 20  o.  Presumably, 
21dc0 74 68 65 20 70 72 69 6f 72 20 4f 50 5f 4e 6f 74  the prior OP_Not
21dd0 45 78 69 73 74 73 20 6f 70 63 6f 64 65 0a 2a 2a  Exists opcode.**
21de0 20 68 61 73 20 61 6c 72 65 61 64 79 20 70 6f 73   has already pos
21df0 69 74 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73  itioned the curs
21e00 6f 72 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 54  or correctly.  T
21e10 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69  his is an optimi
21e20 7a 61 74 69 6f 6e 0a 2a 2a 20 74 68 61 74 20 62  zation.** that b
21e30 6f 6f 73 74 73 20 70 65 72 66 6f 72 6d 61 6e 63  oosts performanc
21e40 65 20 62 79 20 61 76 6f 69 64 69 6e 67 20 72 65  e by avoiding re
21e50 64 75 6e 64 61 6e 74 20 73 65 65 6b 73 2e 0a 2a  dundant seeks..*
21e60 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
21e70 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67  AG_ISUPDATE flag
21e80 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
21e90 69 73 20 6f 70 63 6f 64 65 20 69 73 20 70 61 72  is opcode is par
21ea0 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54  t of an.** UPDAT
21eb0 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74  E operation.  Ot
21ec0 68 65 72 77 69 73 65 20 28 69 66 20 74 68 65 20  herwise (if the 
21ed0 66 6c 61 67 20 69 73 20 63 6c 65 61 72 29 20 74  flag is clear) t
21ee0 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 0a  hen this opcode.
21ef0 2a 2a 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e  ** is part of an
21f00 20 49 4e 53 45 52 54 20 6f 70 65 72 61 74 69 6f   INSERT operatio
21f10 6e 2e 20 20 54 68 65 20 64 69 66 66 65 72 65 6e  n.  The differen
21f20 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72  ce is only impor
21f30 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75  tant to.** the u
21f40 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a  pdate hook..**.*
21f50 2a 20 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d  * Parameter P4 m
21f60 61 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 73 74  ay point to a st
21f70 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ring containing 
21f80 74 68 65 20 74 61 62 6c 65 2d 6e 61 6d 65 2c 20  the table-name, 
21f90 6f 72 0a 2a 2a 20 6d 61 79 20 62 65 20 4e 55 4c  or.** may be NUL
21fa0 4c 2e 20 49 66 20 69 74 20 69 73 20 6e 6f 74 20  L. If it is not 
21fb0 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75  NULL, then the u
21fc0 70 64 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28  pdate-hook .** (
21fd0 73 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43  sqlite3.xUpdateC
21fe0 61 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f  allback) is invo
21ff0 6b 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20  ked following a 
22000 73 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72  successful inser
22010 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e  t..**.** (WARNIN
22020 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73  G/TODO: If P1 is
22030 20 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72   a pseudo-cursor
22040 20 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d   and P2 is dynam
22050 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61  ically.** alloca
22060 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73  ted, then owners
22070 68 69 70 20 6f 66 20 50 32 20 69 73 20 74 72 61  hip of P2 is tra
22080 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68 65 20  nsferred to the 
22090 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a  pseudo-cursor.**
220a0 20 61 6e 64 20 72 65 67 69 73 74 65 72 20 50 32   and register P2
220b0 20 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72   becomes ephemer
220c0 61 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72 73  al.  If the curs
220d0 6f 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74  or is changed, t
220e0 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72  he.** value of r
220f0 65 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20  egister P2 will 
22100 74 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61  then change.  Ma
22110 6b 65 20 73 75 72 65 20 74 68 69 73 20 64 6f 65  ke sure this doe
22120 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61  s not.** cause a
22130 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a  ny problems.).**
22140 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
22150 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  tion only works 
22160 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20  on tables.  The 
22170 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72  equivalent instr
22180 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e  uction.** for in
22190 64 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49  dices is OP_IdxI
221a0 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  nsert..*/./* Opc
221b0 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e 74 20 50  ode: InsertInt P
221c0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
221d0 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 6e 74 6b   Synopsis:  intk
221e0 65 79 3d 50 33 20 64 61 74 61 3d 72 5b 50 32 5d  ey=P3 data=r[P2]
221f0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
22200 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 4f  s exactly like O
22210 50 5f 49 6e 73 65 72 74 20 65 78 63 65 70 74 20  P_Insert except 
22220 74 68 61 74 20 74 68 65 20 6b 65 79 20 69 73 20  that the key is 
22230 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 76  the.** integer v
22240 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74 68 65  alue P3, not the
22250 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e   value of the in
22260 74 65 67 65 72 20 73 74 6f 72 65 64 20 69 6e 20  teger stored in 
22270 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a  register P3..*/.
22280 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20  case OP_Insert: 
22290 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 49  .case OP_InsertI
222a0 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61  nt: {.  Mem *pDa
222b0 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d  ta;       /* MEM
222c0 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61   cell holding da
222d0 74 61 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  ta for the recor
222e0 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  d to be inserted
222f0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b   */.  Mem *pKey;
22300 20 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63          /* MEM c
22310 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20  ell holding key 
22320 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
22330 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20  */.  i64 iKey;  
22340 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e         /* The in
22350 74 65 67 65 72 20 52 4f 57 49 44 20 6f 72 20 6b  teger ROWID or k
22360 65 79 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  ey for the recor
22370 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  d to be inserted
22380 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
22390 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f   *pC;   /* Curso
223a0 72 20 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20  r to table into 
223b0 77 68 69 63 68 20 69 6e 73 65 72 74 20 69 73 20  which insert is 
223c0 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74  written */.  int
223d0 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 2f   nZero;        /
223e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f  * Number of zero
223f0 2d 62 79 74 65 73 20 74 6f 20 61 70 70 65 6e 64  -bytes to append
22400 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65   */.  int seekRe
22410 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c  sult;   /* Resul
22420 74 20 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20  t of prior seek 
22430 6f 72 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45  or 0 if no USESE
22440 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f  EKRESULT flag */
22450 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
22460 44 62 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65  Db;  /* database
22470 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20   name - used by 
22480 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20  the update hook 
22490 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
224a0 2a 7a 54 62 6c 3b 20 2f 2a 20 54 61 62 6c 65 20  *zTbl; /* Table 
224b0 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74  name - used by t
224c0 68 65 20 6f 70 64 61 74 65 20 68 6f 6f 6b 20 2a  he opdate hook *
224d0 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20 20 20  /.  int op;     
224e0 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20        /* Opcode 
224f0 66 6f 72 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a  for update hook:
22500 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 6f   SQLITE_UPDATE o
22510 72 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20  r SQLITE_INSERT 
22520 2a 2f 0a 0a 20 20 70 44 61 74 61 20 3d 20 26 61  */..  pData = &a
22530 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
22540 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
22550 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
22560 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
22570 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
22580 28 70 44 61 74 61 29 20 29 3b 0a 20 20 70 43 20  (pData) );.  pC 
22590 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
225a0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
225b0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
225c0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
225d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
225e0 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
225f0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
22600 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
22610 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
22620 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29  (pOp->p2, pData)
22630 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  ;..  if( pOp->op
22640 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20  code==OP_Insert 
22650 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26 61  ){.    pKey = &a
22660 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
22670 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e    assert( pKey->
22680 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
22690 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
226a0 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20  emIsValid(pKey) 
226b0 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
226c0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
226d0 4b 65 79 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d  Key);.    iKey =
226e0 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65   pKey->u.i;.  }e
226f0 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
22700 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
22710 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20 20  _InsertInt );.  
22720 20 20 69 4b 65 79 20 3d 20 70 4f 70 2d 3e 70 33    iKey = pOp->p3
22730 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70  ;.  }..  if( pOp
22740 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p5 & OPFLAG_NC
22750 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e  HANGE ) p->nChan
22760 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d  ge++;.  if( pOp-
22770 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53  >p5 & OPFLAG_LAS
22780 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73  TROWID ) db->las
22790 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77  tRowid = lastRow
227a0 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 69 66 28  id = iKey;.  if(
227b0 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
227c0 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
227d0 70 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20  pData->z = 0;.  
227e0 20 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a    pData->n = 0;.
227f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
22800 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67  ert( pData->flag
22810 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  s & (MEM_Blob|ME
22820 4d 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20 20  M_Str) );.  }.  
22830 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28 70  seekResult = ((p
22840 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
22850 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f  USESEEKRESULT) ?
22860 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
22870 3a 20 30 29 3b 0a 20 20 69 66 28 20 70 44 61 74  : 0);.  if( pDat
22880 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  a->flags & MEM_Z
22890 65 72 6f 20 29 7b 0a 20 20 20 20 6e 5a 65 72 6f  ero ){.    nZero
228a0 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72   = pData->u.nZer
228b0 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  o;.  }else{.    
228c0 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20  nZero = 0;.  }. 
228d0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
228e0 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 70 43 75  eeInsert(pC->pCu
228f0 72 73 6f 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20  rsor, 0, iKey,. 
22900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22910 20 20 20 20 20 20 20 20 20 70 44 61 74 61 2d 3e           pData->
22920 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65  z, pData->n, nZe
22930 72 6f 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ro,.            
22940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70                (p
22950 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
22960 41 50 50 45 4e 44 29 21 3d 30 2c 20 73 65 65 6b  APPEND)!=0, seek
22970 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43  Result.  );.  pC
22980 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
22990 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
229a0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
229b0 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76  STALE;..  /* Inv
229c0 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
229d0 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
229e0 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   */.  if( rc==SQ
229f0 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78  LITE_OK && db->x
22a00 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
22a10 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  & pOp->p4.z ){. 
22a20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62     zDb = db->aDb
22a30 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b  [pC->iDb].zName;
22a40 0a 20 20 20 20 7a 54 62 6c 20 3d 20 70 4f 70 2d  .    zTbl = pOp-
22a50 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d 20  >p4.z;.    op = 
22a60 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
22a70 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53  AG_ISUPDATE) ? S
22a80 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53  QLITE_UPDATE : S
22a90 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20  QLITE_INSERT);. 
22aa0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
22ab0 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 64 62  sTable );.    db
22ac0 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
22ad0 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67  k(db->pUpdateArg
22ae0 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c  , op, zDb, zTbl,
22af0 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65   iKey);.    asse
22b00 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
22b10 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
22b20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c  ../* Opcode: Del
22b30 65 74 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ete P1 P2 * P4 *
22b40 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68  .**.** Delete th
22b50 65 20 72 65 63 6f 72 64 20 61 74 20 77 68 69 63  e record at whic
22b60 68 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  h the P1 cursor 
22b70 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
22b80 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  nting..**.** The
22b90 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20   cursor will be 
22ba0 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
22bb0 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78 74   either the next
22bc0 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 73   or the previous
22bd0 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68  .** record in th
22be0 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69  e table. If it i
22bf0 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
22c00 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f  at the next reco
22c10 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  rd, then.** the 
22c20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75  next Next instru
22c30 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20  ction will be a 
22c40 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69 74  no-op.  Hence it
22c50 20 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65   is OK to delete
22c60 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 66 72 6f  .** a record fro
22c70 6d 20 77 69 74 68 69 6e 20 61 20 4e 65 78 74 20  m within a Next 
22c80 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  loop..**.** If t
22c90 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
22ca0 45 20 66 6c 61 67 20 6f 66 20 50 32 20 69 73 20  E flag of P2 is 
22cb0 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f  set, then the ro
22cc0 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69  w change count i
22cd0 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64  s.** incremented
22ce0 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29   (otherwise not)
22cf0 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20  ..**.** P1 must 
22d00 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74 61  not be pseudo-ta
22d10 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f 20  ble.  It has to 
22d20 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20  be a real table 
22d30 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65  with.** multiple
22d40 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   rows..**.** If 
22d50 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P4 is not NULL, 
22d60 74 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e  then it is the n
22d70 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
22d80 20 74 68 61 74 20 50 31 20 69 73 0a 2a 2a 20 70   that P1 is.** p
22d90 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68 65  ointing to.  The
22da0 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 77 69 6c   update hook wil
22db0 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69 66  l be invoked, if
22dc0 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20 49   it exists..** I
22dd0 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f P4 is not NULL
22de0 20 74 68 65 6e 20 74 68 65 20 50 31 20 63 75 72   then the P1 cur
22df0 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62 65  sor must have be
22e00 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a  en positioned.**
22e10 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75   using OP_NotFou
22e20 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f  nd prior to invo
22e30 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65  king this opcode
22e40 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c  ..*/.case OP_Del
22e50 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ete: {.  VdbeCur
22e60 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65  sor *pC;..  asse
22e70 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
22e80 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
22e90 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
22ea0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
22eb0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
22ec0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
22ed0 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
22ee0 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69 64 20    /* Only valid 
22ef0 66 6f 72 20 72 65 61 6c 20 74 61 62 6c 65 73 2c  for real tables,
22f00 20 6e 6f 20 70 73 65 75 64 6f 74 61 62 6c 65 73   no pseudotables
22f10 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43   */.  assert( pC
22f20 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
22f30 3d 3d 30 20 29 3b 0a 0a 23 69 66 64 65 66 20 53  ==0 );..#ifdef S
22f40 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 2f 2a  QLITE_DEBUG.  /*
22f50 20 54 68 65 20 73 65 65 6b 20 6f 70 65 72 61 74   The seek operat
22f60 69 6f 6e 20 74 68 61 74 20 70 6f 73 69 74 69 6f  ion that positio
22f70 6e 65 64 20 74 68 65 20 63 75 72 73 6f 72 20 70  ned the cursor p
22f80 72 69 6f 72 20 74 6f 20 4f 50 5f 44 65 6c 65 74  rior to OP_Delet
22f90 65 20 77 69 6c 6c 0a 20 20 2a 2a 20 68 61 76 65  e will.  ** have
22fa0 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20 70 43   also set the pC
22fb0 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 66  ->movetoTarget f
22fc0 69 65 6c 64 20 74 6f 20 74 68 65 20 72 6f 77 69  ield to the rowi
22fd0 64 20 6f 66 20 74 68 65 20 72 6f 77 20 74 68 61  d of the row tha
22fe0 74 0a 20 20 2a 2a 20 69 73 20 62 65 69 6e 67 20  t.  ** is being 
22ff0 64 65 6c 65 74 65 64 20 2a 2f 0a 20 20 69 66 28  deleted */.  if(
23000 20 70 4f 70 2d 3e 70 34 2e 7a 20 26 26 20 70 43   pOp->p4.z && pC
23010 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20  ->isTable ){.   
23020 20 69 36 34 20 69 4b 65 79 20 3d 20 30 3b 0a 20   i64 iKey = 0;. 
23030 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b     sqlite3BtreeK
23040 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73  eySize(pC->pCurs
23050 6f 72 2c 20 26 69 4b 65 79 29 3b 0a 20 20 20 20  or, &iKey);.    
23060 61 73 73 65 72 74 28 20 70 43 2d 3e 6d 6f 76 65  assert( pC->move
23070 74 6f 54 61 72 67 65 74 3d 3d 69 4b 65 79 20 29  toTarget==iKey )
23080 3b 20 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 0a  ; .  }.#endif. .
23090 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
230a0 72 65 65 44 65 6c 65 74 65 28 70 43 2d 3e 70 43  reeDelete(pC->pC
230b0 75 72 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 63 61  ursor);.  pC->ca
230c0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
230d0 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49  E_STALE;..  /* I
230e0 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65  nvoke the update
230f0 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
23100 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d  d. */.  if( rc==
23110 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d  SQLITE_OK && db-
23120 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
23130 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 26 26   && pOp->p4.z &&
23140 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a   pC->isTable ){.
23150 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43      db->xUpdateC
23160 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64  allback(db->pUpd
23170 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44  ateArg, SQLITE_D
23180 45 4c 45 54 45 2c 0a 20 20 20 20 20 20 20 20 20  ELETE,.         
23190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
231a0 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e  b->aDb[pC->iDb].
231b0 7a 4e 61 6d 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a  zName, pOp->p4.z
231c0 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  , pC->movetoTarg
231d0 65 74 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  et);.    assert(
231e0 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20   pC->iDb>=0 );. 
231f0 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32   }.  if( pOp->p2
23200 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
23210 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b  E ) p->nChange++
23220 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20  ;.  break;.}./* 
23230 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75  Opcode: ResetCou
23240 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  nt * * * * *.**.
23250 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20  ** The value of 
23260 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
23270 65 72 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20  er is copied to 
23280 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
23290 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f  dle.** change co
232a0 75 6e 74 65 72 20 28 72 65 74 75 72 6e 65 64 20  unter (returned 
232b0 62 79 20 73 75 62 73 65 71 75 65 6e 74 20 63 61  by subsequent ca
232c0 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 63  lls to sqlite3_c
232d0 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54 68  hanges())..** Th
232e0 65 6e 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72  en the VMs inter
232f0 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  nal change count
23300 65 72 20 72 65 73 65 74 73 20 74 6f 20 30 2e 0a  er resets to 0..
23310 2a 2a 20 54 68 69 73 20 69 73 20 75 73 65 64 20  ** This is used 
23320 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  by trigger progr
23330 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ams..*/.case OP_
23340 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20  ResetCount: {.  
23350 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
23360 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68  anges(db, p->nCh
23370 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68 61  ange);.  p->nCha
23380 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  nge = 0;.  break
23390 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
233a0 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 20 50 31  SorterCompare P1
233b0 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e   P2 P3 P4.** Syn
233c0 6f 70 73 69 73 3a 20 20 69 66 20 6b 65 79 28 50  opsis:  if key(P
233d0 31 29 21 3d 74 72 69 6d 28 72 5b 50 33 5d 2c 50  1)!=trim(r[P3],P
233e0 34 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  4) goto P2.**.**
233f0 20 50 31 20 69 73 20 61 20 73 6f 72 74 65 72 20   P1 is a sorter 
23400 63 75 72 73 6f 72 2e 20 54 68 69 73 20 69 6e 73  cursor. This ins
23410 74 72 75 63 74 69 6f 6e 20 63 6f 6d 70 61 72 65  truction compare
23420 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68  s a prefix of th
23430 65 0a 2a 2a 20 72 65 63 6f 72 64 20 62 6c 6f 62  e.** record blob
23440 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
23450 61 67 61 69 6e 73 74 20 61 20 70 72 65 66 69 78  against a prefix
23460 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20 74 68   of the entry th
23470 61 74 20 0a 2a 2a 20 74 68 65 20 73 6f 72 74 65  at .** the sorte
23480 72 20 63 75 72 73 6f 72 20 63 75 72 72 65 6e 74  r cursor current
23490 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 4f  ly points to.  O
234a0 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20 50 34  nly the first P4
234b0 20 66 69 65 6c 64 73 0a 2a 2a 20 6f 66 20 72 5b   fields.** of r[
234c0 50 33 5d 20 61 6e 64 20 74 68 65 20 73 6f 72 74  P3] and the sort
234d0 65 72 20 72 65 63 6f 72 64 20 61 72 65 20 63 6f  er record are co
234e0 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  mpared..**.** If
234f0 20 65 69 74 68 65 72 20 50 33 20 6f 72 20 74 68   either P3 or th
23500 65 20 73 6f 72 74 65 72 20 63 6f 6e 74 61 69 6e  e sorter contain
23510 73 20 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e 65 20  s a NULL in one 
23520 6f 66 20 74 68 65 69 72 20 73 69 67 6e 69 66 69  of their signifi
23530 63 61 6e 74 0a 2a 2a 20 66 69 65 6c 64 73 20 28  cant.** fields (
23540 6e 6f 74 20 63 6f 75 6e 74 69 6e 67 20 74 68 65  not counting the
23550 20 50 34 20 66 69 65 6c 64 73 20 61 74 20 74 68   P4 fields at th
23560 65 20 65 6e 64 20 77 68 69 63 68 20 61 72 65 20  e end which are 
23570 69 67 6e 6f 72 65 64 29 20 74 68 65 6e 0a 2a 2a  ignored) then.**
23580 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
23590 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 62 65  is assumed to be
235a0 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61   equal..**.** Fa
235b0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 6e 65  ll through to ne
235c0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  xt instruction i
235d0 66 20 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64  f the two record
235e0 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20  s compare equal 
235f0 74 6f 0a 2a 2a 20 65 61 63 68 20 6f 74 68 65 72  to.** each other
23600 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  .  Jump to P2 if
23610 20 74 68 65 79 20 61 72 65 20 64 69 66 66 65 72   they are differ
23620 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ent..*/.case OP_
23630 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 3a 20 7b  SorterCompare: {
23640 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
23650 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
23660 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b 0a 0a 20 20  int nKeyCol;..  
23670 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
23680 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
23690 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
236a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
236b0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
236c0 32 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  2 );.  pIn3 = &a
236d0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
236e0 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f 70 2d 3e 70  nKeyCol = pOp->p
236f0 34 2e 69 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a  4.i;.  res = 0;.
23700 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
23710 62 65 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 28  beSorterCompare(
23720 70 43 2c 20 70 49 6e 33 2c 20 6e 4b 65 79 43 6f  pC, pIn3, nKeyCo
23730 6c 2c 20 26 72 65 73 29 3b 0a 20 20 56 64 62 65  l, &res);.  Vdbe
23740 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
23750 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73  =0,2);.  if( res
23760 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
23770 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72  ->p2-1;.  }.  br
23780 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f  eak;.};../* Opco
23790 64 65 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50  de: SorterData P
237a0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
237b0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64  ynopsis: r[P2]=d
237c0 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  ata.**.** Write 
237d0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
237e0 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72   the current sor
237f0 74 65 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72  ter data for sor
23800 74 65 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  ter cursor P1..*
23810 2a 20 54 68 65 6e 20 63 6c 65 61 72 20 74 68 65  * Then clear the
23820 20 63 6f 6c 75 6d 6e 20 68 65 61 64 65 72 20 63   column header c
23830 61 63 68 65 20 6f 6e 20 63 75 72 73 6f 72 20 50  ache on cursor P
23840 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  3..**.** This op
23850 63 6f 64 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79  code is normally
23860 20 75 73 65 20 74 6f 20 6d 6f 76 65 20 61 20 72   use to move a r
23870 65 63 6f 72 64 20 6f 75 74 20 6f 66 20 74 68 65  ecord out of the
23880 20 73 6f 72 74 65 72 20 61 6e 64 20 69 6e 74 6f   sorter and into
23890 0a 2a 2a 20 61 20 72 65 67 69 73 74 65 72 20 74  .** a register t
238a0 68 61 74 20 69 73 20 74 68 65 20 73 6f 75 72 63  hat is the sourc
238b0 65 20 66 6f 72 20 61 20 70 73 65 75 64 6f 2d 74  e for a pseudo-t
238c0 61 62 6c 65 20 63 75 72 73 6f 72 20 63 72 65 61  able cursor crea
238d0 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 4f 70 65  ted using.** Ope
238e0 6e 50 73 65 75 64 6f 2e 20 20 54 68 61 74 20 70  nPseudo.  That p
238f0 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73  seudo-table curs
23900 6f 72 20 69 73 20 74 68 65 20 6f 6e 65 20 74 68  or is the one th
23910 61 74 20 69 73 20 69 64 65 6e 74 69 66 69 65 64  at is identified
23920 20 62 79 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72   by.** parameter
23930 20 50 33 2e 20 20 43 6c 65 61 72 69 6e 67 20 74   P3.  Clearing t
23940 68 65 20 50 33 20 63 6f 6c 75 6d 6e 20 63 61 63  he P3 column cac
23950 68 65 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  he as part of th
23960 69 73 20 6f 70 63 6f 64 65 20 73 61 76 65 73 0a  is opcode saves.
23970 2a 2a 20 75 73 20 66 72 6f 6d 20 68 61 76 69 6e  ** us from havin
23980 67 20 74 6f 20 69 73 73 75 65 20 61 20 73 65 70  g to issue a sep
23990 61 72 61 74 65 20 4e 75 6c 6c 52 6f 77 20 69 6e  arate NullRow in
239a0 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 63 6c 65  struction to cle
239b0 61 72 20 74 68 61 74 20 63 61 63 68 65 2e 0a 2a  ar that cache..*
239c0 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
239d0 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75  Data: {.  VdbeCu
239e0 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75  rsor *pC;..  pOu
239f0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
23a00 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70  2];.  pC = p->ap
23a10 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
23a20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
23a30 28 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73  (pC) );.  rc = s
23a40 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
23a50 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29  Rowkey(pC, pOut)
23a60 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 21 3d  ;.  assert( rc!=
23a70 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f  SQLITE_OK || (pO
23a80 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ut->flags & MEM_
23a90 42 6c 6f 62 29 20 29 3b 0a 20 20 61 73 73 65 72  Blob) );.  asser
23aa0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
23ab0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
23ac0 73 6f 72 20 29 3b 0a 20 20 70 2d 3e 61 70 43 73  sor );.  p->apCs
23ad0 72 5b 70 4f 70 2d 3e 70 33 5d 2d 3e 63 61 63 68  r[pOp->p3]->cach
23ae0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
23af0 53 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a  STALE;.  break;.
23b00 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
23b10 77 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20  wData P1 P2 * * 
23b20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
23b30 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20  [P2]=data.**.** 
23b40 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
23b50 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c  ter P2 the compl
23b60 65 74 65 20 72 6f 77 20 64 61 74 61 20 66 6f 72  ete row data for
23b70 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54   cursor P1..** T
23b80 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72  here is no inter
23b90 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  pretation of the
23ba0 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69   data.  .** It i
23bb0 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f 6e  s just copied on
23bc0 74 6f 20 74 68 65 20 50 32 20 72 65 67 69 73 74  to the P2 regist
23bd0 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a  er exactly as .*
23be0 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e  * it is found in
23bf0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
23c00 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  le..**.** If the
23c10 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
23c20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61  be pointing to a
23c30 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20   valid row (not 
23c40 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f  a NULL row).** o
23c50 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  f a real table, 
23c60 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
23c70 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  le..*/./* Opcode
23c80 3a 20 52 6f 77 4b 65 79 20 50 31 20 50 32 20 2a  : RowKey P1 P2 *
23c90 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
23ca0 3a 20 72 5b 50 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a  : r[P2]=key.**.*
23cb0 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
23cc0 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d  ister P2 the com
23cd0 70 6c 65 74 65 20 72 6f 77 20 6b 65 79 20 66 6f  plete row key fo
23ce0 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
23cf0 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65  There is no inte
23d00 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
23d10 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65  e data.  .** The
23d20 20 6b 65 79 20 69 73 20 63 6f 70 69 65 64 20 6f   key is copied o
23d30 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69 73  nto the P2 regis
23d40 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a  ter exactly as .
23d50 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69  ** it is found i
23d60 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
23d70 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ile..**.** If th
23d80 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
23d90 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20   be pointing to 
23da0 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74  a valid row (not
23db0 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20   a NULL row).** 
23dc0 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  of a real table,
23dd0 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
23de0 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
23df0 52 6f 77 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f  RowKey:.case OP_
23e00 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62  RowData: {.  Vdb
23e10 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
23e20 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
23e30 20 20 75 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e    u32 n;.  i64 n
23e40 36 34 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61  64;..  pOut = &a
23e50 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
23e60 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
23e70 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a  (p, pOut);..  /*
23e80 20 4e 6f 74 65 20 74 68 61 74 20 52 6f 77 4b 65   Note that RowKe
23e90 79 20 61 6e 64 20 52 6f 77 44 61 74 61 20 61 72  y and RowData ar
23ea0 65 20 72 65 61 6c 6c 79 20 65 78 61 63 74 6c 79  e really exactly
23eb0 20 74 68 65 20 73 61 6d 65 20 69 6e 73 74 72 75   the same instru
23ec0 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72  ction */.  asser
23ed0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
23ee0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
23ef0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
23f00 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
23f10 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
23f20 74 65 72 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20  ter(pC)==0 );.  
23f30 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
23f40 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  ble || pOp->opco
23f50 64 65 21 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29  de!=OP_RowData )
23f60 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
23f70 69 73 54 61 62 6c 65 3d 3d 30 20 7c 7c 20 70 4f  isTable==0 || pO
23f80 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f  p->opcode==OP_Ro
23f90 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72  wData );.  asser
23fa0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
23fb0 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f  sert( pC->nullRo
23fc0 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  w==0 );.  assert
23fd0 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
23fe0 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73  eReg==0 );.  ass
23ff0 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
24000 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
24010 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 0a 20   pC->pCursor;.. 
24020 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65   /* The OP_RowKe
24030 79 20 61 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61  y and OP_RowData
24040 20 6f 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20   opcodes always 
24050 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69  follow OP_NotExi
24060 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52  sts or.  ** OP_R
24070 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69  ewind/Op_Next wi
24080 74 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e  th no intervenin
24090 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 74  g instructions t
240a0 68 61 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69  hat might invali
240b0 64 61 74 65 0a 20 20 2a 2a 20 74 68 65 20 63 75  date.  ** the cu
240c0 72 73 6f 72 2e 20 20 49 66 20 74 68 69 73 20 77  rsor.  If this w
240d0 68 65 72 65 20 6e 6f 74 20 74 68 65 20 63 61 73  here not the cas
240e0 65 2c 20 6f 6e 20 6f 66 20 74 68 65 20 66 6f 6c  e, on of the fol
240f0 6c 6f 77 69 6e 67 20 61 73 73 65 72 74 28 29 73  lowing assert()s
24100 0a 20 20 2a 2a 20 77 6f 75 6c 64 20 66 61 69 6c  .  ** would fail
24110 2e 20 20 53 68 6f 75 6c 64 20 74 68 69 73 20 65  .  Should this e
24120 76 65 72 20 63 68 61 6e 67 65 20 28 62 65 63 61  ver change (beca
24130 75 73 65 20 6f 66 20 63 68 61 6e 67 65 73 20 69  use of changes i
24140 6e 20 74 68 65 20 63 6f 64 65 0a 20 20 2a 2a 20  n the code.  ** 
24150 67 65 6e 65 72 61 74 6f 72 29 20 74 68 65 6e 20  generator) then 
24160 74 68 65 20 66 69 78 20 77 6f 75 6c 64 20 62 65  the fix would be
24170 20 74 6f 20 69 6e 73 65 72 74 20 61 20 63 61 6c   to insert a cal
24180 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65  l to.  ** sqlite
24190 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
241a0 6f 28 29 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  o()..  */.  asse
241b0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
241c0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61  Moveto==0 );.  a
241d0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
241e0 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
241f0 28 70 43 72 73 72 29 20 29 3b 0a 23 69 66 20 30  (pCrsr) );.#if 0
24200 20 20 2f 2a 20 4e 6f 74 20 72 65 71 75 69 72 65    /* Not require
24210 64 20 64 75 65 20 74 6f 20 74 68 65 20 70 72 65  d due to the pre
24220 76 69 6f 75 73 20 74 6f 20 61 73 73 65 72 74 28  vious to assert(
24230 29 20 73 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0a  ) statements */.
24240 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
24250 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70  beCursorMoveto(p
24260 43 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  C);.  if( rc!=SQ
24270 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
24280 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
24290 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28  r;.#endif..  if(
242a0 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
242b0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21  ){.    assert( !
242c0 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
242d0 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d     VVA_ONLY(rc =
242e0 29 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  ) sqlite3BtreeKe
242f0 79 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 36  ySize(pCrsr, &n6
24300 34 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  4);.    assert( 
24310 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
24320 20 20 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61      /* True beca
24330 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76  use of CursorMov
24340 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65  eto() call above
24350 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 36 34 3e   */.    if( n64>
24360 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
24370 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
24380 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f  ){.      goto to
24390 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20  o_big;.    }.   
243a0 20 6e 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20   n = (u32)n64;. 
243b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 56 41 5f   }else{.    VVA_
243c0 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74  ONLY(rc =) sqlit
243d0 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28  e3BtreeDataSize(
243e0 70 43 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20  pCrsr, &n);.    
243f0 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
24400 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44  TE_OK );    /* D
24410 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74  ataSize() cannot
24420 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28   fail */.    if(
24430 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d   n>(u32)db->aLim
24440 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
24450 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20  LENGTH] ){.     
24460 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
24470 20 20 20 7d 0a 20 20 7d 0a 20 20 74 65 73 74 63     }.  }.  testc
24480 61 73 65 28 20 6e 3d 3d 30 20 29 3b 0a 20 20 69  ase( n==0 );.  i
24490 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
244a0 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28  mClearAndResize(
244b0 70 4f 75 74 2c 20 4d 41 58 28 6e 2c 33 32 29 29  pOut, MAX(n,32))
244c0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   ){.    goto no_
244d0 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  mem;.  }.  pOut-
244e0 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65 74  >n = n;.  MemSet
244f0 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
24500 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69 66 28 20  EM_Blob);.  if( 
24510 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
24520 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
24530 65 33 42 74 72 65 65 4b 65 79 28 70 43 72 73 72  e3BtreeKey(pCrsr
24540 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29  , 0, n, pOut->z)
24550 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
24560 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
24570 44 61 74 61 28 70 43 72 73 72 2c 20 30 2c 20 6e  Data(pCrsr, 0, n
24580 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a  , pOut->z);.  }.
24590 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51    pOut->enc = SQ
245a0 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49  LITE_UTF8;  /* I
245b0 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20  n case the blob 
245c0 69 73 20 65 76 65 72 20 63 61 73 74 20 74 6f 20  is ever cast to 
245d0 74 65 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45  text */.  UPDATE
245e0 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
245f0 75 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  ut);.  REGISTER_
24600 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
24610 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
24620 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
24630 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  id P1 P2 * * *.*
24640 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
24650 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74  ]=rowid.**.** St
24660 6f 72 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  ore in register 
24670 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68  P2 an integer wh
24680 69 63 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f  ich is the key o
24690 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72  f the table entr
246a0 79 20 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20  y that.** P1 is 
246b0 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20  currently point 
246c0 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e  to..**.** P1 can
246d0 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72   be either an or
246e0 64 69 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20  dinary table or 
246f0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
24700 20 20 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a    There used to.
24710 2a 2a 20 62 65 20 61 20 73 65 70 61 72 61 74 65  ** be a separate
24720 20 4f 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64   OP_VRowid opcod
24730 65 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 76  e for use with v
24740 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62  irtual tables, b
24750 75 74 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f  ut this.** one o
24760 70 63 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20  pcode now works 
24770 66 6f 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74  for both table t
24780 79 70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ypes..*/.case OP
24790 5f 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  _Rowid: {       
247a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
247b0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
247c0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
247d0 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c  ;.  i64 v;.  sql
247e0 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
247f0 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
24800 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
24810 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  e;..  assert( pO
24820 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
24830 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
24840 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
24850 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
24860 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
24870 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
24880 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 7c  udoTableReg==0 |
24890 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b  | pC->nullRow );
248a0 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52  .  if( pC->nullR
248b0 6f 77 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  ow ){.    pOut->
248c0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
248d0 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
248e0 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66  else if( pC->def
248f0 65 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20  erredMoveto ){. 
24900 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74     v = pC->movet
24910 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e 64 65 66  oTarget;.#ifndef
24920 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
24930 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73  TUALTABLE.  }els
24940 65 20 69 66 28 20 70 43 2d 3e 70 56 74 61 62 43  e if( pC->pVtabC
24950 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 70 56 74  ursor ){.    pVt
24960 61 62 20 3d 20 70 43 2d 3e 70 56 74 61 62 43 75  ab = pC->pVtabCu
24970 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20  rsor->pVtab;.   
24980 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
24990 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61  ->pModule;.    a
249a0 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e  ssert( pModule->
249b0 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63  xRowid );.    rc
249c0 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77   = pModule->xRow
249d0 69 64 28 70 43 2d 3e 70 56 74 61 62 43 75 72 73  id(pC->pVtabCurs
249e0 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c  or, &v);.    sql
249f0 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
24a00 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
24a10 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
24a20 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
24a30 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20  LE */.  }else{. 
24a40 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70     assert( pC->p
24a50 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20  Cursor!=0 );.   
24a60 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
24a70 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70  eCursorRestore(p
24a80 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  C);.    if( rc )
24a90 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
24aa0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66  to_error;.    if
24ab0 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  ( pC->nullRow ){
24ac0 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  .      pOut->fla
24ad0 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
24ae0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
24af0 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  }.    rc = sqlit
24b00 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
24b10 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b  C->pCursor, &v);
24b20 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d  .    assert( rc=
24b30 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 2f  =SQLITE_OK );  /
24b40 2a 20 41 6c 77 61 79 73 20 73 6f 20 62 65 63 61  * Always so beca
24b50 75 73 65 20 6f 66 20 43 75 72 73 6f 72 52 65 73  use of CursorRes
24b60 74 6f 72 65 28 29 20 61 62 6f 76 65 20 2a 2f 0a  tore() above */.
24b70 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
24b80 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = v;.  break;.}.
24b90 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c  ./* Opcode: Null
24ba0 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  Row P1 * * * *.*
24bb0 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75  *.** Move the cu
24bc0 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c  rsor P1 to a nul
24bd0 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43  l row.  Any OP_C
24be0 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73  olumn operations
24bf0 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77  .** that occur w
24c00 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20  hile the cursor 
24c10 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72  is on the null r
24c20 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a  ow will always.*
24c30 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a  * write a NULL..
24c40 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52  */.case OP_NullR
24c50 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ow: {.  VdbeCurs
24c60 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72  or *pC;..  asser
24c70 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
24c80 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
24c90 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
24ca0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
24cb0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
24cc0 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f   );.  pC->nullRo
24cd0 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 63 61 63  w = 1;.  pC->cac
24ce0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
24cf0 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 43  _STALE;.  if( pC
24d00 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20 20 20  ->pCursor ){.   
24d10 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
24d20 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 70 43 75  arCursor(pC->pCu
24d30 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65  rsor);.  }.  bre
24d40 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
24d50 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a 20 2a  : Last P1 P2 * *
24d60 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78   *.**.** The nex
24d70 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77  t use of the Row
24d80 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20  id or Column or 
24d90 50 72 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e  Prev instruction
24da0 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c   for P1 .** will
24db0 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6c 61   refer to the la
24dc0 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  st entry in the 
24dd0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
24de0 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74  r index..** If t
24df0 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
24e00 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50  x is empty and P
24e10 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69  2>0, then jump i
24e20 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
24e30 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20  ..** If P2 is 0 
24e40 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65 20  or if the table 
24e50 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20  or index is not 
24e60 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f  empty, fall thro
24e70 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
24e80 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
24e90 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ion..**.** This 
24ea0 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
24eb0 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
24ec0 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72  red to move in r
24ed0 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a  everse order,.**
24ee0 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f   from the end to
24ef0 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69  ward the beginni
24f00 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ng.  In other wo
24f10 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
24f20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
24f30 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f   to use Prev, no
24f40 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63 61 73 65 20  t Next..*/.case 
24f50 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20  OP_Last: {      
24f60 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
24f70 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
24f80 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
24f90 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20  ;.  int res;..  
24fa0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
24fb0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
24fc0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
24fd0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
24fe0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
24ff0 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
25000 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
25010 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73    res = 0;.  ass
25020 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b  ert( pCrsr!=0 );
25030 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
25040 74 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20  treeLast(pCrsr, 
25050 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c  &res);.  pC->nul
25060 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a  lRow = (u8)res;.
25070 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
25080 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
25090 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
250a0 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65  CHE_STALE;.#ifde
250b0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
250c0 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50   pC->seekOp = OP
250d0 5f 4c 61 73 74 3b 0a 23 65 6e 64 69 66 0a 20 20  _Last;.#endif.  
250e0 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b  if( pOp->p2>0 ){
250f0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
25100 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
25110 20 20 20 20 69 66 28 20 72 65 73 20 29 20 70 63      if( res ) pc
25120 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
25130 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
25140 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
25150 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
25160 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64  ** This opcode d
25170 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68 65 20  oes exactly the 
25180 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50  same thing as OP
25190 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74 20 74  _Rewind except t
251a0 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d  hat.** it increm
251b0 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65  ents an undocume
251c0 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69  nted global vari
251d0 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65  able used for te
251e0 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72  sting..**.** Sor
251f0 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69  ting is accompli
25200 73 68 65 64 20 62 79 20 77 72 69 74 69 6e 67 20  shed by writing 
25210 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73  records into a s
25220 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a  orting index,.**
25230 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20   then rewinding 
25240 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70  that index and p
25250 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66  laying it back f
25260 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  rom beginning to
25270 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65  .** end.  We use
25280 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63   the OP_Sort opc
25290 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f  ode instead of O
252a0 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74  P_Rewind to do t
252b0 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20  he.** rewinding 
252c0 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62  so that the glob
252d0 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c  al variable will
252e0 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   be incremented 
252f0 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f  and.** regressio
25300 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65 74 65  n tests can dete
25310 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72  rmine whether or
25320 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a   not the optimiz
25330 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74  er is.** correct
25340 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75  ly optimizing ou
25350 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65  t sorts..*/.case
25360 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20   OP_SorterSort: 
25370 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
25380 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20  se OP_Sort: {   
25390 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
253a0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
253b0 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72  ST.  sqlite3_sor
253c0 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c  t_count++;.  sql
253d0 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
253e0 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d  t--;.#endif.  p-
253f0 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45  >aCounter[SQLITE
25400 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54  _STMTSTATUS_SORT
25410 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  ]++;.  /* Fall t
25420 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52  hrough into OP_R
25430 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70  ewind */.}./* Op
25440 63 6f 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20  code: Rewind P1 
25450 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
25460 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74  he next use of t
25470 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75  he Rowid or Colu
25480 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72  mn or Next instr
25490 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a  uction for P1 .*
254a0 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20  * will refer to 
254b0 74 68 65 20 66 69 72 73 74 20 65 6e 74 72 79 20  the first entry 
254c0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
254d0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a  table or index..
254e0 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20  ** If the table 
254f0 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74  or index is empt
25500 79 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  y, jump immediat
25510 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66  ely to P2..** If
25520 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
25530 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  dex is not empty
25540 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  , fall through t
25550 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
25560 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
25570 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
25580 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
25590 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
255a0 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61  to move in forwa
255b0 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  rd order,.** fro
255c0 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
255d0 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20  toward the end. 
255e0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
255f0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
25600 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
25610 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72  use Next, not Pr
25620 65 76 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ev..*/.case OP_R
25630 65 77 69 6e 64 3a 20 7b 20 20 20 20 20 20 20 20  ewind: {        
25640 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
25650 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
25660 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
25670 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73    int res;..  as
25680 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
25690 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
256a0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
256b0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
256c0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
256d0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
256e0 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28   isSorter(pC)==(
256f0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
25700 53 6f 72 74 65 72 53 6f 72 74 29 20 29 3b 0a 20  SorterSort) );. 
25710 20 72 65 73 20 3d 20 31 3b 0a 23 69 66 64 65 66   res = 1;.#ifdef
25720 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
25730 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f  pC->seekOp = OP_
25740 52 65 77 69 6e 64 3b 0a 23 65 6e 64 69 66 0a 20  Rewind;.#endif. 
25750 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43   if( isSorter(pC
25760 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  ) ){.    rc = sq
25770 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52  lite3VdbeSorterR
25780 65 77 69 6e 64 28 70 43 2c 20 26 72 65 73 29 3b  ewind(pC, &res);
25790 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43  .  }else{.    pC
257a0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
257b0 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  r;.    assert( p
257c0 43 72 73 72 20 29 3b 0a 20 20 20 20 72 63 20 3d  Crsr );.    rc =
257d0 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69 72   sqlite3BtreeFir
257e0 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b  st(pCrsr, &res);
257f0 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
25800 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
25810 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
25820 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
25830 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f    }.  pC->nullRo
25840 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61  w = (u8)res;.  a
25850 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
25860 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e   && pOp->p2<p->n
25870 4f 70 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  Op );.  VdbeBran
25880 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
25890 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a  );.  if( res ){.
258a0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
258b0 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
258c0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
258d0 20 4e 65 78 74 20 50 31 20 50 32 20 50 33 20 50   Next P1 P2 P3 P
258e0 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e  4 P5.**.** Advan
258f0 63 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  ce cursor P1 so 
25900 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
25910 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64  o the next key/d
25920 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a  ata pair in its.
25930 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
25940 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  x.  If there are
25950 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c   no more key/val
25960 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61  ue pairs then fa
25970 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
25980 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
25990 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
259a0 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 61   if the cursor a
259b0 64 76 61 6e 63 65 20 77 61 73 20 73 75 63 63 65  dvance was succe
259c0 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69  ssful,.** jump i
259d0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
259e0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78 74  ..**.** The Next
259f0 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
25a00 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  valid following 
25a10 61 6e 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47  an SeekGT, SeekG
25a20 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77 69  E, or.** OP_Rewi
25a30 6e 64 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74  nd opcode used t
25a40 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63  o position the c
25a50 75 72 73 6f 72 2e 20 20 4e 65 78 74 20 69 73 20  ursor.  Next is 
25a60 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74  not allowed.** t
25a70 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c  o follow SeekLT,
25a80 20 53 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c   SeekLE, or OP_L
25a90 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ast..**.** The P
25aa0 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
25ab0 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c   for a real tabl
25ac0 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
25ad0 74 61 62 6c 65 2e 20 20 50 31 20 6d 75 73 74 20  table.  P1 must 
25ae0 68 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70 65  have.** been ope
25af0 6e 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69  ned prior to thi
25b00 73 20 6f 70 63 6f 64 65 20 6f 72 20 74 68 65 20  s opcode or the 
25b10 70 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65 67  program will seg
25b20 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  fault..**.** The
25b30 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20 68   P3 value is a h
25b40 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65 65  int to the btree
25b50 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
25b60 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a   If P3==1, that.
25b70 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61  ** means P1 is a
25b80 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20  n SQL index and 
25b90 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72 75  that this instru
25ba0 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65  ction could have
25bb0 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64   been.** omitted
25bc0 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20 68   if that index h
25bd0 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20  ad been unique. 
25be0 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30   P3 is usually 0
25bf0 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61  .  P3 is.** alwa
25c00 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31  ys either 0 or 1
25c10 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c  ..**.** P4 is al
25c20 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f  ways of type P4_
25c30 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e  ADVANCE. The fun
25c40 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f  ction pointer po
25c50 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74  ints to.** sqlit
25c60 65 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a  e3BtreeNext()..*
25c70 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f  *.** If P5 is po
25c80 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a  sitive and the j
25c90 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68  ump is taken, th
25ca0 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72  en event counter
25cb0 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20  .** number P5-1 
25cc0 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20  in the prepared 
25cd0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63  statement is inc
25ce0 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  remented..**.** 
25cf0 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 2c 20  See also: Prev, 
25d00 4e 65 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a  NextIfOpen.*/./*
25d10 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 49 66 4f   Opcode: NextIfO
25d20 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  pen P1 P2 P3 P4 
25d30 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P5.**.** This op
25d40 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20  code works just 
25d50 6c 69 6b 65 20 4e 65 78 74 20 65 78 63 65 70 74  like Next except
25d60 20 74 68 61 74 20 69 66 20 63 75 72 73 6f 72 20   that if cursor 
25d70 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65  P1 is not.** ope
25d80 6e 20 69 74 20 62 65 68 61 76 65 73 20 61 20 6e  n it behaves a n
25d90 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  o-op..*/./* Opco
25da0 64 65 3a 20 50 72 65 76 20 50 31 20 50 32 20 50  de: Prev P1 P2 P
25db0 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61  3 P4 P5.**.** Ba
25dc0 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31 20  ck up cursor P1 
25dd0 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
25de0 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75  s to the previou
25df0 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  s key/data pair 
25e00 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
25e10 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
25e20 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f  ere is no previo
25e30 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69  us key/value pai
25e40 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  rs then fall thr
25e50 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
25e60 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
25e70 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68  tion.  But if th
25e80 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20  e cursor backup 
25e90 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a  was successful,.
25ea0 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  ** jump immediat
25eb0 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ely to P2..**.**
25ec0 0a 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63  .** The Prev opc
25ed0 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ode is only vali
25ee0 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53  d following an S
25ef0 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f  eekLT, SeekLE, o
25f00 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70 63  r.** OP_Last opc
25f10 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69  ode used to posi
25f20 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e  tion the cursor.
25f30 20 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61 6c    Prev is not al
25f40 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c  lowed.** to foll
25f50 6f 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47  ow SeekGT, SeekG
25f60 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2e  E, or OP_Rewind.
25f70 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75  .**.** The P1 cu
25f80 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72  rsor must be for
25f90 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
25fa0 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
25fb0 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a 20  e.  If P1 is.** 
25fc0 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74 68  not open then th
25fd0 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e  e behavior is un
25fe0 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  defined..**.** T
25ff0 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61  he P3 value is a
26000 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72   hint to the btr
26010 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ee implementatio
26020 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61  n. If P3==1, tha
26030 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73  t.** means P1 is
26040 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e   an SQL index an
26050 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74  d that this inst
26060 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61  ruction could ha
26070 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74  ve been.** omitt
26080 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78  ed if that index
26090 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65   had been unique
260a0 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79  .  P3 is usually
260b0 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c   0.  P3 is.** al
260c0 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72  ways either 0 or
260d0 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20   1..**.** P4 is 
260e0 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50  always of type P
260f0 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66  4_ADVANCE. The f
26100 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  unction pointer 
26110 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c  points to.** sql
26120 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
26130 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  s()..**.** If P5
26140 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64   is positive and
26150 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
26160 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63  en, then event c
26170 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  ounter.** number
26180 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65   P5-1 in the pre
26190 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
261a0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
261b0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72  */./* Opcode: Pr
261c0 65 76 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50  evIfOpen P1 P2 P
261d0 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
261e0 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20  is opcode works 
261f0 6a 75 73 74 20 6c 69 6b 65 20 50 72 65 76 20 65  just like Prev e
26200 78 63 65 70 74 20 74 68 61 74 20 69 66 20 63 75  xcept that if cu
26210 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a  rsor P1 is not.*
26220 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65  * open it behave
26230 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61  s a no-op..*/.ca
26240 73 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74  se OP_SorterNext
26250 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a  : {  /* jump */.
26260 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
26270 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20  ;.  int res;..  
26280 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
26290 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
262a0 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
262b0 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72  ;.  res = 0;.  r
262c0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
262d0 6f 72 74 65 72 4e 65 78 74 28 64 62 2c 20 70 43  orterNext(db, pC
262e0 2c 20 26 72 65 73 29 3b 0a 20 20 67 6f 74 6f 20  , &res);.  goto 
262f0 6e 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20  next_tail;.case 
26300 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 3a 20 20  OP_PrevIfOpen:  
26310 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
26320 65 20 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 3a  e OP_NextIfOpen:
26330 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
26340 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f   if( p->apCsr[pO
26350 70 2d 3e 70 31 5d 3d 3d 30 20 29 20 62 72 65 61  p->p1]==0 ) brea
26360 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  k;.  /* Fall thr
26370 6f 75 67 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  ough */.case OP_
26380 50 72 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f  Prev:          /
26390 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
263a0 50 5f 4e 65 78 74 3a 20 20 20 20 20 20 20 20 20  P_Next:         
263b0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73   /* jump */.  as
263c0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
263d0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
263e0 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
263f0 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72 61  rt( pOp->p5<Arra
26400 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65  ySize(p->aCounte
26410 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  r) );.  pC = p->
26420 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
26430 20 20 72 65 73 20 3d 20 70 4f 70 2d 3e 70 33 3b    res = pOp->p3;
26440 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
26450 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
26460 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
26470 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
26480 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 3b 0a   pC->pCursor );.
26490 20 20 61 73 73 65 72 74 28 20 72 65 73 3d 3d 30    assert( res==0
264a0 20 7c 7c 20 28 72 65 73 3d 3d 31 20 26 26 20 70   || (res==1 && p
264b0 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 29 20 29  C->isTable==0) )
264c0 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 72 65  ;.  testcase( re
264d0 73 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74  s==1 );.  assert
264e0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
264f0 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70  P_Next || pOp->p
26500 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69  4.xAdvance==sqli
26510 74 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a  te3BtreeNext );.
26520 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
26530 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c  pcode!=OP_Prev |
26540 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  | pOp->p4.xAdvan
26550 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  ce==sqlite3Btree
26560 50 72 65 76 69 6f 75 73 20 29 3b 0a 20 20 61 73  Previous );.  as
26570 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
26580 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e  e!=OP_NextIfOpen
26590 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76   || pOp->p4.xAdv
265a0 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72  ance==sqlite3Btr
265b0 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65  eeNext );.  asse
265c0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
265d0 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 20 7c  =OP_PrevIfOpen |
265e0 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  | pOp->p4.xAdvan
265f0 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  ce==sqlite3Btree
26600 50 72 65 76 69 6f 75 73 29 3b 0a 0a 20 20 2f 2a  Previous);..  /*
26610 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65   The Next opcode
26620 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66   is only used af
26630 74 65 72 20 53 65 65 6b 47 54 2c 20 53 65 65 6b  ter SeekGT, Seek
26640 47 45 2c 20 61 6e 64 20 52 65 77 69 6e 64 2e 0a  GE, and Rewind..
26650 20 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70    ** The Prev op
26660 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65  code is only use
26670 64 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c 20  d after SeekLT, 
26680 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73 74  SeekLE, and Last
26690 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  . */.  assert( p
266a0 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
266b0 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  ext || pOp->opco
266c0 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65  de!=OP_NextIfOpe
266d0 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e  n.       || pC->
266e0 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47  seekOp==OP_SeekG
266f0 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d  T || pC->seekOp=
26700 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20 20 20  =OP_SeekGE.     
26710 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d    || pC->seekOp=
26720 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20 70 43  =OP_Rewind || pC
26730 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f 75  ->seekOp==OP_Fou
26740 6e 64 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  nd);.  assert( p
26750 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50  Op->opcode!=OP_P
26760 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  rev || pOp->opco
26770 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65  de!=OP_PrevIfOpe
26780 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e  n.       || pC->
26790 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c  seekOp==OP_SeekL
267a0 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d  T || pC->seekOp=
267b0 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20 20 20  =OP_SeekLE.     
267c0 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d    || pC->seekOp=
267d0 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a 0a 20 20 72  =OP_Last );..  r
267e0 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76  c = pOp->p4.xAdv
267f0 61 6e 63 65 28 70 43 2d 3e 70 43 75 72 73 6f 72  ance(pC->pCursor
26800 2c 20 26 72 65 73 29 3b 0a 6e 65 78 74 5f 74 61  , &res);.next_ta
26810 69 6c 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65 53  il:.  pC->cacheS
26820 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
26830 41 4c 45 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  ALE;.  VdbeBranc
26840 68 54 61 6b 65 6e 28 72 65 73 3d 3d 30 2c 32 29  hTaken(res==0,2)
26850 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29  ;.  if( res==0 )
26860 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  {.    pC->nullRo
26870 77 20 3d 20 30 3b 0a 20 20 20 20 70 63 20 3d 20  w = 0;.    pc = 
26880 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
26890 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70   p->aCounter[pOp
268a0 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20  ->p5]++;.#ifdef 
268b0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
268c0 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
268d0 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20  ount++;.#endif. 
268e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 2d 3e   }else{.    pC->
268f0 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 7d  nullRow = 1;.  }
26900 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f  .  goto check_fo
26910 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a  r_interrupt;.}..
26920 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e  /* Opcode: IdxIn
26930 73 65 72 74 20 50 31 20 50 32 20 50 33 20 2a 20  sert P1 P2 P3 * 
26940 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
26950 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  key=r[P2].**.** 
26960 52 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64  Register P2 hold
26970 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b  s an SQL index k
26980 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68  ey made using th
26990 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20  e.** MakeRecord 
269a0 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54  instructions.  T
269b0 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65  his opcode write
269c0 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e  s that key.** in
269d0 74 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e  to the index P1.
269e0 20 20 44 61 74 61 20 66 6f 72 20 74 68 65 20 65    Data for the e
269f0 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a  ntry is nil..**.
26a00 2a 2a 20 50 33 20 69 73 20 61 20 66 6c 61 67 20  ** P3 is a flag 
26a10 74 68 61 74 20 70 72 6f 76 69 64 65 73 20 61 20  that provides a 
26a20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72  hint to the b-tr
26a30 65 65 20 6c 61 79 65 72 20 74 68 61 74 20 74 68  ee layer that th
26a40 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73 20  is.** insert is 
26a50 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20  likely to be an 
26a60 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  append..**.** If
26a70 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c   P5 has the OPFL
26a80 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 73  AG_NCHANGE bit s
26a90 65 74 2c 20 74 68 65 6e 20 74 68 65 20 63 68 61  et, then the cha
26aa0 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 0a 2a  nge counter is.*
26ab0 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79  * incremented by
26ac0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
26ad0 6e 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41  n.  If the OPFLA
26ae0 47 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 69 73  G_NCHANGE bit is
26af0 20 63 6c 65 61 72 2c 0a 2a 2a 20 74 68 65 6e 20   clear,.** then 
26b00 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
26b10 65 72 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e  er is unchanged.
26b20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73  .**.** If P5 has
26b30 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53   the OPFLAG_USES
26b40 45 45 4b 52 45 53 55 4c 54 20 62 69 74 20 73 65  EEKRESULT bit se
26b50 74 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 73  t, then the curs
26b60 6f 72 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20  or must have.** 
26b70 6a 75 73 74 20 64 6f 6e 65 20 61 20 73 65 65 6b  just done a seek
26b80 20 74 6f 20 74 68 65 20 73 70 6f 74 20 77 68 65   to the spot whe
26b90 72 65 20 74 68 65 20 6e 65 77 20 65 6e 74 72 79  re the new entry
26ba0 20 69 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74   is to be insert
26bb0 65 64 2e 0a 2a 2a 20 54 68 69 73 20 66 6c 61 67  ed..** This flag
26bc0 20 61 76 6f 69 64 73 20 64 6f 69 6e 67 20 61 6e   avoids doing an
26bd0 20 65 78 74 72 61 20 73 65 65 6b 2e 0a 2a 2a 0a   extra seek..**.
26be0 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
26bf0 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66  ion only works f
26c00 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54 68 65  or indices.  The
26c10 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74   equivalent inst
26c20 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74  ruction.** for t
26c30 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73 65  ables is OP_Inse
26c40 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  rt..*/.case OP_S
26c50 6f 72 74 65 72 49 6e 73 65 72 74 3a 20 20 20 20  orterInsert:    
26c60 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63 61 73     /* in2 */.cas
26c70 65 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a 20  e OP_IdxInsert: 
26c80 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20  {        /* in2 
26c90 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
26ca0 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
26cb0 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 6e 4b  *pCrsr;.  int nK
26cc0 65 79 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  ey;.  const char
26cd0 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73 73 65 72   *zKey;..  asser
26ce0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
26cf0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
26d00 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
26d10 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
26d20 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
26d30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73   );.  assert( is
26d40 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70  Sorter(pC)==(pOp
26d50 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72  ->opcode==OP_Sor
26d60 74 65 72 49 6e 73 65 72 74 29 20 29 3b 0a 20 20  terInsert) );.  
26d70 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
26d80 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
26d90 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn2->flags & M
26da0 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 70 43 72  EM_Blob );.  pCr
26db0 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
26dc0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ;.  if( pOp->p5 
26dd0 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
26de0 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b   ) p->nChange++;
26df0 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
26e00 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
26e10 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
26e20 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64  );.  rc = Expand
26e30 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69 66  Blob(pIn2);.  if
26e40 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
26e50 29 7b 0a 20 20 20 20 69 66 28 20 69 73 53 6f 72  ){.    if( isSor
26e60 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 20  ter(pC) ){.     
26e70 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
26e80 65 53 6f 72 74 65 72 57 72 69 74 65 28 70 43 2c  eSorterWrite(pC,
26e90 20 70 49 6e 32 29 3b 0a 20 20 20 20 7d 65 6c 73   pIn2);.    }els
26ea0 65 7b 0a 20 20 20 20 20 20 6e 4b 65 79 20 3d 20  e{.      nKey = 
26eb0 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20 20 20 7a  pIn2->n;.      z
26ec0 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20  Key = pIn2->z;. 
26ed0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
26ee0 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 72  3BtreeInsert(pCr
26ef0 73 72 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20  sr, zKey, nKey, 
26f00 22 22 2c 20 30 2c 20 30 2c 20 70 4f 70 2d 3e 70  "", 0, 0, pOp->p
26f10 33 2c 20 0a 20 20 20 20 20 20 20 20 20 20 28 28  3, .          ((
26f20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
26f30 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20  _USESEEKRESULT) 
26f40 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74  ? pC->seekResult
26f50 20 3a 20 30 29 0a 20 20 20 20 20 20 20 20 20 20   : 0).          
26f60 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
26f70 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
26f80 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  eto==0 );.      
26f90 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
26fa0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
26fb0 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
26fc0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
26fd0 49 64 78 44 65 6c 65 74 65 20 50 31 20 50 32 20  IdxDelete P1 P2 
26fe0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
26ff0 69 73 3a 20 6b 65 79 3d 72 5b 50 32 40 50 33 5d  is: key=r[P2@P3]
27000 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65  .**.** The conte
27010 6e 74 20 6f 66 20 50 33 20 72 65 67 69 73 74 65  nt of P3 registe
27020 72 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 72  rs starting at r
27030 65 67 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a  egister P2 form.
27040 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  ** an unpacked i
27050 6e 64 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f  ndex key. This o
27060 70 63 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68  pcode removes th
27070 61 74 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68  at entry from th
27080 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e  e .** index open
27090 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e  ed by cursor P1.
270a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44  .*/.case OP_IdxD
270b0 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43  elete: {.  VdbeC
270c0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
270d0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
270e0 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63  int res;.  Unpac
270f0 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20  kedRecord r;..  
27100 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
27110 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
27120 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
27130 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  >p2+pOp->p3<=(p-
27140 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
27150 29 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  )+1 );.  assert(
27160 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
27170 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
27180 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
27190 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
271a0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
271b0 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
271c0 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
271d0 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
271e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
271f0 3d 3d 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49  ==0 );.  r.pKeyI
27200 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
27210 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d  fo;.  r.nField =
27220 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20   (u16)pOp->p3;. 
27230 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
27240 30 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61  0;.  r.aMem = &a
27250 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 23 69  Mem[pOp->p2];.#i
27260 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
27270 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72  G.  { int i; for
27280 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64  (i=0; i<r.nField
27290 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d  ; i++) assert( m
272a0 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
272b0 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69  m[i]) ); }.#endi
272c0 66 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  f.  rc = sqlite3
272d0 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
272e0 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30  ked(pCrsr, &r, 0
272f0 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66  , 0, &res);.  if
27300 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
27310 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  && res==0 ){.   
27320 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
27330 65 65 44 65 6c 65 74 65 28 70 43 72 73 72 29 3b  eeDelete(pCrsr);
27340 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
27350 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
27360 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 63 61  o==0 );.  pC->ca
27370 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
27380 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b  E_STALE;.  break
27390 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
273a0 49 64 78 52 6f 77 69 64 20 50 31 20 50 32 20 2a  IdxRowid P1 P2 *
273b0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
273c0 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a  : r[P2]=rowid.**
273d0 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
273e0 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e  egister P2 an in
273f0 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74  teger which is t
27400 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e  he last entry in
27410 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 0a 2a   the record at.*
27420 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  * the end of the
27430 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e 74   index key point
27440 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f 72 20  ed to by cursor 
27450 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65 67 65  P1.  This intege
27460 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74  r should be.** t
27470 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
27480 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f 20 77  table entry to w
27490 68 69 63 68 20 74 68 69 73 20 69 6e 64 65 78 20  hich this index 
274a0 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a  entry points..**
274b0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f  .** See also: Ro
274c0 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e  wid, MakeRecord.
274d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 52  .*/.case OP_IdxR
274e0 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
274f0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
27500 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 43  release */.  BtC
27510 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
27520 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
27530 20 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20    i64 rowid;..  
27540 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
27550 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
27560 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
27570 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
27580 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
27590 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
275a0 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
275b0 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
275c0 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  =0 );.  pOut->fl
275d0 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
275e0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
275f0 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73  Table==0 );.  as
27600 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
27610 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a  edMoveto==0 );..
27620 20 20 2f 2a 20 73 71 6c 69 74 65 33 56 62 65 43    /* sqlite3VbeC
27630 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 63  ursorRestore() c
27640 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69 66 20  an only fail if 
27650 74 68 65 20 72 65 63 6f 72 64 20 68 61 73 20 62  the record has b
27660 65 65 6e 20 64 65 6c 65 74 65 64 0a 20 20 2a 2a  een deleted.  **
27670 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 20   out from under 
27680 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68 61  the cursor.  Tha
27690 74 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 61 70  t will never hap
276a0 70 65 6e 64 20 66 6f 72 20 61 6e 20 49 64 78 52  pend for an IdxR
276b0 6f 77 69 64 0a 20 20 2a 2a 20 6f 70 63 6f 64 65  owid.  ** opcode
276c0 2c 20 68 65 6e 63 65 20 74 68 65 20 4e 45 56 45  , hence the NEVE
276d0 52 28 29 20 61 72 72 6f 75 6e 64 20 74 68 65 20  R() arround the 
276e0 63 68 65 63 6b 20 6f 66 20 74 68 65 20 72 65 74  check of the ret
276f0 75 72 6e 20 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a  urn value..  */.
27700 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
27710 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28  beCursorRestore(
27720 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  pC);.  if( NEVER
27730 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20  (rc!=SQLITE_OK) 
27740 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
27750 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66  _to_error;..  if
27760 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  ( !pC->nullRow )
27770 7b 0a 20 20 20 20 72 6f 77 69 64 20 3d 20 30 3b  {.    rowid = 0;
27780 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
27790 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73    Only used to s
277a0 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67  ilence a warning
277b0 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71  . */.    rc = sq
277c0 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77 69  lite3VdbeIdxRowi
277d0 64 28 64 62 2c 20 70 43 72 73 72 2c 20 26 72 6f  d(db, pCrsr, &ro
277e0 77 69 64 29 3b 0a 20 20 20 20 69 66 28 20 72 63  wid);.    if( rc
277f0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
27800 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
27810 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
27820 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e    }.    pOut->u.
27830 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 70  i = rowid;.    p
27840 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
27850 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _Int;.  }.  brea
27860 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
27870 20 49 64 78 47 45 20 50 31 20 50 32 20 50 33 20   IdxGE P1 P2 P3 
27880 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
27890 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
278a0 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67  **.** The P4 reg
278b0 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67  ister values beg
278c0 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66  inning with P3 f
278d0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  orm an unpacked 
278e0 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68  index .** key th
278f0 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49  at omits the PRI
27900 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61  MARY KEY.  Compa
27910 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
27920 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e  e against the in
27930 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20  dex .** that P1 
27940 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
27950 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
27960 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ng the PRIMARY K
27970 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20  EY or ROWID .** 
27980 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e  fields at the en
27990 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
279a0 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
279b0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
279c0 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
279d0 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e  ey value.** then
279e0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74   jump to P2.  Ot
279f0 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
27a00 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
27a10 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
27a20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47  ./* Opcode: IdxG
27a30 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  T P1 P2 P3 P4 P5
27a40 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
27a50 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
27a60 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
27a70 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
27a80 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
27a90 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
27aa0 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
27ab0 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20  its the PRIMARY 
27ac0 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68  KEY.  Compare th
27ad0 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61  is key value aga
27ae0 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a  inst the index .
27af0 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ** that P1 is cu
27b00 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
27b10 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
27b20 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
27b30 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64   ROWID .** field
27b40 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a  s at the end..**
27b50 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e  .** If the P1 in
27b60 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72 65  dex entry is gre
27b70 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65  ater than the ke
27b80 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20  y value.** then 
27b90 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68  jump to P2.  Oth
27ba0 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
27bb0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
27bc0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
27bd0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54  /* Opcode: IdxLT
27be0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
27bf0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
27c00 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
27c10 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
27c20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
27c30 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
27c40 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
27c50 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
27c60 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ts the PRIMARY K
27c70 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f  EY or ROWID.  Co
27c80 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76  mpare this key v
27c90 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20  alue against.** 
27ca0 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 50  the index that P
27cb0 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
27cc0 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
27cd0 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59  ring the PRIMARY
27ce0 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44   KEY or.** ROWID
27cf0 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78   on the P1 index
27d00 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
27d10 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
27d20 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b   less than the k
27d30 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
27d40 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68  mp to P2..** Oth
27d50 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
27d60 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
27d70 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
27d80 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 45  /* Opcode: IdxLE
27d90 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
27da0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
27db0 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
27dc0 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
27dd0 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
27de0 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
27df0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
27e00 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
27e10 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ts the PRIMARY K
27e20 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f  EY or ROWID.  Co
27e30 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76  mpare this key v
27e40 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20  alue against.** 
27e50 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 50  the index that P
27e60 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
27e70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
27e80 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59  ring the PRIMARY
27e90 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44   KEY or.** ROWID
27ea0 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78   on the P1 index
27eb0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
27ec0 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
27ed0 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
27ee0 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
27ef0 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a 2a  alue then jump.*
27f00 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69  * to P2. Otherwi
27f10 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
27f20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
27f30 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
27f40 20 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20 20 20   OP_IdxLE:      
27f50 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
27f60 61 73 65 20 4f 50 5f 49 64 78 47 54 3a 20 20 20  ase OP_IdxGT:   
27f70 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
27f80 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a  /.case OP_IdxLT:
27f90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
27fa0 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  p */.case OP_Idx
27fb0 47 45 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a 20  GE:  {       /* 
27fc0 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
27fd0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20  rsor *pC;.  int 
27fe0 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  res;.  UnpackedR
27ff0 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65  ecord r;..  asse
28000 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
28010 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
28020 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
28030 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
28040 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
28050 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
28060 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a  C->isOrdered );.
28070 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
28080 75 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73  ursor!=0);.  ass
28090 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
280a0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
280b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
280c0 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31  =0 || pOp->p5==1
280d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
280e0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
280f0 54 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49  T32 );.  r.pKeyI
28100 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
28110 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d  fo;.  r.nField =
28120 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b   (u16)pOp->p4.i;
28130 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
28140 64 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20  de<OP_IdxLT ){. 
28150 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
28160 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45  opcode==OP_IdxLE
28170 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
28180 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
28190 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
281a0 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  -1;.  }else{.   
281b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
281c0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c  code==OP_IdxGE |
281d0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
281e0 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72  P_IdxLT );.    r
281f0 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  .default_rc = 0;
28200 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20  .  }.  r.aMem = 
28210 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
28220 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
28230 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66  BUG.  { int i; f
28240 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
28250 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
28260 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
28270 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
28280 64 69 66 0a 20 20 72 65 73 20 3d 20 30 3b 20 20  dif.  res = 0;  
28290 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
282a0 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c  Only used to sil
282b0 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20  ence a warning. 
282c0 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
282d0 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61  3VdbeIdxKeyCompa
282e0 72 65 28 64 62 2c 20 70 43 2c 20 26 72 2c 20 26  re(db, pC, &r, &
282f0 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20  res);.  assert( 
28300 28 4f 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f  (OP_IdxLE&1)==(O
28310 50 5f 49 64 78 4c 54 26 31 29 20 26 26 20 28 4f  P_IdxLT&1) && (O
28320 50 5f 49 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f  P_IdxGE&1)==(OP_
28330 49 64 78 47 54 26 31 29 20 29 3b 0a 20 20 69 66  IdxGT&1) );.  if
28340 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31  ( (pOp->opcode&1
28350 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20  )==(OP_IdxLT&1) 
28360 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
28370 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
28380 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  dxLE || pOp->opc
28390 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b  ode==OP_IdxLT );
283a0 0a 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b  .    res = -res;
283b0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
283c0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
283d0 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70  e==OP_IdxGE || p
283e0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
283f0 64 78 47 54 20 29 3b 0a 20 20 20 20 72 65 73 2b  dxGT );.    res+
28400 2b 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61  +;.  }.  VdbeBra
28410 6e 63 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32  nchTaken(res>0,2
28420 29 3b 0a 20 20 69 66 28 20 72 65 73 3e 30 20 29  );.  if( res>0 )
28430 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
28440 70 32 20 2d 20 31 20 3b 0a 20 20 7d 0a 20 20 62  p2 - 1 ;.  }.  b
28450 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
28460 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50  de: Destroy P1 P
28470 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44  2 P3 * *.**.** D
28480 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20  elete an entire 
28490 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
284a0 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
284b0 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65 20 64  ot page in the d
284c0 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20  atabase.** file 
284d0 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a  is given by P1..
284e0 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20  **.** The table 
284f0 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20  being destroyed 
28500 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  is in the main d
28510 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
28520 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33  P3==0.  If.** P3
28530 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62  ==1 then the tab
28540 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69  le to be clear i
28550 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61  s in the auxilia
28560 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
28570 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64  .** that is used
28580 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73   to store tables
28590 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52   create using CR
285a0 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
285b0 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41  ABLE..**.** If A
285c0 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61  UTOVACUUM is ena
285d0 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73 20  bled then it is 
285e0 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e  possible that an
285f0 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a  other root page.
28600 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65  ** might be move
28610 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79  d into the newly
28620 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61   deleted root pa
28630 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ge in order to k
28640 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20  eep all.** root 
28650 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73  pages contiguous
28660 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
28670 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  g of the databas
28680 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a  e.  The former.*
28690 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72  * value of the r
286a0 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f  oot page that mo
286b0 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20  ved - its value 
286c0 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20  before the move 
286d0 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73  occurred -.** is
286e0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
286f0 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20 70  ter P2.  If no p
28700 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74  age .** movement
28710 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28 62   was required (b
28720 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65  ecause the table
28730 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77   being dropped w
28740 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74  as already .** t
28750 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74  he last one in t
28760 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68 65  he database) the
28770 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72  n a zero is stor
28780 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
28790 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43  2..** If AUTOVAC
287a0 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20  UUM is disabled 
287b0 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73  then a zero is s
287c0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
287d0 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  r P2..**.** See 
287e0 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63  also: Clear.*/.c
287f0 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20  ase OP_Destroy: 
28800 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72  {     /* out2-pr
28810 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
28820 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20  t iMoved;.  int 
28830 69 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  iDb;..  assert( 
28840 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
28850 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
28860 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66  = MEM_Null;.  if
28870 28 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 20  ( db->nVdbeRead 
28880 3e 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2b  > db->nVDestroy+
28890 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  1 ){.    rc = SQ
288a0 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20  LITE_LOCKED;.   
288b0 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20   p->errorAction 
288c0 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65  = OE_Abort;.  }e
288d0 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70  lse{.    iDb = p
288e0 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65  Op->p3;.    asse
288f0 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
28900 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62  ->btreeMask, iDb
28910 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76 65 64 20  ) );.    iMoved 
28920 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
28930 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f 20 73 69  ded.  Only to si
28940 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e  lence a warning.
28950 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   */.    rc = sql
28960 69 74 65 33 42 74 72 65 65 44 72 6f 70 54 61 62  ite3BtreeDropTab
28970 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  le(db->aDb[iDb].
28980 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69  pBt, pOp->p1, &i
28990 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74  Moved);.    pOut
289a0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
289b0 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  t;.    pOut->u.i
289c0 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64   = iMoved;.#ifnd
289d0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
289e0 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66  UTOVACUUM.    if
289f0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
28a00 26 26 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a  && iMoved!=0 ){.
28a10 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f        sqlite3Roo
28a20 74 50 61 67 65 4d 6f 76 65 64 28 64 62 2c 20 69  tPageMoved(db, i
28a30 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d  Db, iMoved, pOp-
28a40 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41  >p1);.      /* A
28a50 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70  ll OP_Destroy op
28a60 65 72 61 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f  erations occur o
28a70 6e 20 74 68 65 20 73 61 6d 65 20 62 74 72 65 65  n the same btree
28a80 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
28a90 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  ( resetSchemaOnF
28aa0 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74  ault==0 || reset
28ab0 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69  SchemaOnFault==i
28ac0 44 62 2b 31 20 29 3b 0a 20 20 20 20 20 20 72 65  Db+1 );.      re
28ad0 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
28ae0 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a   = iDb+1;.    }.
28af0 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65  #endif.  }.  bre
28b00 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
28b10 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20 50 33  : Clear P1 P2 P3
28b20 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c  .**.** Delete al
28b30 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68  l contents of th
28b40 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
28b50 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20   or index whose 
28b60 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20  root page.** in 
28b70 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
28b80 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31  e is given by P1
28b90 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44  .  But, unlike D
28ba0 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a  estroy, do not.*
28bb0 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62  * remove the tab
28bc0 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d  le or index from
28bd0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
28be0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61  le..**.** The ta
28bf0 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20  ble being clear 
28c00 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  is in the main d
28c10 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
28c20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32  P2==0.  If.** P2
28c30 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62  ==1 then the tab
28c40 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69  le to be clear i
28c50 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61  s in the auxilia
28c60 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
28c70 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64  .** that is used
28c80 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73   to store tables
28c90 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52   create using CR
28ca0 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
28cb0 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ABLE..**.** If t
28cc0 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e  he P3 value is n
28cd0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  on-zero, then th
28ce0 65 20 74 61 62 6c 65 20 72 65 66 65 72 72 65 64  e table referred
28cf0 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a   to must be an.*
28d00 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28  * intkey table (
28d10 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f  an SQL table, no
28d20 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20  t an index). In 
28d30 74 68 69 73 20 63 61 73 65 20 74 68 65 20 72 6f  this case the ro
28d40 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75  w change .** cou
28d50 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  nt is incremente
28d60 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20  d by the number 
28d70 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74  of rows in the t
28d80 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
28d90 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73  ed. .** If P3 is
28da0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65   greater than ze
28db0 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  ro, then the val
28dc0 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  ue stored in reg
28dd0 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61  ister P3 is.** a
28de0 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  lso incremented 
28df0 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  by the number of
28e00 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62   rows in the tab
28e10 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64  le being cleared
28e20 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
28e30 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73  : Destroy.*/.cas
28e40 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20  e OP_Clear: {.  
28e50 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20  int nChange;. . 
28e60 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20   nChange = 0;.  
28e70 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
28e80 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  nly==0 );.  asse
28e90 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
28ea0 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
28eb0 2d 3e 70 32 29 20 29 3b 0a 20 20 72 63 20 3d 20  ->p2) );.  rc = 
28ec0 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61  sqlite3BtreeClea
28ed0 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64 62  rTable(.      db
28ee0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70  ->aDb[pOp->p2].p
28ef0 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f  Bt, pOp->p1, (pO
28f00 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67 65  p->p3 ? &nChange
28f10 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66 28   : 0).  );.  if(
28f20 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20   pOp->p3 ){.    
28f30 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43  p->nChange += nC
28f40 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20 70  hange;.    if( p
28f50 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20  Op->p3>0 ){.    
28f60 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
28f70 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
28f80 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d 65  p3]) );.      me
28f90 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
28fa0 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  , &aMem[pOp->p3]
28fb0 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f  );.      aMem[pO
28fc0 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43  p->p3].u.i += nC
28fd0 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d  hange;.    }.  }
28fe0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
28ff0 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 53 6f 72  Opcode: ResetSor
29000 74 65 72 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ter P1 * * * *.*
29010 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20  *.** Delete all 
29020 63 6f 6e 74 65 6e 74 73 20 66 72 6f 6d 20 74 68  contents from th
29030 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  e ephemeral tabl
29040 65 20 6f 72 20 73 6f 72 74 65 72 0a 2a 2a 20 74  e or sorter.** t
29050 68 61 74 20 69 73 20 6f 70 65 6e 20 6f 6e 20 63  hat is open on c
29060 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ursor P1..**.** 
29070 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 6e 6c 79  This opcode only
29080 20 77 6f 72 6b 73 20 66 6f 72 20 63 75 72 73 6f   works for curso
29090 72 73 20 75 73 65 64 20 66 6f 72 20 73 6f 72 74  rs used for sort
290a0 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f 70 65 6e 65  ing and.** opene
290b0 64 20 77 69 74 68 20 4f 50 5f 4f 70 65 6e 45 70  d with OP_OpenEp
290c0 68 65 6d 65 72 61 6c 20 6f 72 20 4f 50 5f 53 6f  hemeral or OP_So
290d0 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f 0a 63 61 73  rterOpen..*/.cas
290e0 65 20 4f 50 5f 52 65 73 65 74 53 6f 72 74 65 72  e OP_ResetSorter
290f0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
29100 20 2a 70 43 3b 0a 20 0a 20 20 61 73 73 65 72 74   *pC;. .  assert
29110 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
29120 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
29130 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
29140 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
29150 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
29160 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 53 6f  );.  if( pC->pSo
29170 72 74 65 72 20 29 7b 0a 20 20 20 20 73 71 6c 69  rter ){.    sqli
29180 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 73  te3VdbeSorterRes
29190 65 74 28 64 62 2c 20 70 43 2d 3e 70 53 6f 72 74  et(db, pC->pSort
291a0 65 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  er);.  }else{.  
291b0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
291c0 45 70 68 65 6d 65 72 61 6c 20 29 3b 0a 20 20 20  Ephemeral );.   
291d0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
291e0 65 65 43 6c 65 61 72 54 61 62 6c 65 4f 66 43 75  eeClearTableOfCu
291f0 72 73 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f 72  rsor(pC->pCursor
29200 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
29210 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72  }../* Opcode: Cr
29220 65 61 74 65 54 61 62 6c 65 20 50 31 20 50 32 20  eateTable P1 P2 
29230 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
29240 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44  s: r[P2]=root iD
29250 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63  b=P1.**.** Alloc
29260 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20  ate a new table 
29270 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
29280 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
29290 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  =0 or in the.** 
292a0 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
292b0 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31  se file if P1==1
292c0 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68   or in an attach
292d0 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a  ed database if.*
292e0 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74  * P1>1.  Write t
292f0 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
29300 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74  ber of the new t
29310 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  able into.** reg
29320 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54  ister P2.**.** T
29330 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
29340 74 77 65 65 6e 20 61 20 74 61 62 6c 65 20 61 6e  tween a table an
29350 64 20 61 6e 20 69 6e 64 65 78 20 69 73 20 74 68  d an index is th
29360 69 73 3a 20 20 41 20 74 61 62 6c 65 20 6d 75 73  is:  A table mus
29370 74 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d 62 79  t.** have a 4-by
29380 74 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 61  te integer key a
29390 6e 64 20 63 61 6e 20 68 61 76 65 20 61 72 62 69  nd can have arbi
293a0 74 72 61 72 79 20 64 61 74 61 2e 20 20 41 6e 20  trary data.  An 
293b0 69 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20  index.** has an 
293c0 61 72 62 69 74 72 61 72 79 20 6b 65 79 20 62 75  arbitrary key bu
293d0 74 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a  t no data..**.**
293e0 20 53 65 65 20 61 6c 73 6f 3a 20 43 72 65 61 74   See also: Creat
293f0 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63  eIndex.*/./* Opc
29400 6f 64 65 3a 20 43 72 65 61 74 65 49 6e 64 65 78  ode: CreateIndex
29410 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
29420 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
29430 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a  root iDb=P1.**.*
29440 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77  * Allocate a new
29450 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20 6d 61   index in the ma
29460 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
29470 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20   if P1==0 or in 
29480 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79  the.** auxiliary
29490 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
294a0 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e  f P1==1 or in an
294b0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
294c0 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20  se if.** P1>1.  
294d0 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70  Write the root p
294e0 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  age number of th
294f0 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f  e new table into
29500 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e  .** register P2.
29510 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d  .**.** See docum
29520 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43  entation on OP_C
29530 72 65 61 74 65 54 61 62 6c 65 20 66 6f 72 20 61  reateTable for a
29540 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
29550 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
29560 50 5f 43 72 65 61 74 65 49 6e 64 65 78 3a 20 20  P_CreateIndex:  
29570 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
29580 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
29590 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61  case OP_CreateTa
295a0 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ble: {          
295b0 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
295c0 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f  se */.  int pgno
295d0 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20  ;.  int flags;. 
295e0 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 67 6e   Db *pDb;..  pgn
295f0 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  o = 0;.  assert(
29600 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
29610 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
29620 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
29630 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
29640 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b  ask, pOp->p1) );
29650 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
29660 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70  adOnly==0 );.  p
29670 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f  Db = &db->aDb[pO
29680 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
29690 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b  ( pDb->pBt!=0 );
296a0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
296b0 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62  de==OP_CreateTab
296c0 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61  le ){.    /* fla
296d0 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45  gs = BTREE_INTKE
296e0 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20  Y; */.    flags 
296f0 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a  = BTREE_INTKEY;.
29700 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61    }else{.    fla
29710 67 73 20 3d 20 42 54 52 45 45 5f 42 4c 4f 42 4b  gs = BTREE_BLOBK
29720 45 59 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  EY;.  }.  rc = s
29730 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
29740 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c  eTable(pDb->pBt,
29750 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a   &pgno, flags);.
29760 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67    pOut->u.i = pg
29770 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  no;.  break;.}..
29780 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65  /* Opcode: Parse
29790 53 63 68 65 6d 61 20 50 31 20 2a 20 2a 20 50 34  Schema P1 * * P4
297a0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e   *.**.** Read an
297b0 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72  d parse all entr
297c0 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c  ies from the SQL
297d0 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65  ITE_MASTER table
297e0 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 0a   of database P1.
297f0 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74 68  ** that match th
29800 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 50  e WHERE clause P
29810 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  4. .**.** This o
29820 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
29830 65 20 70 61 72 73 65 72 20 74 6f 20 63 72 65 61  e parser to crea
29840 74 65 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c  te a new virtual
29850 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65   machine,.** the
29860 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76  n runs the new v
29870 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20  irtual machine. 
29880 20 49 74 20 69 73 20 74 68 75 73 20 61 20 72 65   It is thus a re
29890 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e  -entrant opcode.
298a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73  .*/.case OP_Pars
298b0 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74  eSchema: {.  int
298c0 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68   iDb;.  const ch
298d0 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63  ar *zMaster;.  c
298e0 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69  har *zSql;.  Ini
298f0 74 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a  tData initData;.
29900 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65 70 61 72  .  /* Any prepar
29910 65 64 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  ed statement tha
29920 74 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f  t invokes this o
29930 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20  pcode will hold 
29940 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20  mutexes.  ** on 
29950 65 76 65 72 79 20 62 74 72 65 65 2e 20 20 54 68  every btree.  Th
29960 69 73 20 69 73 20 61 20 70 72 65 72 65 71 75 69  is is a prerequi
29970 73 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e  site for invokin
29980 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 49  g .  ** sqlite3I
29990 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20  nitCallback().. 
299a0 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
299b0 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69 44  E_DEBUG.  for(iD
299c0 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62  b=0; iDb<db->nDb
299d0 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73  ; iDb++){.    as
299e0 73 65 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20  sert( iDb==1 || 
299f0 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64  sqlite3BtreeHold
29a00 73 4d 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69  sMutex(db->aDb[i
29a10 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a  Db].pBt) );.  }.
29a20 23 65 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d 20  #endif..  iDb = 
29a30 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72  pOp->p1;.  asser
29a40 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
29a50 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
29a60 73 65 72 74 28 20 44 62 48 61 73 50 72 6f 70 65  sert( DbHasPrope
29a70 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f  rty(db, iDb, DB_
29a80 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b  SchemaLoaded) );
29a90 0a 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 62 65  .  /* Used to be
29aa0 20 61 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a   a conditional *
29ab0 2f 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 20  / {.    zMaster 
29ac0 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 69  = SCHEMA_TABLE(i
29ad0 44 62 29 3b 0a 20 20 20 20 69 6e 69 74 44 61 74  Db);.    initDat
29ae0 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69  a.db = db;.    i
29af0 6e 69 74 44 61 74 61 2e 69 44 62 20 3d 20 70 4f  nitData.iDb = pO
29b00 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74 44  p->p1;.    initD
29b10 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26  ata.pzErrMsg = &
29b20 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20  p->zErrMsg;.    
29b30 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50  zSql = sqlite3MP
29b40 72 69 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 20  rintf(db,.      
29b50 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72   "SELECT name, r
29b60 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20 46 52 4f  ootpage, sql FRO
29b70 4d 20 27 25 71 27 2e 25 73 20 57 48 45 52 45 20  M '%q'.%s WHERE 
29b80 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69  %s ORDER BY rowi
29b90 64 22 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e 61  d",.       db->a
29ba0 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a  Db[iDb].zName, z
29bb0 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e  Master, pOp->p4.
29bc0 7a 29 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c  z);.    if( zSql
29bd0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ==0 ){.      rc 
29be0 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
29bf0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
29c00 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69   assert( db->ini
29c10 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20  t.busy==0 );.   
29c20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79     db->init.busy
29c30 20 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74   = 1;.      init
29c40 44 61 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45  Data.rc = SQLITE
29c50 5f 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72  _OK;.      asser
29c60 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  t( !db->mallocFa
29c70 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63  iled );.      rc
29c80 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
29c90 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65  db, zSql, sqlite
29ca0 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26  3InitCallback, &
29cb0 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20  initData, 0);.  
29cc0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
29cd0 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69  TE_OK ) rc = ini
29ce0 74 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20  tData.rc;.      
29cf0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
29d00 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64  , zSql);.      d
29d10 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30  b->init.busy = 0
29d20 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
29d30 28 20 72 63 20 29 20 73 71 6c 69 74 65 33 52 65  ( rc ) sqlite3Re
29d40 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43  setAllSchemasOfC
29d50 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20  onnection(db);. 
29d60 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
29d70 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74  NOMEM ){.    got
29d80 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
29d90 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20  break;  .}..#if 
29da0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
29db0 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a  OMIT_ANALYZE)./*
29dc0 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61   Opcode: LoadAna
29dd0 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a  lysis P1 * * * *
29de0 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20  .**.** Read the 
29df0 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
29e00 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  le for database 
29e10 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20  P1 and load the 
29e20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68  content.** of th
29e30 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68  at table into th
29e40 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78  e internal index
29e50 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68   hash table.  Th
29e60 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a  is will cause.**
29e70 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f   the analysis to
29e80 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 70 72   be used when pr
29e90 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73  eparing all subs
29ea0 65 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a  equent queries..
29eb0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41  */.case OP_LoadA
29ec0 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73  nalysis: {.  ass
29ed0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
29ee0 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
29ef0 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  Db );.  rc = sql
29f00 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64  ite3AnalysisLoad
29f10 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  (db, pOp->p1);. 
29f20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64   break;  .}.#end
29f30 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
29f40 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59  QLITE_OMIT_ANALY
29f50 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ZE) */../* Opcod
29f60 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20  e: DropTable P1 
29f70 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
29f80 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
29f90 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
29fa0 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
29fb0 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
29fc0 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  the table named 
29fd0 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
29fe0 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
29ff0 65 64 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  ed after a table
2a000 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66  .** is dropped f
2a010 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20  rom disk (using 
2a020 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f  the Destroy opco
2a030 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  de) in order to 
2a040 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74  keep .** the int
2a050 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
2a060 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
2a070 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
2a080 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
2a090 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
2a0a0 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20  P_DropTable: {. 
2a0b0 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
2a0c0 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c  dDeleteTable(db,
2a0d0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2a0e0 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
2a0f0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
2a100 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34  pIndex P1 * * P4
2a110 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
2a120 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
2a130 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
2a140 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
2a150 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e  scribe.** the in
2a160 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  dex named P4 in 
2a170 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
2a180 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
2a190 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69  er an index.** i
2a1a0 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64  s dropped from d
2a1b0 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44  isk (using the D
2a1c0 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 0a 2a  estroy opcode).*
2a1d0 2a 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  * in order to ke
2a1e0 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ep the internal 
2a1f0 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
2a200 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
2a210 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
2a220 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
2a230 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
2a240 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74  Index: {.  sqlit
2a250 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
2a260 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e  eIndex(db, pOp->
2a270 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
2a280 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2a290 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67  pcode: DropTrigg
2a2a0 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  er P1 * * P4 *.*
2a2b0 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
2a2c0 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
2a2d0 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
2a2e0 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
2a2f0 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65  be.** the trigge
2a300 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  r named P4 in da
2a310 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
2a320 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
2a330 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73   a trigger.** is
2a340 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69   dropped from di
2a350 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65  sk (using the De
2a360 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e  stroy opcode) in
2a370 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 0a   order to keep .
2a380 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ** the internal 
2a390 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
2a3a0 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
2a3b0 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
2a3c0 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
2a3d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
2a3e0 54 72 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c  Trigger: {.  sql
2a3f0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
2a400 65 74 65 54 72 69 67 67 65 72 28 64 62 2c 20 70  eteTrigger(db, p
2a410 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
2a420 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
2a430 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2a440 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
2a450 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  HECK./* Opcode: 
2a460 49 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20 50  IntegrityCk P1 P
2a470 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  2 P3 * P5.**.** 
2a480 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f  Do an analysis o
2a490 66 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20  f the currently 
2a4a0 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20  open database.  
2a4b0 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69  Store in.** regi
2a4c0 73 74 65 72 20 50 31 20 74 68 65 20 74 65 78 74  ster P1 the text
2a4d0 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73   of an error mes
2a4e0 73 61 67 65 20 64 65 73 63 72 69 62 69 6e 67 20  sage describing 
2a4f0 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a  any problems..**
2a500 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20   If no problems 
2a510 61 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65  are found, store
2a520 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73   a NULL in regis
2a530 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P1..**.** Th
2a540 65 20 72 65 67 69 73 74 65 72 20 50 33 20 63 6f  e register P3 co
2a550 6e 74 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d  ntains the maxim
2a560 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c  um number of all
2a570 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20  owed errors..** 
2a580 41 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20  At most reg(P3) 
2a590 65 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72  errors will be r
2a5a0 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f  eported..** In o
2a5b0 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
2a5c0 61 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61  analysis stops a
2a5d0 73 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31  s soon as reg(P1
2a5e0 29 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a  ) errors are .**
2a5f0 20 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20   seen.  Reg(P1) 
2a600 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20  is updated with 
2a610 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72  the number of er
2a620 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a  rors remaining..
2a630 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70  **.** The root p
2a640 61 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61  age numbers of a
2a650 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65  ll tables in the
2a660 20 64 61 74 61 62 61 73 65 20 61 72 65 20 69 6e   database are in
2a670 74 65 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20  teger.** stored 
2a680 69 6e 20 72 65 67 28 50 31 29 2c 20 72 65 67 28  in reg(P1), reg(
2a690 50 31 2b 31 29 2c 20 72 65 67 28 50 31 2b 32 29  P1+1), reg(P1+2)
2a6a0 2c 20 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61 72  , ....  There ar
2a6b0 65 20 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74  e P2 tables.** t
2a6c0 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  otal..**.** If P
2a6d0 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  5 is not zero, t
2a6e0 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65  he check is done
2a6f0 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   on the auxiliar
2a700 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69  y database.** fi
2a710 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e  le, not the main
2a720 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
2a730 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2a740 65 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70  e is used to imp
2a750 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67  lement the integ
2a760 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d  rity_check pragm
2a770 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  a..*/.case OP_In
2a780 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69  tegrityCk: {.  i
2a790 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f  nt nRoot;      /
2a7a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  * Number of tabl
2a7b0 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e  es to check.  (N
2a7c0 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61  umber of root pa
2a7d0 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a  ges.) */.  int *
2a7e0 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72  aRoot;     /* Ar
2a7f0 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20  ray of rootpage 
2a800 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c  numbers for tabl
2a810 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64  es to be checked
2a820 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20   */.  int j;    
2a830 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
2a840 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  unter */.  int n
2a850 45 72 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  Err;       /* Nu
2a860 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72  mber of errors r
2a870 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61  eported */.  cha
2a880 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20  r *z;        /* 
2a890 54 65 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f  Text of the erro
2a8a0 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65  r report */.  Me
2a8b0 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a  m *pnErr;     /*
2a8c0 20 52 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e   Register keepin
2a8d0 67 20 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72  g track of error
2a8e0 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a  s remaining */..
2a8f0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
2a900 52 65 61 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f  Reader );.  nRoo
2a910 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  t = pOp->p2;.  a
2a920 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29  ssert( nRoot>0 )
2a930 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69  ;.  aRoot = sqli
2a940 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64  te3DbMallocRaw(d
2a950 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28  b, sizeof(int)*(
2a960 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66  nRoot+1) );.  if
2a970 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74  ( aRoot==0 ) got
2a980 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65  o no_mem;.  asse
2a990 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
2a9a0 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
2a9b0 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
2a9c0 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26 61 4d 65  ;.  pnErr = &aMe
2a9d0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
2a9e0 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c  sert( (pnErr->fl
2a9f0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
2aa00 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  0 );.  assert( (
2aa10 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 28  pnErr->flags & (
2aa20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62  MEM_Str|MEM_Blob
2aa30 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20  ))==0 );.  pIn1 
2aa40 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2aa50 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e  ;.  for(j=0; j<n
2aa60 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20  Root; j++){.    
2aa70 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74 29  aRoot[j] = (int)
2aa80 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
2aa90 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20  lue(&pIn1[j]);. 
2aaa0 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20   }.  aRoot[j] = 
2aab0 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
2aac0 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p5<db->nDb );.
2aad0 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
2aae0 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
2aaf0 6b 2c 20 70 4f 70 2d 3e 70 35 29 20 29 3b 0a 20  k, pOp->p5) );. 
2ab00 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   z = sqlite3Btre
2ab10 65 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28  eIntegrityCheck(
2ab20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d  db->aDb[pOp->p5]
2ab30 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f  .pBt, aRoot, nRo
2ab40 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ot,.            
2ab50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab60 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d       (int)pnErr-
2ab70 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20  >u.i, &nErr);.  
2ab80 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
2ab90 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72  , aRoot);.  pnEr
2aba0 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a  r->u.i -= nErr;.
2abb0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2abc0 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20  SetNull(pIn1);. 
2abd0 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a   if( nErr==0 ){.
2abe0 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30      assert( z==0
2abf0 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   );.  }else if( 
2ac00 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  z==0 ){.    goto
2ac10 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65   no_mem;.  }else
2ac20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2ac30 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c  eMemSetStr(pIn1,
2ac40 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55   z, -1, SQLITE_U
2ac50 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65  TF8, sqlite3_fre
2ac60 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45  e);.  }.  UPDATE
2ac70 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49  _MAX_BLOBSIZE(pI
2ac80 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
2ac90 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
2aca0 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
2acb0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
2acc0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2acd0 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
2ace0 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  CK */../* Opcode
2acf0 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31 20 50  : RowSetAdd P1 P
2ad00 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2ad10 73 69 73 3a 20 20 72 6f 77 73 65 74 28 50 31 29  sis:  rowset(P1)
2ad20 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73  =r[P2].**.** Ins
2ad30 65 72 74 20 74 68 65 20 69 6e 74 65 67 65 72 20  ert the integer 
2ad40 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65  value held by re
2ad50 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61  gister P2 into a
2ad60 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a   boolean index.*
2ad70 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74  * held in regist
2ad80 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  er P1..**.** An 
2ad90 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20  assertion fails 
2ada0 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20  if P2 is not an 
2adb0 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65  integer..*/.case
2adc0 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b   OP_RowSetAdd: {
2add0 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69         /* in1, i
2ade0 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n2 */.  pIn1 = &
2adf0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2ae00 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
2ae10 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
2ae20 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  ( (pIn2->flags &
2ae30 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
2ae40 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
2ae50 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
2ae60 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
2ae70 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53  e3VdbeMemSetRowS
2ae80 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66  et(pIn1);.    if
2ae90 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
2aea0 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
2aeb0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
2aec0 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77 53   }.  sqlite3RowS
2aed0 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75  etInsert(pIn1->u
2aee0 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d 3e  .pRowSet, pIn2->
2aef0 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  u.i);.  break;.}
2af00 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
2af10 53 65 74 52 65 61 64 20 50 31 20 50 32 20 50 33  SetRead P1 P2 P3
2af20 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2af30 3a 20 20 72 5b 50 33 5d 3d 72 6f 77 73 65 74 28  :  r[P3]=rowset(
2af40 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63  P1).**.** Extrac
2af50 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76  t the smallest v
2af60 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61  alue from boolea
2af70 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64 20 70  n index P1 and p
2af80 75 74 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  ut that value in
2af90 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  to.** register P
2afa0 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65  3.  Or, if boole
2afb0 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73 20 69  an index P1 is i
2afc0 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20  nitially empty, 
2afd0 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68  leave P3.** unch
2afe0 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74  anged and jump t
2aff0 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
2b000 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
2b010 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20  SetRead: {      
2b020 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f   /* jump, in1, o
2b030 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c  ut3 */.  i64 val
2b040 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
2b050 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
2b060 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
2b070 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
2b080 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f  .   || sqlite3Ro
2b090 77 53 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75  wSetNext(pIn1->u
2b0a0 2e 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d  .pRowSet, &val)=
2b0b0 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54  =0.  ){.    /* T
2b0c0 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78  he boolean index
2b0d0 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20   is empty */.   
2b0e0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2b0f0 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20  etNull(pIn1);.  
2b100 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
2b110 20 31 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e   1;.    VdbeBran
2b120 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20  chTaken(1,2);.  
2b130 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20  }else{.    /* A 
2b140 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64  value was pulled
2b150 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20   from the index 
2b160 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
2b170 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
2b180 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61  Mem[pOp->p3], va
2b190 6c 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  l);.    VdbeBran
2b1a0 63 68 54 61 6b 65 6e 28 30 2c 32 29 3b 0a 20 20  chTaken(0,2);.  
2b1b0 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66  }.  goto check_f
2b1c0 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a  or_interrupt;.}.
2b1d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
2b1e0 65 74 54 65 73 74 20 50 31 20 50 32 20 50 33 20  etTest P1 P2 P3 
2b1f0 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P4.** Synopsis: 
2b200 69 66 20 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73  if r[P3] in rows
2b210 65 74 28 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a  et(P1) goto P2.*
2b220 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33  *.** Register P3
2b230 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 68   is assumed to h
2b240 6f 6c 64 20 61 20 36 34 2d 62 69 74 20 69 6e 74  old a 64-bit int
2b250 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20 72  eger value. If r
2b260 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f  egister P1.** co
2b270 6e 74 61 69 6e 73 20 61 20 52 6f 77 53 65 74 20  ntains a RowSet 
2b280 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 61 74 20  object and that 
2b290 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 63 6f  RowSet object co
2b2a0 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61  ntains.** the va
2b2b0 6c 75 65 20 68 65 6c 64 20 69 6e 20 50 33 2c 20  lue held in P3, 
2b2c0 6a 75 6d 70 20 74 6f 20 72 65 67 69 73 74 65 72  jump to register
2b2d0 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
2b2e0 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e  insert the.** in
2b2f0 74 65 67 65 72 20 69 6e 20 50 33 20 69 6e 74 6f  teger in P3 into
2b300 20 74 68 65 20 52 6f 77 53 65 74 20 61 6e 64 20   the RowSet and 
2b310 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74  continue on to t
2b320 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64  he.** next opcod
2b330 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77  e..**.** The Row
2b340 53 65 74 20 6f 62 6a 65 63 74 20 69 73 20 6f 70  Set object is op
2b350 74 69 6d 69 7a 65 64 20 66 6f 72 20 74 68 65 20  timized for the 
2b360 63 61 73 65 20 77 68 65 72 65 20 73 75 63 63 65  case where succe
2b370 73 73 69 76 65 20 73 65 74 73 0a 2a 2a 20 6f 66  ssive sets.** of
2b380 20 69 6e 74 65 67 65 72 73 2c 20 77 68 65 72 65   integers, where
2b390 20 65 61 63 68 20 73 65 74 20 63 6f 6e 74 61 69   each set contai
2b3a0 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61 74 65 73  ns no duplicates
2b3b0 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a 20 6f 66  . Each set.** of
2b3c0 20 76 61 6c 75 65 73 20 69 73 20 69 64 65 6e 74   values is ident
2b3d0 69 66 69 65 64 20 62 79 20 61 20 75 6e 69 71 75  ified by a uniqu
2b3e0 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20  e P4 value. The 
2b3f0 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73  first set.** mus
2b400 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68  t have P4==0, th
2b410 65 20 66 69 6e 61 6c 20 73 65 74 20 50 34 3d 2d  e final set P4=-
2b420 31 2e 20 20 50 34 20 6d 75 73 74 20 62 65 20 65  1.  P4 must be e
2b430 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e  ither -1 or.** n
2b440 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20 46 6f  on-negative.  Fo
2b450 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76  r non-negative v
2b460 61 6c 75 65 73 20 6f 66 20 50 34 20 6f 6e 6c 79  alues of P4 only
2b470 20 74 68 65 20 6c 6f 77 65 72 20 34 0a 2a 2a 20   the lower 4.** 
2b480 62 69 74 73 20 61 72 65 20 73 69 67 6e 69 66 69  bits are signifi
2b490 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  cant..**.** This
2b4a0 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61   allows optimiza
2b4b0 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e 20  tions: (a) when 
2b4c0 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20 6e  P4==0 there is n
2b4d0 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a 2a  o need to test.*
2b4e0 2a 20 74 68 65 20 72 6f 77 73 65 74 20 6f 62 6a  * the rowset obj
2b4f0 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20 69  ect for P3, as i
2b500 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20  t is guaranteed 
2b510 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69  not to contain i
2b520 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20 50  t,.** (b) when P
2b530 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20 6e  4==-1 there is n
2b540 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72 74  o need to insert
2b550 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20 69   the value, as i
2b560 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20  t will.** never 
2b570 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20 61  be tested for, a
2b580 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20 76 61  nd (c) when a va
2b590 6c 75 65 20 74 68 61 74 20 69 73 20 70 61 72 74  lue that is part
2b5a0 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a 20   of set X is.** 
2b5b0 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65 20  inserted, there 
2b5c0 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65  is no need to se
2b5d0 61 72 63 68 20 74 6f 20 73 65 65 20 69 66 20 74  arch to see if t
2b5e0 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77 61  he same value wa
2b5f0 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20  s.** previously 
2b600 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74  inserted as part
2b610 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79 20   of set X (only 
2b620 69 66 20 69 74 20 77 61 73 20 70 72 65 76 69 6f  if it was previo
2b630 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64  usly.** inserted
2b640 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d 65   as part of some
2b650 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a   other set)..*/.
2b660 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54 65  case OP_RowSetTe
2b670 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  st: {           
2b680 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
2b690 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20  p, in1, in3 */. 
2b6a0 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e 74   int iSet;.  int
2b6b0 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31   exists;..  pIn1
2b6c0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2b6d0 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  ];.  pIn3 = &aMe
2b6e0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53  m[pOp->p3];.  iS
2b6f0 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  et = pOp->p4.i;.
2b700 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
2b710 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
2b720 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20  ..  /* If there 
2b730 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65  is anything othe
2b740 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74 20  r than a rowset 
2b750 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79  object in memory
2b760 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64   cell P1,.  ** d
2b770 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e 64  elete it now and
2b780 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20 77   initialize P1 w
2b790 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f 77  ith an empty row
2b7a0 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28  set.  */.  if( (
2b7b0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
2b7c0 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a  M_RowSet)==0 ){.
2b7d0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2b7e0 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31  emSetRowSet(pIn1
2b7f0 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31  );.    if( (pIn1
2b800 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
2b810 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20  wSet)==0 ) goto 
2b820 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61  no_mem;.  }..  a
2b830 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
2b840 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
2b850 20 20 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d    assert( iSet==
2b860 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b  -1 || iSet>=0 );
2b870 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20  .  if( iSet ){. 
2b880 20 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69     exists = sqli
2b890 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 70 49  te3RowSetTest(pI
2b8a0 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 69  n1->u.pRowSet, i
2b8b0 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b  Set, pIn3->u.i);
2b8c0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2b8d0 61 6b 65 6e 28 65 78 69 73 74 73 21 3d 30 2c 32  aken(exists!=0,2
2b8e0 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73 74  );.    if( exist
2b8f0 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  s ){.      pc = 
2b900 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
2b910 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
2b920 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d    }.  if( iSet>=
2b930 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
2b940 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e  RowSetInsert(pIn
2b950 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49  1->u.pRowSet, pI
2b960 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20  n3->u.i);.  }.  
2b970 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64  break;.}...#ifnd
2b980 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
2b990 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64  RIGGER../* Opcod
2b9a0 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32  e: Program P1 P2
2b9b0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
2b9c0 45 78 65 63 75 74 65 20 74 68 65 20 74 72 69 67  Execute the trig
2b9d0 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73  ger program pass
2b9e0 65 64 20 61 73 20 50 34 20 28 74 79 70 65 20 50  ed as P4 (type P
2b9f0 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a  4_SUBPROGRAM). .
2ba00 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e  **.** P1 contain
2ba10 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  s the address of
2ba20 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
2ba30 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
2ba40 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20  he first memory 
2ba50 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61  .** cell in an a
2ba60 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75  rray of values u
2ba70 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73  sed as arguments
2ba80 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67   to the sub-prog
2ba90 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74  ram. P2 .** cont
2baa0 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
2bab0 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74   to jump to if t
2bac0 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74  he sub-program t
2bad0 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20  hrows an IGNORE 
2bae0 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73  .** exception us
2baf0 69 6e 67 20 74 68 65 20 52 41 49 53 45 28 29 20  ing the RAISE() 
2bb00 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74  function. Regist
2bb10 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  er P3 contains t
2bb20 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f  he address .** o
2bb30 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  f a memory cell 
2bb40 69 6e 20 74 68 69 73 20 28 74 68 65 20 70 61 72  in this (the par
2bb50 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73 20  ent) VM that is 
2bb60 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65  used to allocate
2bb70 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20   the .** memory 
2bb80 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
2bb90 73 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74  sub-vdbe at runt
2bba0 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  ime..**.** P4 is
2bbb0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
2bbc0 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20  e VM containing 
2bbd0 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
2bbe0 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ram..**.** If P5
2bbf0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
2bc00 65 6e 20 72 65 63 75 72 73 69 76 65 20 70 72 6f  en recursive pro
2bc10 67 72 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20  gram invocation 
2bc20 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63  is enabled..*/.c
2bc30 61 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20  ase OP_Program: 
2bc40 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
2bc50 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20   */.  int nMem; 
2bc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2bc70 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   Number of memor
2bc80 79 20 72 65 67 69 73 74 65 72 73 20 66 6f 72 20  y registers for 
2bc90 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20  sub-program */. 
2bca0 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20   int nByte;     
2bcb0 20 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65           /* Byte
2bcc0 73 20 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61  s of runtime spa
2bcd0 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
2bce0 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20  sub-program */. 
2bcf0 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20   Mem *pRt;      
2bd00 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
2bd10 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65  ster to allocate
2bd20 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a   runtime space *
2bd30 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
2bd40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
2bd50 73 65 64 20 74 6f 20 69 74 65 72 61 74 65 20 74  sed to iterate t
2bd60 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65  hrough memory ce
2bd70 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45  lls */.  Mem *pE
2bd80 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nd;             
2bd90 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20   /* Last memory 
2bda0 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61  cell in new arra
2bdb0 79 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  y */.  VdbeFrame
2bdc0 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f   *pFrame;      /
2bdd0 2a 20 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65  * New vdbe frame
2bde0 20 74 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a   to execute in *
2bdf0 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a  /.  SubProgram *
2be00 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53  pProgram;   /* S
2be10 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78  ub-program to ex
2be20 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20  ecute */.  void 
2be30 2a 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *t;             
2be40 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e     /* Token iden
2be50 74 69 66 79 69 6e 67 20 74 72 69 67 67 65 72 20  tifying trigger 
2be60 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d  */..  pProgram =
2be70 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61   pOp->p4.pProgra
2be80 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d  m;.  pRt = &aMem
2be90 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
2bea0 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
2beb0 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20  Op>0 );.  .  /* 
2bec0 49 66 20 74 68 65 20 70 35 20 66 6c 61 67 20 69  If the p5 flag i
2bed0 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65  s clear, then re
2bee0 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69  cursive invocati
2bef0 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 20 69  on of triggers i
2bf00 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64  s .  ** disabled
2bf10 20 66 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63   for backwards c
2bf20 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 28 70 35  ompatibility (p5
2bf30 20 69 73 20 73 65 74 20 69 66 20 74 68 69 73 20   is set if this 
2bf40 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a  sub-program.  **
2bf50 20 69 73 20 72 65 61 6c 6c 79 20 61 20 74 72 69   is really a tri
2bf60 67 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65  gger, not a fore
2bf70 69 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20  ign key action, 
2bf80 61 6e 64 20 74 68 65 20 66 6c 61 67 20 73 65 74  and the flag set
2bf90 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65  .  ** and cleare
2bfa0 64 20 62 79 20 74 68 65 20 22 50 52 41 47 4d 41  d by the "PRAGMA
2bfb0 20 72 65 63 75 72 73 69 76 65 5f 74 72 69 67 67   recursive_trigg
2bfc0 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20  ers" command is 
2bfd0 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20  clear)..  ** .  
2bfe0 2a 2a 20 49 74 20 69 73 20 72 65 63 75 72 73 69  ** It is recursi
2bff0 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ve invocation of
2c000 20 74 72 69 67 67 65 72 73 2c 20 61 74 20 74 68   triggers, at th
2c010 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61  e SQL level, tha
2c020 74 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62  t is .  ** disab
2c030 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73  led. In some cas
2c040 65 73 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67  es a single trig
2c050 67 65 72 20 6d 61 79 20 67 65 6e 65 72 61 74 65  ger may generate
2c060 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a   more than one .
2c070 20 20 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d 20    ** SubProgram 
2c080 28 69 66 20 74 68 65 20 74 72 69 67 67 65 72 20  (if the trigger 
2c090 6d 61 79 20 62 65 20 65 78 65 63 75 74 65 64 20  may be executed 
2c0a0 77 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f  with more than o
2c0b0 6e 65 20 64 69 66 66 65 72 65 6e 74 20 0a 20 20  ne different .  
2c0c0 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61  ** ON CONFLICT a
2c0d0 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75 62 50 72  lgorithm). SubPr
2c0e0 6f 67 72 61 6d 20 73 74 72 75 63 74 75 72 65 73  ogram structures
2c0f0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
2c100 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74   a.  ** single t
2c110 72 69 67 67 65 72 20 61 6c 6c 20 68 61 76 65 20  rigger all have 
2c120 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66  the same value f
2c130 6f 72 20 74 68 65 20 53 75 62 50 72 6f 67 72 61  or the SubProgra
2c140 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61  m.token .  ** va
2c150 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66  riable.  */.  if
2c160 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20  ( pOp->p5 ){.   
2c170 20 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74   t = pProgram->t
2c180 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46  oken;.    for(pF
2c190 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20  rame=p->pFrame; 
2c1a0 70 46 72 61 6d 65 20 26 26 20 70 46 72 61 6d 65  pFrame && pFrame
2c1b0 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61  ->token!=t; pFra
2c1c0 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
2c1d0 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 70 46 72  nt);.    if( pFr
2c1e0 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d  ame ) break;.  }
2c1f0 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d  ..  if( p->nFram
2c200 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  e>=db->aLimit[SQ
2c210 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47  LITE_LIMIT_TRIGG
2c220 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20 20  ER_DEPTH] ){.   
2c230 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
2c240 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53  OR;.    sqlite3S
2c250 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2c260 72 4d 73 67 2c 20 64 62 2c 20 22 74 6f 6f 20 6d  rMsg, db, "too m
2c270 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20 74 72  any levels of tr
2c280 69 67 67 65 72 20 72 65 63 75 72 73 69 6f 6e 22  igger recursion"
2c290 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
2c2a0 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72  }..  /* Register
2c2b0 20 70 52 74 20 69 73 20 75 73 65 64 20 74 6f 20   pRt is used to 
2c2c0 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72 79  store the memory
2c2d0 20 72 65 71 75 69 72 65 64 20 74 6f 20 73 61 76   required to sav
2c2e0 65 20 74 68 65 20 73 74 61 74 65 0a 20 20 2a 2a  e the state.  **
2c2f0 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
2c300 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68 65  program, and the
2c310 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64   memory required
2c320 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f 20 65   at runtime to e
2c330 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68 65 20  xecute.  ** the 
2c340 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
2c350 20 49 66 20 74 68 69 73 20 74 72 69 67 67 65 72   If this trigger
2c360 20 68 61 73 20 62 65 65 6e 20 66 69 72 65 64 20   has been fired 
2c370 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70 52 74  before, then pRt
2c380 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65 61 64   .  ** is alread
2c390 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68  y allocated. Oth
2c3a0 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73 74 20  erwise, it must 
2c3b0 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20  be initialized. 
2c3c0 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74 2d 3e   */.  if( (pRt->
2c3d0 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29  flags&MEM_Frame)
2c3e0 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75  ==0 ){.    /* Su
2c3f0 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73  bProgram.nMem is
2c400 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
2c410 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c  er of memory cel
2c420 6c 73 20 75 73 65 64 20 62 79 20 74 68 65 20 0a  ls used by the .
2c430 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73      ** program s
2c440 74 6f 72 65 64 20 69 6e 20 53 75 62 50 72 6f 67  tored in SubProg
2c450 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c  ram.aOp. As well
2c460 20 61 73 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d   as these, one m
2c470 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c  emory.    ** cel
2c480 6c 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  l is required fo
2c490 72 20 65 61 63 68 20 63 75 72 73 6f 72 20 75 73  r each cursor us
2c4a0 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61  ed by the progra
2c4b0 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20  m. Set local.   
2c4c0 20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d 65   ** variable nMe
2c4d0 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c 20 56 64  m (and later, Vd
2c4e0 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65  beFrame.nChildMe
2c4f0 6d 29 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65  m) to this value
2c500 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65  ..    */.    nMe
2c510 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d  m = pProgram->nM
2c520 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  em + pProgram->n
2c530 43 73 72 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d  Csr;.    nByte =
2c540 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
2c550 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20 20 20  dbeFrame)).     
2c560 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20           + nMem 
2c570 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20  * sizeof(Mem).  
2c580 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 70 50              + pP
2c590 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73  rogram->nCsr * s
2c5a0 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
2c5b0 20 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20 20   *).            
2c5c0 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f    + pProgram->nO
2c5d0 6e 63 65 20 2a 20 73 69 7a 65 6f 66 28 75 38 29  nce * sizeof(u8)
2c5e0 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73  ;.    pFrame = s
2c5f0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
2c600 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20  ro(db, nByte);. 
2c610 20 20 20 69 66 28 20 21 70 46 72 61 6d 65 20 29     if( !pFrame )
2c620 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  {.      goto no_
2c630 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  mem;.    }.    s
2c640 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
2c650 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70  ease(pRt);.    p
2c660 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  Rt->flags = MEM_
2c670 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e  Frame;.    pRt->
2c680 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d  u.pFrame = pFram
2c690 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  e;..    pFrame->
2c6a0 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d  v = p;.    pFram
2c6b0 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e  e->nChildMem = n
2c6c0 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Mem;.    pFrame-
2c6d0 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72  >nChildCsr = pPr
2c6e0 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20  ogram->nCsr;.   
2c6f0 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 70 63   pFrame->pc = pc
2c700 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d  ;.    pFrame->aM
2c710 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20  em = p->aMem;.  
2c720 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d    pFrame->nMem =
2c730 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46   p->nMem;.    pF
2c740 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d  rame->apCsr = p-
2c750 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61  >apCsr;.    pFra
2c760 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d  me->nCursor = p-
2c770 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46  >nCursor;.    pF
2c780 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61  rame->aOp = p->a
2c790 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  Op;.    pFrame->
2c7a0 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20  nOp = p->nOp;.  
2c7b0 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20    pFrame->token 
2c7c0 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65  = pProgram->toke
2c7d0 6e 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  n;.    pFrame->a
2c7e0 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 61 4f  OnceFlag = p->aO
2c7f0 6e 63 65 46 6c 61 67 3b 0a 20 20 20 20 70 46 72  nceFlag;.    pFr
2c800 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d  ame->nOnceFlag =
2c810 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a 23   p->nOnceFlag;.#
2c820 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2c830 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41  BLE_STMT_SCANSTA
2c840 54 55 53 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  TUS.    pFrame->
2c850 61 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78  anExec = p->anEx
2c860 65 63 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  ec;.#endif..    
2c870 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d  pEnd = &VdbeFram
2c880 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72  eMem(pFrame)[pFr
2c890 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b  ame->nChildMem];
2c8a0 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64  .    for(pMem=Vd
2c8b0 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
2c8c0 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20  e); pMem!=pEnd; 
2c8d0 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70  pMem++){.      p
2c8e0 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Mem->flags = MEM
2c8f0 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20 20  _Undefined;.    
2c900 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b    pMem->db = db;
2c910 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
2c920 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 52 74      pFrame = pRt
2c930 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20  ->u.pFrame;.    
2c940 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d  assert( pProgram
2c950 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d  ->nMem+pProgram-
2c960 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e  >nCsr==pFrame->n
2c970 43 68 69 6c 64 4d 65 6d 20 29 3b 0a 20 20 20 20  ChildMem );.    
2c980 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d  assert( pProgram
2c990 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e  ->nCsr==pFrame->
2c9a0 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a 20 20 20  nChildCsr );.   
2c9b0 20 61 73 73 65 72 74 28 20 70 63 3d 3d 70 46 72   assert( pc==pFr
2c9c0 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a  ame->pc );.  }..
2c9d0 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20    p->nFrame++;. 
2c9e0 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
2c9f0 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
2ca00 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69  pFrame->lastRowi
2ca10 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20  d = lastRowid;. 
2ca20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65   pFrame->nChange
2ca30 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20   = p->nChange;. 
2ca40 20 70 46 72 61 6d 65 2d 3e 6e 44 62 43 68 61 6e   pFrame->nDbChan
2ca50 67 65 20 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68 61  ge = p->db->nCha
2ca60 6e 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67  nge;.  p->nChang
2ca70 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61  e = 0;.  p->pFra
2ca80 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70  me = pFrame;.  p
2ca90 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20  ->aMem = aMem = 
2caa0 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46  &VdbeFrameMem(pF
2cab0 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e  rame)[-1];.  p->
2cac0 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e  nMem = pFrame->n
2cad0 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e  ChildMem;.  p->n
2cae0 43 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46  Cursor = (u16)pF
2caf0 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b  rame->nChildCsr;
2cb00 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56  .  p->apCsr = (V
2cb10 64 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d  dbeCursor **)&aM
2cb20 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20  em[p->nMem+1];. 
2cb30 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20   p->aOp = aOp = 
2cb40 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20  pProgram->aOp;. 
2cb50 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72   p->nOp = pProgr
2cb60 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f  am->nOp;.  p->aO
2cb70 6e 63 65 46 6c 61 67 20 3d 20 28 75 38 20 2a 29  nceFlag = (u8 *)
2cb80 26 70 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e 43 75  &p->apCsr[p->nCu
2cb90 72 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63  rsor];.  p->nOnc
2cba0 65 46 6c 61 67 20 3d 20 70 50 72 6f 67 72 61 6d  eFlag = pProgram
2cbb0 2d 3e 6e 4f 6e 63 65 3b 0a 23 69 66 64 65 66 20  ->nOnce;.#ifdef 
2cbc0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
2cbd0 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20  MT_SCANSTATUS.  
2cbe0 70 2d 3e 61 6e 45 78 65 63 20 3d 20 30 3b 0a 23  p->anExec = 0;.#
2cbf0 65 6e 64 69 66 0a 20 20 70 63 20 3d 20 2d 31 3b  endif.  pc = -1;
2cc00 0a 20 20 6d 65 6d 73 65 74 28 70 2d 3e 61 4f 6e  .  memset(p->aOn
2cc10 63 65 46 6c 61 67 2c 20 30 2c 20 70 2d 3e 6e 4f  ceFlag, 0, p->nO
2cc20 6e 63 65 46 6c 61 67 29 3b 0a 0a 20 20 62 72 65  nceFlag);..  bre
2cc30 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2cc40 3a 20 50 61 72 61 6d 20 50 31 20 50 32 20 2a 20  : Param P1 P2 * 
2cc50 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
2cc60 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65 76  pcode is only ev
2cc70 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 73 75  er present in su
2cc80 62 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65  b-programs calle
2cc90 64 20 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50  d via the .** OP
2cca0 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63  _Program instruc
2ccb0 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c  tion. Copy a val
2ccc0 75 65 20 63 75 72 72 65 6e 74 6c 79 20 73 74 6f  ue currently sto
2ccd0 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20  red in a memory 
2cce0 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65 20  .** cell of the 
2ccf0 63 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74 29  calling (parent)
2cd00 20 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50   frame to cell P
2cd10 32 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74  2 in the current
2cd20 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72   frames .** addr
2cd30 65 73 73 20 73 70 61 63 65 2e 20 54 68 69 73 20  ess space. This 
2cd40 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67  is used by trigg
2cd50 65 72 20 70 72 6f 67 72 61 6d 73 20 74 6f 20 61  er programs to a
2cd60 63 63 65 73 73 20 74 68 65 20 6e 65 77 2e 2a 20  ccess the new.* 
2cd70 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61  .** and old.* va
2cd80 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  lues..**.** The 
2cd90 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 63  address of the c
2cda0 65 6c 6c 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ell in the paren
2cdb0 74 20 66 72 61 6d 65 20 69 73 20 64 65 74 65 72  t frame is deter
2cdc0 6d 69 6e 65 64 20 62 79 20 61 64 64 69 6e 67 0a  mined by adding.
2cdd0 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ** the value of 
2cde0 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
2cdf0 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
2ce00 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
2ce10 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e  to the.** callin
2ce20 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73  g OP_Program ins
2ce30 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
2ce40 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20  e OP_Param: {   
2ce50 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
2ce60 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
2ce70 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
2ce80 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20  e;.  Mem *pIn;. 
2ce90 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72   pFrame = p->pFr
2cea0 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46  ame;.  pIn = &pF
2ceb0 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
2cec0 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70  p1 + pFrame->aOp
2ced0 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d  [pFrame->pc].p1]
2cee0 3b 20 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64  ;   .  sqlite3Vd
2cef0 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
2cf00 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f  (pOut, pIn, MEM_
2cf10 45 70 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b  Ephem);.  break;
2cf20 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69  .}..#endif /* #i
2cf30 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2cf40 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69  T_TRIGGER */..#i
2cf50 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2cf60 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a  T_FOREIGN_KEY./*
2cf70 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74   Opcode: FkCount
2cf80 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  er P1 P2 * * *.*
2cf90 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74  * Synopsis: fkct
2cfa0 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20  r[P1]+=P2.**.** 
2cfb0 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e  Increment a "con
2cfc0 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22  straint counter"
2cfd0 20 62 79 20 50 32 20 28 50 32 20 6d 61 79 20 62   by P2 (P2 may b
2cfe0 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f  e negative or po
2cff0 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50  sitive)..** If P
2d000 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  1 is non-zero, t
2d010 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73  he database cons
2d020 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69  traint counter i
2d030 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a  s incremented .*
2d040 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f 72 65  * (deferred fore
2d050 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
2d060 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c  nts). Otherwise,
2d070 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20   if P1 is zero, 
2d080 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  the .** statemen
2d090 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63  t counter is inc
2d0a0 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69  remented (immedi
2d0b0 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
2d0c0 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f  constraints)..*/
2d0d0 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74  .case OP_FkCount
2d0e0 65 72 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e  er: {.  if( db->
2d0f0 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 44  flags & SQLITE_D
2d100 65 66 65 72 46 4b 73 20 29 7b 0a 20 20 20 20 64  eferFKs ){.    d
2d110 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
2d120 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  ons += pOp->p2;.
2d130 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
2d140 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e  >p1 ){.    db->n
2d150 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20  DeferredCons += 
2d160 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65  pOp->p2;.  }else
2d170 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73  {.    p->nFkCons
2d180 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70  traint += pOp->p
2d190 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
2d1a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b  }../* Opcode: Fk
2d1b0 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a  IfZero P1 P2 * *
2d1c0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2d1d0 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20  if fkctr[P1]==0 
2d1e0 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
2d1f0 69 73 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20  is opcode tests 
2d200 69 66 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79  if a foreign key
2d210 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
2d220 74 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ter is currently
2d230 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c   zero..** If so,
2d240 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
2d250 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69  tion P2. Otherwi
2d260 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  se, fall through
2d270 20 74 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a   to the next .**
2d280 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
2d290 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e  .** If P1 is non
2d2a0 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20  -zero, then the 
2d2b0 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
2d2c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
2d2d0 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72  nstraint-counter
2d2e0 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65  .** is zero (the
2d2f0 20 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73   one that counts
2d300 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
2d310 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29  aint violations)
2d320 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65  . If P1 is.** ze
2d330 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20  ro, the jump is 
2d340 74 61 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61  taken if the sta
2d350 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e  tement constrain
2d360 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72  t-counter is zer
2d370 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20  o.** (immediate 
2d380 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
2d390 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
2d3a0 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  s)..*/.case OP_F
2d3b0 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  kIfZero: {      
2d3c0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
2d3d0 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  if( pOp->p1 ){. 
2d3e0 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
2d3f0 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  en(db->nDeferred
2d400 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e  Cons==0 && db->n
2d410 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d  DeferredImmCons=
2d420 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20  =0, 2);.    if( 
2d430 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
2d440 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66  s==0 && db->nDef
2d450 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20  erredImmCons==0 
2d460 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31  ) pc = pOp->p2-1
2d470 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56  ;.  }else{.    V
2d480 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
2d490 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d  ->nFkConstraint=
2d4a0 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
2d4b0 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32  redImmCons==0, 2
2d4c0 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46  );.    if( p->nF
2d4d0 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26  kConstraint==0 &
2d4e0 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
2d4f0 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d  mmCons==0 ) pc =
2d500 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a   pOp->p2-1;.  }.
2d510 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2d520 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c  f /* #ifndef SQL
2d530 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
2d540 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  _KEY */..#ifndef
2d550 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
2d560 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70  OINCREMENT./* Op
2d570 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20  code: MemMax P1 
2d580 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
2d590 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28  psis: r[P1]=max(
2d5a0 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a  r[P1],r[P2]).**.
2d5b0 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67 69 73  ** P1 is a regis
2d5c0 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20  ter in the root 
2d5d0 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d  frame of this VM
2d5e0 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65   (the root frame
2d5f0 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74   is.** different
2d600 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e   from the curren
2d610 74 20 66 72 61 6d 65 20 69 66 20 74 68 69 73 20  t frame if this 
2d620 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62  instruction is b
2d630 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a  eing executed.**
2d640 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72   within a sub-pr
2d650 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20  ogram). Set the 
2d660 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
2d670 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69  r P1 to the maxi
2d680 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63  mum of .** its c
2d690 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64  urrent value and
2d6a0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
2d6b0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
2d6c0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
2d6d0 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f  n throws an erro
2d6e0 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  r if the memory 
2d6f0 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74  cell is not init
2d700 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65  ially.** an inte
2d710 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ger..*/.case OP_
2d720 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20  MemMax: {       
2d730 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62   /* in2 */.  Vdb
2d740 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a  eFrame *pFrame;.
2d750 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
2d760 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d  ){.    for(pFram
2d770 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72  e=p->pFrame; pFr
2d780 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46  ame->pParent; pF
2d790 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61  rame=pFrame->pPa
2d7a0 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20  rent);.    pIn1 
2d7b0 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
2d7c0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73  pOp->p1];.  }els
2d7d0 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 61  e{.    pIn1 = &a
2d7e0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2d7f0 7d 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  }.  assert( memI
2d800 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
2d810 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2d820 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29  Integerify(pIn1)
2d830 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
2d840 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c  [pOp->p2];.  sql
2d850 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
2d860 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69  erify(pIn2);.  i
2d870 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e  f( pIn1->u.i<pIn
2d880 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e  2->u.i){.    pIn
2d890 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75  1->u.i = pIn2->u
2d8a0 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  .i;.  }.  break;
2d8b0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2d8c0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
2d8d0 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70  REMENT */../* Op
2d8e0 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50  code: IfPos P1 P
2d8f0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2d900 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20  sis: if r[P1]>0 
2d910 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65  goto P2.**.** Re
2d920 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63  gister P1 must c
2d930 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
2d940 72 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  r..** If the val
2d950 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
2d960 31 20 69 73 20 31 20 6f 72 20 67 72 65 61 74 65  1 is 1 or greate
2d970 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 61 6e  r, jump to P2 an
2d980 64 0a 2a 2a 20 61 64 64 20 74 68 65 20 6c 69 74  d.** add the lit
2d990 65 72 61 6c 20 76 61 6c 75 65 20 50 33 20 74 6f  eral value P3 to
2d9a0 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
2d9b0 0a 2a 2a 20 49 66 20 74 68 65 20 69 6e 69 74 69  .** If the initi
2d9c0 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  al value of regi
2d9d0 73 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20  ster P1 is less 
2d9e0 74 68 61 6e 20 31 2c 20 74 68 65 6e 20 74 68 65  than 1, then the
2d9f0 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 75 6e 63  .** value is unc
2da00 68 61 6e 67 65 64 20 61 6e 64 20 63 6f 6e 74 72  hanged and contr
2da10 6f 6c 20 70 61 73 73 65 73 20 74 68 72 6f 75 67  ol passes throug
2da20 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2da30 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
2da40 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20  se OP_IfPos: {  
2da50 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
2da60 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
2da70 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2da80 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
2da90 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
2daa0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2dab0 6e 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20  n( pIn1->u.i>0, 
2dac0 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2);.  if( pIn1->
2dad0 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20 20 70 63  u.i>0 ){.     pc
2dae0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
2daf0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2db00 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 65 67  /* Opcode: IfNeg
2db10 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
2db20 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d   Synopsis: r[P1]
2db30 2b 3d 50 33 2c 20 69 66 20 72 5b 50 31 5d 3c 30  +=P3, if r[P1]<0
2db40 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52   goto P2.**.** R
2db50 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
2db60 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
2db70 65 72 2e 20 20 41 64 64 20 6c 69 74 65 72 61 6c  er.  Add literal
2db80 20 50 33 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P3 to the value
2db90 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   in.** register 
2dba0 50 31 20 74 68 65 6e 20 69 66 20 74 68 65 20 76  P1 then if the v
2dbb0 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
2dbc0 20 50 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e   P1 is less than
2dbd0 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 50   zero, jump to P
2dbe0 32 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  2. .*/.case OP_I
2dbf0 66 4e 65 67 3a 20 7b 20 20 20 20 20 20 20 20 2f  fNeg: {        /
2dc00 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
2dc10 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2dc20 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2dc30 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
2dc40 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 49 6e 31 2d  M_Int );.  pIn1-
2dc50 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 33 3b  >u.i += pOp->p3;
2dc60 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
2dc70 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c 20  en(pIn1->u.i<0, 
2dc80 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2);.  if( pIn1->
2dc90 75 2e 69 3c 30 20 29 7b 0a 20 20 20 20 20 70 63  u.i<0 ){.     pc
2dca0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
2dcb0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2dcc0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74  /* Opcode: IfNot
2dcd0 5a 65 72 6f 20 50 31 20 50 32 20 50 33 20 2a 20  Zero P1 P2 P3 * 
2dce0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
2dcf0 66 20 72 5b 50 31 5d 21 3d 30 20 74 68 65 6e 20  f r[P1]!=0 then 
2dd00 72 5b 50 31 5d 2b 3d 50 33 2c 20 67 6f 74 6f 20  r[P1]+=P3, goto 
2dd10 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P2.**.** Registe
2dd20 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69  r P1 must contai
2dd30 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49  n an integer.  I
2dd40 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  f the content of
2dd50 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 0a   register P1 is.
2dd60 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 6e 6f 6e  ** initially non
2dd70 7a 65 72 6f 2c 20 74 68 65 6e 20 61 64 64 20 50  zero, then add P
2dd80 33 20 74 6f 20 50 31 20 61 6e 64 20 6a 75 6d 70  3 to P1 and jump
2dd90 20 74 6f 20 50 32 2e 20 20 49 66 20 72 65 67 69   to P2.  If regi
2dda0 73 74 65 72 20 50 31 20 69 73 0a 2a 2a 20 69 6e  ster P1 is.** in
2ddb0 69 74 69 61 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65  itially zero, le
2ddc0 61 76 65 20 69 74 20 75 6e 63 68 61 6e 67 65 64  ave it unchanged
2ddd0 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
2dde0 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  h..*/.case OP_If
2ddf0 4e 6f 74 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  NotZero: {      
2de00 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
2de10 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
2de20 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2de30 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
2de40 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64  &MEM_Int );.  Vd
2de50 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49  beBranchTaken(pI
2de60 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20  n1->u.i<0, 2);. 
2de70 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 20 29   if( pIn1->u.i )
2de80 7b 0a 20 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69  {.     pIn1->u.i
2de90 20 2b 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20   += pOp->p3;.   
2dea0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
2deb0 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
2dec0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
2ded0 65 63 72 4a 75 6d 70 5a 65 72 6f 20 50 31 20 50  ecrJumpZero P1 P
2dee0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2def0 73 69 73 3a 20 69 66 20 28 2d 2d 72 5b 50 31 5d  sis: if (--r[P1]
2df00 29 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  )==0 goto P2.**.
2df10 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d  ** Register P1 m
2df20 75 73 74 20 68 6f 6c 64 20 61 6e 20 69 6e 74 65  ust hold an inte
2df30 67 65 72 2e 20 20 44 65 63 72 65 6d 65 6e 74 20  ger.  Decrement 
2df40 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
2df50 69 73 74 65 72 20 50 31 0a 2a 2a 20 74 68 65 6e  ister P1.** then
2df60 20 6a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   jump to P2 if t
2df70 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20  he new value is 
2df80 65 78 61 63 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f  exactly zero..*/
2df90 0a 63 61 73 65 20 4f 50 5f 44 65 63 72 4a 75 6d  .case OP_DecrJum
2dfa0 70 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 2f 2a  pZero: {      /*
2dfb0 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
2dfc0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2dfd0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2dfe0 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
2dff0 5f 49 6e 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e  _Int );.  pIn1->
2e000 75 2e 69 2d 2d 3b 0a 20 20 56 64 62 65 42 72 61  u.i--;.  VdbeBra
2e010 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75  nchTaken(pIn1->u
2e020 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  .i==0, 2);.  if(
2e030 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b   pIn1->u.i==0 ){
2e040 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  .     pc = pOp->
2e050 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
2e060 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
2e070 64 65 3a 20 4a 75 6d 70 5a 65 72 6f 49 6e 63 72  de: JumpZeroIncr
2e080 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2e090 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 28 72 5b  Synopsis: if (r[
2e0a0 50 31 5d 2b 2b 29 3d 3d 30 20 29 20 67 6f 74 6f  P1]++)==0 ) goto
2e0b0 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65   P2.**.** The re
2e0c0 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63  gister P1 must c
2e0d0 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
2e0e0 72 2e 20 20 49 66 20 72 65 67 69 73 74 65 72 20  r.  If register 
2e0f0 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 0a  P1 is initially.
2e100 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ** zero, then ju
2e110 6d 70 20 74 6f 20 50 32 2e 20 20 49 6e 63 72 65  mp to P2.  Incre
2e120 6d 65 6e 74 20 72 65 67 69 73 74 65 72 20 50 31  ment register P1
2e130 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   regardless of w
2e140 68 65 74 68 65 72 20 6f 72 0a 2a 2a 20 6e 6f 74  hether or.** not
2e150 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
2e160 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a  en..*/.case OP_J
2e170 75 6d 70 5a 65 72 6f 49 6e 63 72 3a 20 7b 20 20  umpZeroIncr: {  
2e180 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
2e190 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
2e1a0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2e1b0 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
2e1c0 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
2e1d0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2e1e0 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20  n(pIn1->u.i==0, 
2e1f0 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  2);.  if( (pIn1-
2e200 3e 75 2e 69 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20  >u.i++)==0 ){.  
2e210 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
2e220 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
2e230 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2e240 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20  AggStep * P2 P3 
2e250 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
2e260 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73  s: accum=r[P3] s
2e270 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a  tep(r[P2@P5]).**
2e280 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
2e290 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f  step function fo
2e2a0 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20  r an aggregate. 
2e2b0 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e   The.** function
2e2c0 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74   has P5 argument
2e2d0 73 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69  s.   P4 is a poi
2e2e0 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63  nter to the Func
2e2f0 44 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  Def.** structure
2e300 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20   that specifies 
2e310 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55  the function.  U
2e320 73 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50  se register.** P
2e330 33 20 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c  3 as the accumul
2e340 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ator..**.** The 
2e350 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  P5 arguments are
2e360 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
2e370 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a  ster P2 and its.
2e380 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a  ** successors..*
2e390 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65  /.case OP_AggSte
2e3a0 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20  p: {.  int n;.  
2e3b0 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d  int i;.  Mem *pM
2e3c0 65 6d 3b 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b  em;.  Mem *pRec;
2e3d0 0a 20 20 4d 65 6d 20 74 3b 0a 20 20 73 71 6c 69  .  Mem t;.  sqli
2e3e0 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b  te3_context ctx;
2e3f0 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
2e400 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d   **apVal;..  n =
2e410 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65   pOp->p5;.  asse
2e420 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52  rt( n>=0 );.  pR
2e430 65 63 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ec = &aMem[pOp->
2e440 70 32 5d 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70  p2];.  apVal = p
2e450 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72  ->apArg;.  asser
2e460 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30  t( apVal || n==0
2e470 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   );.  for(i=0; i
2e480 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b 29  <n; i++, pRec++)
2e490 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  {.    assert( me
2e4a0 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29 20 29  mIsValid(pRec) )
2e4b0 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d  ;.    apVal[i] =
2e4c0 20 70 52 65 63 3b 0a 20 20 20 20 6d 65 6d 41 62   pRec;.    memAb
2e4d0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
2e4e0 52 65 63 29 3b 0a 20 20 7d 0a 20 20 63 74 78 2e  Rec);.  }.  ctx.
2e4f0 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e  pFunc = pOp->p4.
2e500 70 46 75 6e 63 3b 0a 20 20 61 73 73 65 72 74 28  pFunc;.  assert(
2e510 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
2e520 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
2e530 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
2e540 20 63 74 78 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d   ctx.pMem = pMem
2e550 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
2e560 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a  ];.  pMem->n++;.
2e570 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2e580 49 6e 69 74 28 26 74 2c 20 64 62 2c 20 4d 45 4d  Init(&t, db, MEM
2e590 5f 4e 75 6c 6c 29 3b 0a 20 20 63 74 78 2e 70 4f  _Null);.  ctx.pO
2e5a0 75 74 20 3d 20 26 74 3b 0a 20 20 63 74 78 2e 69  ut = &t;.  ctx.i
2e5b0 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63 74  sError = 0;.  ct
2e5c0 78 2e 70 56 64 62 65 20 3d 20 70 3b 0a 20 20 63  x.pVdbe = p;.  c
2e5d0 74 78 2e 69 4f 70 20 3d 20 70 63 3b 0a 20 20 63  tx.iOp = pc;.  c
2e5e0 74 78 2e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b  tx.skipFlag = 0;
2e5f0 0a 20 20 28 63 74 78 2e 70 46 75 6e 63 2d 3e 78  .  (ctx.pFunc->x
2e600 53 74 65 70 29 28 26 63 74 78 2c 20 6e 2c 20 61  Step)(&ctx, n, a
2e610 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52  pVal); /* IMP: R
2e620 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a  -24505-23230 */.
2e630 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f    if( ctx.isErro
2e640 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  r ){.    sqlite3
2e650 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2e660 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
2e670 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
2e680 65 78 74 28 26 74 29 29 3b 0a 20 20 20 20 72 63  ext(&t));.    rc
2e690 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a   = ctx.isError;.
2e6a0 20 20 7d 0a 20 20 69 66 28 20 63 74 78 2e 73 6b    }.  if( ctx.sk
2e6b0 69 70 46 6c 61 67 20 29 7b 0a 20 20 20 20 61 73  ipFlag ){.    as
2e6c0 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70  sert( pOp[-1].op
2e6d0 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71  code==OP_CollSeq
2e6e0 20 29 3b 0a 20 20 20 20 69 20 3d 20 70 4f 70 5b   );.    i = pOp[
2e6f0 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 69 66 28 20  -1].p1;.    if( 
2e700 69 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d  i ) sqlite3VdbeM
2e710 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d  emSetInt64(&aMem
2e720 5b 69 5d 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 73  [i], 1);.  }.  s
2e730 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
2e740 65 61 73 65 28 26 74 29 3b 0a 20 20 62 72 65 61  ease(&t);.  brea
2e750 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2e760 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20   AggFinal P1 P2 
2e770 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
2e780 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20  is: accum=r[P1] 
2e790 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  N=P2.**.** Execu
2e7a0 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72  te the finalizer
2e7b0 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e   function for an
2e7c0 20 61 67 67 72 65 67 61 74 65 2e 20 20 50 31 20   aggregate.  P1 
2e7d0 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79  is.** the memory
2e7e0 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69   location that i
2e7f0 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f  s the accumulato
2e800 72 20 66 6f 72 20 74 68 65 20 61 67 67 72 65 67  r for the aggreg
2e810 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73  ate..**.** P2 is
2e820 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61   the number of a
2e830 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68  rguments that th
2e840 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
2e850 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20  takes and.** P4 
2e860 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
2e870 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20  the FuncDef for 
2e880 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20  this function.  
2e890 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65  The P2.** argume
2e8a0 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62  nt is not used b
2e8b0 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  y this opcode.  
2e8c0 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65  It is only there
2e8d0 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65   to disambiguate
2e8e0 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68  .** functions th
2e8f0 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79  at can take vary
2e900 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61  ing numbers of a
2e910 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a  rguments.  The.*
2e920 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73  * P4 argument is
2e930 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72   only needed for
2e940 20 74 68 65 20 64 65 67 65 6e 65 72 61 74 65 20   the degenerate 
2e950 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68  case where.** th
2e960 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
2e970 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73  was not previous
2e980 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61  ly called..*/.ca
2e990 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20  se OP_AggFinal: 
2e9a0 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20  {.  Mem *pMem;. 
2e9b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2e9c0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28  >0 && pOp->p1<=(
2e9d0 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
2e9e0 6f 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20  or) );.  pMem = 
2e9f0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2ea00 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
2ea10 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e  >flags & ~(MEM_N
2ea20 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30  ull|MEM_Agg))==0
2ea30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
2ea40 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a  e3VdbeMemFinaliz
2ea50 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e  e(pMem, pOp->p4.
2ea60 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63  pFunc);.  if( rc
2ea70 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
2ea80 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2ea90 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
2eaa0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
2eab0 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20  xt(pMem));.  }. 
2eac0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
2ead0 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c  geEncoding(pMem,
2eae0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50   encoding);.  UP
2eaf0 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
2eb00 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73  E(pMem);.  if( s
2eb10 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
2eb20 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20  Big(pMem) ){.   
2eb30 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
2eb40 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23   }.  break;.}..#
2eb50 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2eb60 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65  IT_WAL./* Opcode
2eb70 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20  : Checkpoint P1 
2eb80 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
2eb90 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61 62  Checkpoint datab
2eba0 61 73 65 20 50 31 2e 20 54 68 69 73 20 69 73 20  ase P1. This is 
2ebb0 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69 73  a no-op if P1 is
2ebc0 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 69   not currently i
2ebd0 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50  n.** WAL mode. P
2ebe0 61 72 61 6d 65 74 65 72 20 50 32 20 69 73 20 6f  arameter P2 is o
2ebf0 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45  ne of SQLITE_CHE
2ec00 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c  CKPOINT_PASSIVE,
2ec10 20 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41 52   FULL,.** RESTAR
2ec20 54 2c 20 6f 72 20 54 52 55 4e 43 41 54 45 2e 20  T, or TRUNCATE. 
2ec30 20 57 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e   Write 1 or 0 in
2ec40 74 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68  to mem[P3] if th
2ec50 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74  e checkpoint ret
2ec60 75 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42  urns.** SQLITE_B
2ec70 55 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70  USY or not, resp
2ec80 65 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65  ectively.  Write
2ec90 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
2eca0 61 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57  ages in the.** W
2ecb0 41 4c 20 61 66 74 65 72 20 74 68 65 20 63 68 65  AL after the che
2ecc0 63 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d  ckpoint into mem
2ecd0 5b 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e  [P3+1] and the n
2ece0 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a  umber of pages.*
2ecf0 2a 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61  * in the WAL tha
2ed00 74 20 68 61 76 65 20 62 65 65 6e 20 63 68 65 63  t have been chec
2ed10 6b 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74  kpointed after t
2ed20 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a  he checkpoint.**
2ed30 20 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20   completes into 
2ed40 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65  mem[P3+2].  Howe
2ed50 76 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c  ver on an error,
2ed60 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a   mem[P3+1] and.*
2ed70 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20  * mem[P3+2] are 
2ed80 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d  initialized to -
2ed90 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68  1..*/.case OP_Ch
2eda0 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e  eckpoint: {.  in
2edb0 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
2edc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2edd0 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
2ede0 0a 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20  .  int aRes[3]; 
2edf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee00 20 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f     /* Results */
2ee10 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20  .  Mem *pMem;   
2ee20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee30 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75     /* Write resu
2ee40 6c 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61  lts here */..  a
2ee50 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2ee60 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b  ly==0 );.  aRes[
2ee70 30 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31  0] = 0;.  aRes[1
2ee80 5d 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31  ] = aRes[2] = -1
2ee90 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2eea0 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43  >p2==SQLITE_CHEC
2eeb0 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20  KPOINT_PASSIVE. 
2eec0 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32        || pOp->p2
2eed0 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
2eee0 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20  INT_FULL.       
2eef0 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  || pOp->p2==SQLI
2ef00 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45  TE_CHECKPOINT_RE
2ef10 53 54 41 52 54 0a 20 20 20 20 20 20 20 7c 7c 20  START.       || 
2ef20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
2ef30 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43  CHECKPOINT_TRUNC
2ef40 41 54 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20  ATE.  );.  rc = 
2ef50 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e  sqlite3Checkpoin
2ef60 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  t(db, pOp->p1, p
2ef70 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d  Op->p2, &aRes[1]
2ef80 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69  , &aRes[2]);.  i
2ef90 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
2efa0 53 59 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  SY ){.    rc = S
2efb0 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52  QLITE_OK;.    aR
2efc0 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20  es[0] = 1;.  }. 
2efd0 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d   for(i=0, pMem =
2efe0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
2eff0 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b   i<3; i++, pMem+
2f000 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  +){.    sqlite3V
2f010 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70  dbeMemSetInt64(p
2f020 4d 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b 69  Mem, (i64)aRes[i
2f030 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62 72  ]);.  }    .  br
2f040 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66  eak;.};  .#endif
2f050 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2f060 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20  _OMIT_PRAGMA./* 
2f070 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d  Opcode: JournalM
2f080 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ode P1 P2 P3 * *
2f090 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68  .**.** Change th
2f0a0 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f  e journal mode o
2f0b0 66 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f  f database P1 to
2f0c0 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65 20   P3. P3 must be 
2f0d0 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41  one of the.** PA
2f0e0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2f0f0 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20 63  XXX values. If c
2f100 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e 20  hanging between 
2f110 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c  the various roll
2f120 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64  back.** modes (d
2f130 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65 2c  elete, truncate,
2f140 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61 6e   persist, off an
2f150 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73 20  d memory), this 
2f160 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f  is a simple.** o
2f170 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20  peration. No IO 
2f180 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a  is required..**.
2f190 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20 69  ** If changing i
2f1a0 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57 41  nto or out of WA
2f1b0 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63 65  L mode the proce
2f1c0 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d  dure is more com
2f1d0 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  plicated..**.** 
2f1e0 57 72 69 74 65 20 61 20 73 74 72 69 6e 67 20 63  Write a string c
2f1f0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69  ontaining the fi
2f200 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65  nal journal-mode
2f210 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
2f220 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72  .*/.case OP_Jour
2f230 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a  nalMode: {    /*
2f240 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
2f250 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
2f260 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2f270 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65 20 74        /* Btree t
2f280 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c  o change journal
2f290 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61   mode of */.  Pa
2f2a0 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20 20 20  ger *pPager;    
2f2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2f2c0 20 50 61 67 65 72 20 61 73 73 6f 63 69 61 74 65   Pager associate
2f2d0 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a 20 20  d with pBt */.  
2f2e0 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20 20 20  int eNew;       
2f2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f300 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d  /* New journal m
2f310 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c  ode */.  int eOl
2f320 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
2f330 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
2f340 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  old journal mode
2f350 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
2f360 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63 6f  TE_OMIT_WAL.  co
2f370 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e  nst char *zFilen
2f380 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ame;          /*
2f390 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73   Name of databas
2f3a0 65 20 66 69 6c 65 20 66 6f 72 20 70 50 61 67 65  e file for pPage
2f3b0 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 65  r */.#endif..  e
2f3c0 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  New = pOp->p3;. 
2f3d0 20 61 73 73 65 72 74 28 20 65 4e 65 77 3d 3d 50   assert( eNew==P
2f3e0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2f3f0 5f 44 45 4c 45 54 45 20 0a 20 20 20 20 20 20 20  _DELETE .       
2f400 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
2f410 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43  OURNALMODE_TRUNC
2f420 41 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65  ATE .       || e
2f430 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2f440 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 20 0a  ALMODE_PERSIST .
2f450 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
2f460 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2f470 45 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c 20  E_OFF.       || 
2f480 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2f490 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20  NALMODE_MEMORY. 
2f4a0 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
2f4b0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2f4c0 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65  _WAL.       || e
2f4d0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2f4e0 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20 29  ALMODE_QUERY.  )
2f4f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2f500 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2f510 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
2f520 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2f530 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 70 42 74 20  ly==0 );..  pBt 
2f540 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
2f550 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67 65 72  1].pBt;.  pPager
2f560 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
2f570 61 67 65 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c  ager(pBt);.  eOl
2f580 64 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  d = sqlite3Pager
2f590 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  GetJournalMode(p
2f5a0 50 61 67 65 72 29 3b 0a 20 20 69 66 28 20 65 4e  Pager);.  if( eN
2f5b0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2f5c0 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29 20 65 4e  LMODE_QUERY ) eN
2f5d0 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28  ew = eOld;.  if(
2f5e0 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 4f 6b   !sqlite3PagerOk
2f5f0 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d  ToChangeJournalM
2f600 6f 64 65 28 70 50 61 67 65 72 29 20 29 20 65 4e  ode(pPager) ) eN
2f610 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e  ew = eOld;..#ifn
2f620 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2f630 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20  WAL.  zFilename 
2f640 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69  = sqlite3PagerFi
2f650 6c 65 6e 61 6d 65 28 70 50 61 67 65 72 2c 20 31  lename(pPager, 1
2f660 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  );..  /* Do not 
2f670 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69 74 69  allow a transiti
2f680 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  on to journal_mo
2f690 64 65 3d 57 41 4c 20 66 6f 72 20 61 20 64 61 74  de=WAL for a dat
2f6a0 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65  abase.  ** in te
2f6b0 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20  mporary storage 
2f6c0 6f 72 20 69 66 20 74 68 65 20 56 46 53 20 64 6f  or if the VFS do
2f6d0 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 73  es not support s
2f6e0 68 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20  hared memory .  
2f6f0 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50  */.  if( eNew==P
2f700 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2f710 5f 57 41 4c 0a 20 20 20 26 26 20 28 73 71 6c 69  _WAL.   && (sqli
2f720 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c  te3Strlen30(zFil
2f730 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20 20 20  ename)==0       
2f740 20 20 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65      /* Temp file
2f750 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21 73   */.       || !s
2f760 71 6c 69 74 65 33 50 61 67 65 72 57 61 6c 53 75  qlite3PagerWalSu
2f770 70 70 6f 72 74 65 64 28 70 50 61 67 65 72 29 29  pported(pPager))
2f780 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d     /* No shared-
2f790 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72 74 20 2a  memory support *
2f7a0 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65 77 20  /.  ){.    eNew 
2f7b0 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69  = eOld;.  }..  i
2f7c0 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a  f( (eNew!=eOld).
2f7d0 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47     && (eOld==PAG
2f7e0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2f7f0 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45  AL || eNew==PAGE
2f800 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2f810 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69 66 28 20  L).  ){.    if( 
2f820 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20  !db->autoCommit 
2f830 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64  || db->nVdbeRead
2f840 3e 31 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  >1 ){.      rc =
2f850 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
2f860 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
2f870 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
2f880 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20  g, db, .        
2f890 20 20 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65    "cannot change
2f8a0 20 25 73 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f   %s wal mode fro
2f8b0 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  m within a trans
2f8c0 61 63 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20  action",.       
2f8d0 20 20 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f     (eNew==PAGER_
2f8e0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20  JOURNALMODE_WAL 
2f8f0 3f 20 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20  ? "into" : "out 
2f900 6f 66 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20  of").      );.  
2f910 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
2f920 65 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20 69 66  else{. .      if
2f930 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f  ( eOld==PAGER_JO
2f940 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b  URNALMODE_WAL ){
2f950 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6c  .        /* If l
2f960 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c  eaving WAL mode,
2f970 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20 66   close the log f
2f980 69 6c 65 2e 20 49 66 20 73 75 63 63 65 73 73 66  ile. If successf
2f990 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20 20  ul, the call.   
2f9a0 20 20 20 20 20 2a 2a 20 74 6f 20 50 61 67 65 72       ** to Pager
2f9b0 43 6c 6f 73 65 57 61 6c 28 29 20 63 68 65 63 6b  CloseWal() check
2f9c0 70 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c 65 74  points and delet
2f9d0 65 73 20 74 68 65 20 77 72 69 74 65 2d 61 68 65  es the write-ahe
2f9e0 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20 20  ad-log .        
2f9f0 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c  ** file. An EXCL
2fa00 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73  USIVE lock may s
2fa10 74 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20  till be held on 
2fa20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2fa30 65 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 66  e .        ** af
2fa40 74 65 72 20 61 20 73 75 63 63 65 73 73 66 75 6c  ter a successful
2fa50 20 72 65 74 75 72 6e 2e 20 0a 20 20 20 20 20 20   return. .      
2fa60 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20    */.        rc 
2fa70 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 43 6c  = sqlite3PagerCl
2fa80 6f 73 65 57 61 6c 28 70 50 61 67 65 72 29 3b 0a  oseWal(pPager);.
2fa90 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d          if( rc==
2faa0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
2fab0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
2fac0 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerSetJournalMod
2fad0 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b  e(pPager, eNew);
2fae0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
2faf0 20 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d   }else if( eOld=
2fb00 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2fb10 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20  DE_MEMORY ){.   
2fb20 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74       /* Cannot t
2fb30 72 61 6e 73 69 74 69 6f 6e 20 64 69 72 65 63 74  ransition direct
2fb40 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74  ly from MEMORY t
2fb50 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65  o WAL.  Use mode
2fb60 20 4f 46 46 0a 20 20 20 20 20 20 20 20 2a 2a 20   OFF.        ** 
2fb70 61 73 20 61 6e 20 69 6e 74 65 72 6d 65 64 69 61  as an intermedia
2fb80 74 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71  te */.        sq
2fb90 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75  lite3PagerSetJou
2fba0 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c  rnalMode(pPager,
2fbb0 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
2fbc0 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d  DE_OFF);.      }
2fbd0 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65  .  .      /* Ope
2fbe0 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  n a transaction 
2fbf0 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
2fc00 66 69 6c 65 2e 20 52 65 67 61 72 64 6c 65 73 73  file. Regardless
2fc10 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a   of the journal.
2fc20 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74        ** mode, t
2fc30 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  his transaction 
2fc40 61 6c 77 61 79 73 20 75 73 65 73 20 61 20 72 6f  always uses a ro
2fc50 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a  llback journal..
2fc60 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61        */.      a
2fc70 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
2fc80 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74  reeIsInTrans(pBt
2fc90 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66  )==0 );.      if
2fca0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
2fcb0 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
2fcc0 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 56  sqlite3BtreeSetV
2fcd0 65 72 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65  ersion(pBt, (eNe
2fce0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2fcf0 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31  MODE_WAL ? 2 : 1
2fd00 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ));.      }.    
2fd10 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  }.  }.#endif /* 
2fd20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2fd30 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28  IT_WAL */..  if(
2fd40 20 72 63 20 29 7b 0a 20 20 20 20 65 4e 65 77 20   rc ){.    eNew 
2fd50 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 20 20 65 4e  = eOld;.  }.  eN
2fd60 65 77 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  ew = sqlite3Page
2fd70 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  rSetJournalMode(
2fd80 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a  pPager, eNew);..
2fd90 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
2fda0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 2d  Op->p2];.  pOut-
2fdb0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72  >flags = MEM_Str
2fdc0 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  |MEM_Static|MEM_
2fdd0 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20  Term;.  pOut->z 
2fde0 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65  = (char *)sqlite
2fdf0 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
2fe00 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e  (eNew);.  pOut->
2fe10 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  n = sqlite3Strle
2fe20 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20  n30(pOut->z);.  
2fe30 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49  pOut->enc = SQLI
2fe40 54 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69 74  TE_UTF8;.  sqlit
2fe50 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
2fe60 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64  ding(pOut, encod
2fe70 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ing);.  break;.}
2fe80 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
2fe90 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a  TE_OMIT_PRAGMA *
2fea0 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  /..#if !defined(
2feb0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55  SQLITE_OMIT_VACU
2fec0 55 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  UM) && !defined(
2fed0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41  SQLITE_OMIT_ATTA
2fee0 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  CH)./* Opcode: V
2fef0 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a  acuum * * * * *.
2ff00 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65  **.** Vacuum the
2ff10 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
2ff20 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  .  This opcode w
2ff30 69 6c 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20  ill cause other 
2ff40 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69  virtual.** machi
2ff50 6e 65 73 20 74 6f 20 62 65 20 63 72 65 61 74 65  nes to be create
2ff60 64 20 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d  d and run.  It m
2ff70 61 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64  ay not be called
2ff80 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20   from within.** 
2ff90 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a  a transaction..*
2ffa0 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d  /.case OP_Vacuum
2ffb0 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 2d  : {.  assert( p-
2ffc0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2ffd0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75    rc = sqlite3Ru
2ffe0 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72  nVacuum(&p->zErr
2fff0 4d 73 67 2c 20 64 62 29 3b 0a 20 20 62 72 65 61  Msg, db);.  brea
30000 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  k;.}.#endif..#if
30010 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
30020 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
30030 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63  )./* Opcode: Inc
30040 72 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20  rVacuum P1 P2 * 
30050 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72  * *.**.** Perfor
30060 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20  m a single step 
30070 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74  of the increment
30080 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64  al vacuum proced
30090 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31  ure on.** the P1
300a0 20 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68   database. If th
300b0 65 20 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e  e vacuum has fin
300c0 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69  ished, jump to i
300d0 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32  nstruction.** P2
300e0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c  . Otherwise, fal
300f0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
30100 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
30110 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  n..*/.case OP_In
30120 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20  crVacuum: {     
30130 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
30140 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61  Btree *pBt;..  a
30150 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
30160 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
30170 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
30180 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
30190 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
301a0 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  p1) );.  assert(
301b0 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
301c0 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  );.  pBt = db->a
301d0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
301e0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
301f0 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28 70  treeIncrVacuum(p
30200 42 74 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  Bt);.  VdbeBranc
30210 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54  hTaken(rc==SQLIT
30220 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20 69 66 28  E_DONE,2);.  if(
30230 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45   rc==SQLITE_DONE
30240 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
30250 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 72 63  ->p2 - 1;.    rc
30260 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
30270 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
30280 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
30290 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20  Expire P1 * * * 
302a0 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72  *.**.** Cause pr
302b0 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d  ecompiled statem
302c0 65 6e 74 73 20 74 6f 20 65 78 70 69 72 65 2e 20  ents to expire. 
302d0 20 57 68 65 6e 20 61 6e 20 65 78 70 69 72 65 64   When an expired
302e0 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 69 73   statement.** is
302f0 20 65 78 65 63 75 74 65 64 20 75 73 69 6e 67 20   executed using 
30300 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69  sqlite3_step() i
30310 74 20 77 69 6c 6c 20 65 69 74 68 65 72 20 61 75  t will either au
30320 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 72  tomatically.** r
30330 65 70 72 65 70 61 72 65 20 69 74 73 65 6c 66 20  eprepare itself 
30340 28 69 66 20 69 74 20 77 61 73 20 6f 72 69 67 69  (if it was origi
30350 6e 61 6c 6c 79 20 63 72 65 61 74 65 64 20 75 73  nally created us
30360 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ing sqlite3_prep
30370 61 72 65 5f 76 32 28 29 29 0a 2a 2a 20 6f 72 20  are_v2()).** or 
30380 69 74 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74  it will fail wit
30390 68 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 2e  h SQLITE_SCHEMA.
303a0 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69 73  .** .** If P1 is
303b0 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c   0, then all SQL
303c0 20 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63 6f   statements beco
303d0 6d 65 20 65 78 70 69 72 65 64 2e 20 49 66 20 50  me expired. If P
303e0 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a  1 is non-zero,.*
303f0 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20  * then only the 
30400 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74  currently execut
30410 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ing statement is
30420 20 65 78 70 69 72 65 64 2e 0a 2a 2f 0a 63 61 73   expired..*/.cas
30430 65 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20  e OP_Expire: {. 
30440 20 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b   if( !pOp->p1 ){
30450 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69  .    sqlite3Expi
30460 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
30470 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73  ents(db);.  }els
30480 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  e{.    p->expire
30490 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  d = 1;.  }.  bre
304a0 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  ak;.}..#ifndef S
304b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
304c0 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64  D_CACHE./* Opcod
304d0 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20  e: TableLock P1 
304e0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
304f0 6e 6f 70 73 69 73 3a 20 69 44 62 3d 50 31 20 72  nopsis: iDb=P1 r
30500 6f 6f 74 3d 50 32 20 77 72 69 74 65 3d 50 33 0a  oot=P2 write=P3.
30510 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c  **.** Obtain a l
30520 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75  ock on a particu
30530 6c 61 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20  lar table. This 
30540 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f  instruction is o
30550 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a  nly used when.**
30560 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68   the shared-cach
30570 65 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61  e feature is ena
30580 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20  bled. .**.** P1 
30590 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
305a0 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 20  the database in 
305b0 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66  sqlite3.aDb[] of
305c0 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
305d0 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f   on which the lo
305e0 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 2e 20  ck is acquired. 
305f0 20 41 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f   A readlock is o
30600 62 74 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30  btained if P3==0
30610 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c   or.** a write l
30620 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a  ock if P3==1..**
30630 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20  .** P2 contains 
30640 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66  the root-page of
30650 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f   the table to lo
30660 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e  ck..**.** P4 con
30670 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20  tains a pointer 
30680 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  to the name of t
30690 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c  he table being l
306a0 6f 63 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f  ocked. This is o
306b0 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67  nly.** used to g
306c0 65 6e 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72  enerate an error
306d0 20 6d 65 73 73 61 67 65 20 69 66 20 74 68 65 20   message if the 
306e0 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f  lock cannot be o
306f0 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65  btained..*/.case
30700 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b   OP_TableLock: {
30710 0a 20 20 75 38 20 69 73 57 72 69 74 65 4c 6f 63  .  u8 isWriteLoc
30720 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b  k = (u8)pOp->p3;
30730 0a 20 20 69 66 28 20 69 73 57 72 69 74 65 4c 6f  .  if( isWriteLo
30740 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c  ck || 0==(db->fl
30750 61 67 73 26 53 51 4c 49 54 45 5f 52 65 61 64 55  ags&SQLITE_ReadU
30760 6e 63 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20  ncommitted) ){. 
30770 20 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d     int p1 = pOp-
30780 3e 70 31 3b 20 0a 20 20 20 20 61 73 73 65 72 74  >p1; .    assert
30790 28 20 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62  ( p1>=0 && p1<db
307a0 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73  ->nDb );.    ass
307b0 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
307c0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 31  p->btreeMask, p1
307d0 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
307e0 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20   isWriteLock==0 
307f0 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d  || isWriteLock==
30800 31 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  1 );.    rc = sq
30810 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54 61  lite3BtreeLockTa
30820 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e  ble(db->aDb[p1].
30830 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73  pBt, pOp->p2, is
30840 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20  WriteLock);.    
30850 69 66 28 20 28 72 63 26 30 78 46 46 29 3d 3d 53  if( (rc&0xFF)==S
30860 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a  QLITE_LOCKED ){.
30870 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
30880 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b   *z = pOp->p4.z;
30890 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
308a0 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
308b0 4d 73 67 2c 20 64 62 2c 20 22 64 61 74 61 62 61  Msg, db, "databa
308c0 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b  se table is lock
308d0 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20  ed: %s", z);.   
308e0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
308f0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
30900 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
30910 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ACHE */..#ifndef
30920 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
30930 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
30940 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20  ode: VBegin * * 
30950 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
30960 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65 72  may be a pointer
30970 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 76   to an sqlite3_v
30980 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 20 49  tab structure. I
30990 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a  f so, call the .
309a0 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f 64  ** xBegin method
309b0 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e   for that table.
309c0 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65  .**.** Also, whe
309d0 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20 69  ther or not P4 i
309e0 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68 61  s set, check tha
309f0 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62 65  t this is not be
30a00 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a  ing called from.
30a10 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c 6c  ** within a call
30a20 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75 61  back to a virtua
30a30 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29 20  l table xSync() 
30a40 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69 73  method. If it is
30a50 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63  , the error.** c
30a60 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74 20  ode will be set 
30a70 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  to SQLITE_LOCKED
30a80 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65  ..*/.case OP_VBe
30a90 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20  gin: {.  VTable 
30aa0 2a 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62 20  *pVTab;.  pVTab 
30ab0 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b  = pOp->p4.pVtab;
30ac0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
30ad0 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56 54  tabBegin(db, pVT
30ae0 61 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61 62  ab);.  if( pVTab
30af0 20 29 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d   ) sqlite3VtabIm
30b00 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
30b10 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20 62  Tab->pVtab);.  b
30b20 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
30b30 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
30b40 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
30b50 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30b60 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
30b70 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61  /* Opcode: VCrea
30b80 74 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  te P1 P2 * * *.*
30b90 2a 0a 2a 2a 20 50 32 20 69 73 20 61 20 72 65 67  *.** P2 is a reg
30ba0 69 73 74 65 72 20 74 68 61 74 20 68 6f 6c 64 73  ister that holds
30bb0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76   the name of a v
30bc0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20  irtual table in 
30bd0 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 50 31 2e  database .** P1.
30be0 20 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74   Call the xCreat
30bf0 65 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61  e method for tha
30c00 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  t table..*/.case
30c10 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20   OP_VCreate: {. 
30c20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20   Mem sMem;      
30c30 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69      /* For stori
30c40 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65  ng the record be
30c50 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20  ing decoded */. 
30c60 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
30c70 62 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74  b;  /* Name of t
30c80 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
30c90 20 2a 2f 0a 0a 20 20 6d 65 6d 73 65 74 28 26 73   */..  memset(&s
30ca0 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73  Mem, 0, sizeof(s
30cb0 4d 65 6d 29 29 3b 0a 20 20 73 4d 65 6d 2e 64 62  Mem));.  sMem.db
30cc0 20 3d 20 64 62 3b 0a 20 20 2f 2a 20 42 65 63 61   = db;.  /* Beca
30cd0 75 73 65 20 50 32 20 69 73 20 61 6c 77 61 79 73  use P2 is always
30ce0 20 61 20 73 74 61 74 69 63 20 73 74 72 69 6e 67   a static string
30cf0 2c 20 69 74 20 69 73 20 69 6d 70 6f 73 73 69 62  , it is impossib
30d00 6c 65 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  le for the.  ** 
30d10 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f  sqlite3VdbeMemCo
30d20 70 79 28 29 20 74 6f 20 66 61 69 6c 20 2a 2f 0a  py() to fail */.
30d30 20 20 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b    assert( (aMem[
30d40 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26  pOp->p2].flags &
30d50 20 4d 45 4d 5f 53 74 72 29 21 3d 30 20 29 3b 0a   MEM_Str)!=0 );.
30d60 20 20 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b    assert( (aMem[
30d70 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26  pOp->p2].flags &
30d80 20 4d 45 4d 5f 53 74 61 74 69 63 29 21 3d 30 20   MEM_Static)!=0 
30d90 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
30da0 33 56 64 62 65 4d 65 6d 43 6f 70 79 28 26 73 4d  3VdbeMemCopy(&sM
30db0 65 6d 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  em, &aMem[pOp->p
30dc0 32 5d 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  2]);.  assert( r
30dd0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
30de0 20 20 7a 54 61 62 20 3d 20 28 63 6f 6e 73 74 20    zTab = (const 
30df0 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61  char*)sqlite3_va
30e00 6c 75 65 5f 74 65 78 74 28 26 73 4d 65 6d 29 3b  lue_text(&sMem);
30e10 0a 20 20 61 73 73 65 72 74 28 20 7a 54 61 62 20  .  assert( zTab 
30e20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  || db->mallocFai
30e30 6c 65 64 20 29 3b 0a 20 20 69 66 28 20 7a 54 61  led );.  if( zTa
30e40 62 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  b ){.    rc = sq
30e50 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65  lite3VtabCallCre
30e60 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ate(db, pOp->p1,
30e70 20 7a 54 61 62 2c 20 26 70 2d 3e 7a 45 72 72 4d   zTab, &p->zErrM
30e80 73 67 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  sg);.  }.  sqlit
30e90 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
30ea0 28 26 73 4d 65 6d 29 3b 0a 20 20 62 72 65 61 6b  (&sMem);.  break
30eb0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
30ec0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
30ed0 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
30ee0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
30ef0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
30f00 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20  pcode: VDestroy 
30f10 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
30f20 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65  * P4 is the name
30f30 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
30f40 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ble in database 
30f50 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44  P1.  Call the xD
30f60 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a  estroy method.**
30f70 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a   of that table..
30f80 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74  */.case OP_VDest
30f90 72 6f 79 3a 20 7b 0a 20 20 64 62 2d 3e 6e 56 44  roy: {.  db->nVD
30fa0 65 73 74 72 6f 79 2b 2b 3b 0a 20 20 72 63 20 3d  estroy++;.  rc =
30fb0 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
30fc0 44 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d  Destroy(db, pOp-
30fd0 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
30fe0 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79  .  db->nVDestroy
30ff0 2d 2d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  --;.  break;.}.#
31000 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
31010 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
31020 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
31030 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
31040 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
31050 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50  : VOpen P1 * * P
31060 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
31070 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
31080 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
31090 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
310a0 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
310b0 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f  ** P1 is a curso
310c0 72 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20  r number.  This 
310d0 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20 63  opcode opens a c
310e0 75 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69 72  ursor to the vir
310f0 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e  tual.** table an
31100 64 20 73 74 6f 72 65 73 20 74 68 61 74 20 63 75  d stores that cu
31110 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63  rsor in P1..*/.c
31120 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a  ase OP_VOpen: {.
31130 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
31140 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  ur;.  sqlite3_vt
31150 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62  ab_cursor *pVtab
31160 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65  Cursor;.  sqlite
31170 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
31180 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
31190 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
311a0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
311b0 73 52 65 61 64 65 72 20 29 3b 0a 20 20 70 43 75  sReader );.  pCu
311c0 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 43 75  r = 0;.  pVtabCu
311d0 72 73 6f 72 20 3d 20 30 3b 0a 20 20 70 56 74 61  rsor = 0;.  pVta
311e0 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
311f0 62 2d 3e 70 56 74 61 62 3b 0a 20 20 69 66 28 20  b->pVtab;.  if( 
31200 70 56 74 61 62 3d 3d 30 20 7c 7c 20 4e 45 56 45  pVtab==0 || NEVE
31210 52 28 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  R(pVtab->pModule
31220 3d 3d 30 29 20 29 7b 0a 20 20 20 20 72 63 20 3d  ==0) ){.    rc =
31230 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a   SQLITE_LOCKED;.
31240 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
31250 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
31260 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 72 63 20  ->pModule;.  rc 
31270 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e  = pModule->xOpen
31280 28 70 56 74 61 62 2c 20 26 70 56 74 61 62 43 75  (pVtab, &pVtabCu
31290 72 73 6f 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  rsor);.  sqlite3
312a0 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
312b0 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  (p, pVtab);.  if
312c0 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20  ( SQLITE_OK==rc 
312d0 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61  ){.    /* Initia
312e0 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61  lize sqlite3_vta
312f0 62 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c  b_cursor base cl
31300 61 73 73 20 2a 2f 0a 20 20 20 20 70 56 74 61 62  ass */.    pVtab
31310 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20  Cursor->pVtab = 
31320 70 56 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49  pVtab;..    /* I
31330 6e 69 74 69 61 6c 69 7a 65 20 76 64 62 65 20 63  nitialize vdbe c
31340 75 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a  ursor object */.
31350 20 20 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63      pCur = alloc
31360 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
31370 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b  ->p1, 0, -1, 0);
31380 0a 20 20 20 20 69 66 28 20 70 43 75 72 20 29 7b  .    if( pCur ){
31390 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70 56 74  .      pCur->pVt
313a0 61 62 43 75 72 73 6f 72 20 3d 20 70 56 74 61 62  abCursor = pVtab
313b0 43 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 70 56  Cursor;.      pV
313c0 74 61 62 2d 3e 6e 52 65 66 2b 2b 3b 0a 20 20 20  tab->nRef++;.   
313d0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62   }else{.      db
313e0 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d  ->mallocFailed =
313f0 20 31 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c   1;.      pModul
31400 65 2d 3e 78 43 6c 6f 73 65 28 70 56 74 61 62 43  e->xClose(pVtabC
31410 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  ursor);.    }.  
31420 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
31430 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
31440 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
31450 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
31460 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
31470 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
31480 56 46 69 6c 74 65 72 20 50 31 20 50 32 20 50 33  VFilter P1 P2 P3
31490 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
314a0 73 3a 20 69 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a  s: iplan=r[P3] z
314b0 70 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20  plan='P4'.**.** 
314c0 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f  P1 is a cursor o
314d0 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65  pened using VOpe
314e0 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64 64  n.  P2 is an add
314f0 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
31500 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72  if.** the filter
31510 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 69 73  ed result set is
31520 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34   empty..**.** P4
31530 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20   is either NULL 
31540 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  or a string that
31550 20 77 61 73 20 67 65 6e 65 72 61 74 65 64 20 62   was generated b
31560 79 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78  y the xBestIndex
31570 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  .** method of th
31580 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69  e module.  The i
31590 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
315a0 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 20 69   the P4 string i
315b0 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65  s left.** to the
315c0 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
315d0 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
315e0 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
315f0 73 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  s the xFilter me
31600 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74  thod on the virt
31610 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66  ual table specif
31620 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54  ied.** by P1.  T
31630 68 65 20 69 6e 74 65 67 65 72 20 71 75 65 72 79  he integer query
31640 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20   plan parameter 
31650 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73 74  to xFilter is st
31660 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
31670 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72  .** P3. Register
31680 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65   P3+1 stores the
31690 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 20   argc parameter 
316a0 74 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f 20  to be passed to 
316b0 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d  the.** xFilter m
316c0 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73  ethod. Registers
316d0 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63   P3+2..P3+1+argc
316e0 20 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a   are the argc.**
316f0 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61   additional para
31700 6d 65 74 65 72 73 20 77 68 69 63 68 20 61 72 65  meters which are
31710 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46   passed to.** xF
31720 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20 52  ilter as argv. R
31730 65 67 69 73 74 65 72 20 50 33 2b 32 20 62 65 63  egister P3+2 bec
31740 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65  omes argv[0] whe
31750 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c  n passed to xFil
31760 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d  ter..**.** A jum
31770 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20  p is made to P2 
31780 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  if the result se
31790 74 20 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e  t after filterin
317a0 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79  g would be empty
317b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69  ..*/.case OP_VFi
317c0 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  lter: {   /* jum
317d0 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b  p */.  int nArg;
317e0 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20  .  int iQuery;. 
317f0 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
31800 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
31810 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20    Mem *pQuery;. 
31820 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73   Mem *pArgc;.  s
31830 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
31840 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b  or *pVtabCursor;
31850 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
31860 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65 43 75  *pVtab;.  VdbeCu
31870 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e  rsor *pCur;.  in
31880 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a  t res;.  int i;.
31890 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a    Mem **apArg;..
318a0 20 20 70 51 75 65 72 79 20 3d 20 26 61 4d 65 6d    pQuery = &aMem
318b0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72  [pOp->p3];.  pAr
318c0 67 63 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b  gc = &pQuery[1];
318d0 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  .  pCur = p->apC
318e0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
318f0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
31900 64 28 70 51 75 65 72 79 29 20 29 3b 0a 20 20 52  d(pQuery) );.  R
31910 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
31920 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a  p->p3, pQuery);.
31930 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
31940 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
31950 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70   pVtabCursor = p
31960 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
31970 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56 74 61  ;.  pVtab = pVta
31980 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
31990 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
319a0 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f  b->pModule;..  /
319b0 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64 65 78  * Grab the index
319c0 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63   number and argc
319d0 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20   parameters */. 
319e0 20 61 73 73 65 72 74 28 20 28 70 51 75 65 72 79   assert( (pQuery
319f0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29  ->flags&MEM_Int)
31a00 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c  !=0 && pArgc->fl
31a10 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
31a20 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41    nArg = (int)pA
31a30 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65  rgc->u.i;.  iQue
31a40 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79  ry = (int)pQuery
31a50 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76  ->u.i;..  /* Inv
31a60 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72 20  oke the xFilter 
31a70 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20  method */.  {.  
31a80 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 61    res = 0;.    a
31a90 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pArg = p->apArg;
31aa0 0a 20 20 20 20 66 6f 72 28 69 20 3d 20 30 3b 20  .    for(i = 0; 
31ab0 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
31ac0 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26      apArg[i] = &
31ad0 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20  pArgc[i+1];.    
31ae0 7d 0a 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64  }..    rc = pMod
31af0 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56 74  ule->xFilter(pVt
31b00 61 62 43 75 72 73 6f 72 2c 20 69 51 75 65 72 79  abCursor, iQuery
31b10 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72  , pOp->p4.z, nAr
31b20 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 20 20 73  g, apArg);.    s
31b30 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
31b40 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
31b50 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
31b60 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
31b70 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e   res = pModule->
31b80 78 45 6f 66 28 70 56 74 61 62 43 75 72 73 6f 72  xEof(pVtabCursor
31b90 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 56 64 62  );.    }.    Vdb
31ba0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
31bb0 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20  !=0,2);.    if( 
31bc0 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20  res ){.      pc 
31bd0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
31be0 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d     }.  }.  pCur-
31bf0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20  >nullRow = 0;.. 
31c00 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
31c10 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
31c20 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
31c30 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
31c40 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
31c50 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f  E./* Opcode: VCo
31c60 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a 20  lumn P1 P2 P3 * 
31c70 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
31c80 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e 28 50 32 29  [P3]=vcolumn(P2)
31c90 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  .**.** Store the
31ca0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 32   value of the P2
31cb0 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a  -th column of.**
31cc0 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68 65 20   the row of the 
31cd0 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 74 68  virtual-table th
31ce0 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20 63 75  at the .** P1 cu
31cf0 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e 67  rsor is pointing
31d00 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73 74 65   to into registe
31d10 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P3..*/.case OP
31d20 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71  _VColumn: {.  sq
31d30 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
31d40 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
31d50 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
31d60 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74  le;.  Mem *pDest
31d70 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
31d80 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20  ext sContext;.. 
31d90 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
31da0 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
31db0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
31dc0 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
31dd0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
31de0 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
31df0 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
31e00 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
31e10 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f  pDest = &aMem[pO
31e20 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p3];.  memAbo
31e30 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44  utToChange(p, pD
31e40 65 73 74 29 3b 0a 20 20 69 66 28 20 70 43 75 72  est);.  if( pCur
31e50 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
31e60 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
31e70 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20  etNull(pDest);. 
31e80 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
31e90 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56  pVtab = pCur->pV
31ea0 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
31eb0 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ;.  pModule = pV
31ec0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
31ed0 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
31ee0 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65  >xColumn );.  me
31ef0 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c 20  mset(&sContext, 
31f00 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65  0, sizeof(sConte
31f10 78 74 29 29 3b 0a 20 20 73 43 6f 6e 74 65 78 74  xt));.  sContext
31f20 2e 70 4f 75 74 20 3d 20 70 44 65 73 74 3b 0a 20  .pOut = pDest;. 
31f30 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
31f40 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  pDest, MEM_Null)
31f50 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ;.  rc = pModule
31f60 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e  ->xColumn(pCur->
31f70 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 73 43  pVtabCursor, &sC
31f80 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29  ontext, pOp->p2)
31f90 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49  ;.  sqlite3VtabI
31fa0 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
31fb0 56 74 61 62 29 3b 0a 20 20 69 66 28 20 73 43 6f  Vtab);.  if( sCo
31fc0 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 20 29 7b  ntext.isError ){
31fd0 0a 20 20 20 20 72 63 20 3d 20 73 43 6f 6e 74 65  .    rc = sConte
31fe0 78 74 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a  xt.isError;.  }.
31ff0 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
32000 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 44 65 73  ngeEncoding(pDes
32010 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  t, encoding);.  
32020 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
32030 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a  Op->p3, pDest);.
32040 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
32050 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20  BSIZE(pDest);.. 
32060 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
32070 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65 73 74 29  MemTooBig(pDest)
32080 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
32090 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _big;.  }.  brea
320a0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
320b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
320c0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
320d0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
320e0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
320f0 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31  Opcode: VNext P1
32100 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
32110 41 64 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20  Advance virtual 
32120 74 61 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20  table P1 to the 
32130 6e 65 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20  next row in its 
32140 72 65 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a  result set and.*
32150 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  * jump to instru
32160 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69  ction P2.  Or, i
32170 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  f the virtual ta
32180 62 6c 65 20 68 61 73 20 72 65 61 63 68 65 64 0a  ble has reached.
32190 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74  ** the end of it
321a0 73 20 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68  s result set, th
321b0 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
321c0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
321d0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
321e0 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f   OP_VNext: {   /
321f0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69  * jump */.  sqli
32200 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
32210 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
32220 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
32230 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 56  ;.  int res;.  V
32240 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
32250 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70  ..  res = 0;.  p
32260 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
32270 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
32280 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75  t( pCur->pVtabCu
32290 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 43  rsor );.  if( pC
322a0 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  ur->nullRow ){. 
322b0 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
322c0 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56  pVtab = pCur->pV
322d0 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
322e0 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ;.  pModule = pV
322f0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
32300 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
32310 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20  >xNext );..  /* 
32320 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65 78 74  Invoke the xNext
32330 28 29 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65  () method of the
32340 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65 20 69   module. There i
32350 73 20 6e 6f 20 77 61 79 20 66 6f 72 20 74 68 65  s no way for the
32360 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67  .  ** underlying
32370 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
32380 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  to return an err
32390 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63 75 72 73  or if one occurs
323a0 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65   during.  ** xNe
323b0 78 74 28 29 2e 20 49 6e 73 74 65 61 64 2c 20 69  xt(). Instead, i
323c0 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72  f an error occur
323d0 73 2c 20 74 72 75 65 20 69 73 20 72 65 74 75 72  s, true is retur
323e0 6e 65 64 20 28 69 6e 64 69 63 61 74 69 6e 67 20  ned (indicating 
323f0 74 68 61 74 20 0a 20 20 2a 2a 20 64 61 74 61 20  that .  ** data 
32400 69 73 20 61 76 61 69 6c 61 62 6c 65 29 20 61 6e  is available) an
32410 64 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  d the error code
32420 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20 78   returned when x
32430 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73  Column or.  ** s
32440 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74 68 6f 64  ome other method
32450 20 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64   is next invoked
32460 20 6f 6e 20 74 68 65 20 73 61 76 65 20 76 69 72   on the save vir
32470 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f  tual table curso
32480 72 2e 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20 70  r..  */.  rc = p
32490 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43  Module->xNext(pC
324a0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29  ur->pVtabCursor)
324b0 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49  ;.  sqlite3VtabI
324c0 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
324d0 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63 3d  Vtab);.  if( rc=
324e0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
324f0 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d    res = pModule-
32500 3e 78 45 6f 66 28 70 43 75 72 2d 3e 70 56 74 61  >xEof(pCur->pVta
32510 62 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20  bCursor);.  }.  
32520 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
32530 21 72 65 73 2c 32 29 3b 0a 20 20 69 66 28 20 21  !res,2);.  if( !
32540 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  res ){.    /* If
32550 20 74 68 65 72 65 20 69 73 20 64 61 74 61 2c 20   there is data, 
32560 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20  jump to P2 */.  
32570 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
32580 20 31 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63   1;.  }.  goto c
32590 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
325a0 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  pt;.}.#endif /* 
325b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
325c0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
325d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
325e0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
325f0 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65   Opcode: VRename
32600 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
32610 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
32620 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
32630 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
32640 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
32650 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73  ructure..** This
32660 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
32670 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
32680 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64  g xRename method
32690 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  . The value.** i
326a0 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
326b0 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 7a   passed as the z
326c0 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f  Name argument to
326d0 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74   the xRename met
326e0 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  hod..*/.case OP_
326f0 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c  VRename: {.  sql
32700 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
32710 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a  ;.  Mem *pName;.
32720 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
32730 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b  p4.pVtab->pVtab;
32740 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d 65 6d  .  pName = &aMem
32750 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
32760 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64  ert( pVtab->pMod
32770 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a  ule->xRename );.
32780 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
32790 61 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b 0a 20  alid(pName) );. 
327a0 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
327b0 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 52 45 47  Only==0 );.  REG
327c0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
327d0 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20 61  >p1, pName);.  a
327e0 73 73 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66 6c  ssert( pName->fl
327f0 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 3b  ags & MEM_Str );
32800 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e 61  .  testcase( pNa
32810 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  me->enc==SQLITE_
32820 55 54 46 38 20 29 3b 0a 20 20 74 65 73 74 63 61  UTF8 );.  testca
32830 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d  se( pName->enc==
32840 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29  SQLITE_UTF16BE )
32850 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e  ;.  testcase( pN
32860 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45  ame->enc==SQLITE
32870 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20 72 63  _UTF16LE );.  rc
32880 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
32890 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4e 61  angeEncoding(pNa
328a0 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29  me, SQLITE_UTF8)
328b0 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
328c0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20  TE_OK ){.    rc 
328d0 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
328e0 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62 2c  ->xRename(pVtab,
328f0 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 20 20   pName->z);.    
32900 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
32910 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
32920 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  );.    p->expire
32930 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65  d = 0;.  }.  bre
32940 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
32950 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
32960 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
32970 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74  * Opcode: VUpdat
32980 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
32990 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 64 61  .** Synopsis: da
329a0 74 61 3d 72 5b 50 33 40 50 32 5d 0a 2a 2a 0a 2a  ta=r[P3@P2].**.*
329b0 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
329c0 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  r to a virtual t
329d0 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20  able object, an 
329e0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
329f0 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20  ucture..** This 
32a00 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
32a10 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
32a20 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 2e   xUpdate method.
32a30 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72   P2 values.** ar
32a40 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d  e contiguous mem
32a50 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72 74 69  ory cells starti
32a60 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61 73 73  ng at P3 to pass
32a70 20 74 6f 20 74 68 65 20 78 55 70 64 61 74 65 20   to the xUpdate 
32a80 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20  .** invocation. 
32a90 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  The value in reg
32aa0 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31 29 20  ister (P3+P2-1) 
32ab0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
32ac0 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65 6d  he .** p2th elem
32ad0 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67 76 20  ent of the argv 
32ae0 61 72 72 61 79 20 70 61 73 73 65 64 20 74 6f 20  array passed to 
32af0 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54  xUpdate..**.** T
32b00 68 65 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f  he xUpdate metho
32b10 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c 45  d will do a DELE
32b20 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52 54 20  TE or an INSERT 
32b30 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65 20  or both..** The 
32b40 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74 20  argv[0] element 
32b50 28 77 68 69 63 68 20 63 6f 72 72 65 73 70 6f 6e  (which correspon
32b60 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c  ds to memory cel
32b70 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68 65 20  l P3).** is the 
32b80 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77 20 74  rowid of a row t
32b90 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20 61 72  o delete.  If ar
32ba0 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74 68  gv[0] is NULL th
32bb0 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74 69  en no .** deleti
32bc0 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68 65 20  on occurs.  The 
32bd0 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74 20  argv[1] element 
32be0 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  is the rowid of 
32bf0 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e  the new .** row.
32c00 20 20 54 68 69 73 20 63 61 6e 20 62 65 20 4e 55    This can be NU
32c10 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65 20 76  LL to have the v
32c20 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 65 6c  irtual table sel
32c30 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20  ect the new .** 
32c40 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65 6c 66  rowid for itself
32c50 2e 20 20 54 68 65 20 73 75 62 73 65 71 75 65 6e  .  The subsequen
32c60 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68  t elements in th
32c70 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a 2a 20  e array are .** 
32c80 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 63 6f  the values of co
32c90 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65 77  lumns in the new
32ca0 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50   row..**.** If P
32cb0 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e 73  2==1 then no ins
32cc0 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d 65 64  ert is performed
32cd0 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20 74 68  .  argv[0] is th
32ce0 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61 20  e rowid of.** a 
32cf0 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a 2a  row to delete..*
32d00 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62 6f 6f  *.** P1 is a boo
32d10 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20 69 74  lean flag. If it
32d20 20 69 73 20 73 65 74 20 74 6f 20 74 72 75 65 20   is set to true 
32d30 61 6e 64 20 74 68 65 20 78 55 70 64 61 74 65 20  and the xUpdate 
32d40 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63 65  call.** is succe
32d50 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68 65 20  ssful, then the 
32d60 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  value returned b
32d70 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  y sqlite3_last_i
32d80 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 0a 2a  nsert_rowid() .*
32d90 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  * is set to the 
32da0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 77  value of the row
32db0 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77 20 6a  id for the row j
32dc0 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a  ust inserted..**
32dd0 0a 2a 2a 20 50 35 20 69 73 20 74 68 65 20 65 72  .** P5 is the er
32de0 72 6f 72 20 61 63 74 69 6f 6e 73 20 28 4f 45 5f  ror actions (OE_
32df0 52 65 70 6c 61 63 65 2c 20 4f 45 5f 46 61 69 6c  Replace, OE_Fail
32e00 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 65 74 63  , OE_Ignore, etc
32e10 29 20 74 6f 0a 2a 2a 20 61 70 70 6c 79 20 69 6e  ) to.** apply in
32e20 20 74 68 65 20 63 61 73 65 20 6f 66 20 61 20 63   the case of a c
32e30 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 75 72  onstraint failur
32e40 65 20 6f 6e 20 61 6e 20 69 6e 73 65 72 74 20 6f  e on an insert o
32e50 72 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73  r update..*/.cas
32e60 65 20 4f 50 5f 56 55 70 64 61 74 65 3a 20 7b 0a  e OP_VUpdate: {.
32e70 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
32e80 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
32e90 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
32ea0 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41  Module;.  int nA
32eb0 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73  rg;.  int i;.  s
32ec0 71 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f 77 69  qlite_int64 rowi
32ed0 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67  d;.  Mem **apArg
32ee0 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20  ;.  Mem *pX;..  
32ef0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d  assert( pOp->p2=
32f00 3d 31 20 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  =1        || pOp
32f10 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c 20 20 20  ->p5==OE_Fail   
32f20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52  || pOp->p5==OE_R
32f30 6f 6c 6c 62 61 63 6b 20 0a 20 20 20 20 20 20 20  ollback .       
32f40 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 41  || pOp->p5==OE_A
32f50 62 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  bort || pOp->p5=
32f60 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c 20 70 4f  =OE_Ignore || pO
32f70 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63  p->p5==OE_Replac
32f80 65 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28  e.  );.  assert(
32f90 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
32fa0 29 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  );.  pVtab = pOp
32fb0 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61  ->p4.pVtab->pVta
32fc0 62 3b 0a 20 20 69 66 28 20 70 56 74 61 62 3d 3d  b;.  if( pVtab==
32fd0 30 20 7c 7c 20 4e 45 56 45 52 28 70 56 74 61 62  0 || NEVER(pVtab
32fe0 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30 29 20 29 7b  ->pModule==0) ){
32ff0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
33000 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 62 72 65  _LOCKED;.    bre
33010 61 6b 3b 0a 20 20 7d 0a 20 20 70 4d 6f 64 75 6c  ak;.  }.  pModul
33020 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
33030 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70  le;.  nArg = pOp
33040 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
33050 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
33060 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20 41 4c  VTAB );.  if( AL
33070 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55  WAYS(pModule->xU
33080 70 64 61 74 65 29 20 29 7b 0a 20 20 20 20 75 38  pdate) ){.    u8
33090 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20   vtabOnConflict 
330a0 3d 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66  = db->vtabOnConf
330b0 6c 69 63 74 3b 0a 20 20 20 20 61 70 41 72 67 20  lict;.    apArg 
330c0 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20  = p->apArg;.    
330d0 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  pX = &aMem[pOp->
330e0 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  p3];.    for(i=0
330f0 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
33100 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
33110 6d 49 73 56 61 6c 69 64 28 70 58 29 20 29 3b 0a  mIsValid(pX) );.
33120 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
33130 43 68 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a 20  Change(p, pX);. 
33140 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20       apArg[i] = 
33150 70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a  pX;.      pX++;.
33160 20 20 20 20 7d 0a 20 20 20 20 64 62 2d 3e 76 74      }.    db->vt
33170 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 70  abOnConflict = p
33180 4f 70 2d 3e 70 35 3b 0a 20 20 20 20 72 63 20 3d  Op->p5;.    rc =
33190 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74   pModule->xUpdat
331a0 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c 20 61  e(pVtab, nArg, a
331b0 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20  pArg, &rowid);. 
331c0 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e     db->vtabOnCon
331d0 66 6c 69 63 74 20 3d 20 76 74 61 62 4f 6e 43 6f  flict = vtabOnCo
331e0 6e 66 6c 69 63 74 3b 0a 20 20 20 20 73 71 6c 69  nflict;.    sqli
331f0 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
33200 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
33210 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
33220 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20  E_OK && pOp->p1 
33230 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
33240 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41 72 67   nArg>1 && apArg
33250 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b 30 5d  [0] && (apArg[0]
33260 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c  ->flags&MEM_Null
33270 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c  ) );.      db->l
33280 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
33290 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20  owid = rowid;.  
332a0 20 20 7d 0a 20 20 20 20 69 66 28 20 28 72 63 26    }.    if( (rc&
332b0 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f  0xff)==SQLITE_CO
332c0 4e 53 54 52 41 49 4e 54 20 26 26 20 70 4f 70 2d  NSTRAINT && pOp-
332d0 3e 70 34 2e 70 56 74 61 62 2d 3e 62 43 6f 6e 73  >p4.pVtab->bCons
332e0 74 72 61 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  traint ){.      
332f0 69 66 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f  if( pOp->p5==OE_
33300 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20  Ignore ){.      
33310 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
33320 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
33330 20 20 20 20 20 20 20 70 2d 3e 65 72 72 6f 72 41         p->errorA
33340 63 74 69 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e 70  ction = ((pOp->p
33350 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 29 20 3f  5==OE_Replace) ?
33360 20 4f 45 5f 41 62 6f 72 74 20 3a 20 70 4f 70 2d   OE_Abort : pOp-
33370 3e 70 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  >p5);.      }.  
33380 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
33390 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20  ->nChange++;.   
333a0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
333b0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
333c0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
333d0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
333e0 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41    SQLITE_OMIT_PA
333f0 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f  GER_PRAGMAS./* O
33400 70 63 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74  pcode: Pagecount
33410 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
33420 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72  ** Write the cur
33430 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70  rent number of p
33440 61 67 65 73 20 69 6e 20 64 61 74 61 62 61 73 65  ages in database
33450 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65   P1 to memory ce
33460 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ll P2..*/.case O
33470 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20  P_Pagecount: {  
33480 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
33490 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
334a0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71    pOut->u.i = sq
334b0 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 50 61  lite3BtreeLastPa
334c0 67 65 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  ge(db->aDb[pOp->
334d0 70 31 5d 2e 70 42 74 29 3b 0a 20 20 62 72 65 61  p1].pBt);.  brea
334e0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  k;.}.#endif...#i
334f0 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d  fndef  SQLITE_OM
33500 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
33510 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 78 50  ./* Opcode: MaxP
33520 67 63 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20  gcnt P1 P2 P3 * 
33530 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 73  *.**.** Try to s
33540 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70  et the maximum p
33550 61 67 65 20 63 6f 75 6e 74 20 66 6f 72 20 64 61  age count for da
33560 74 61 62 61 73 65 20 50 31 20 74 6f 20 74 68 65  tabase P1 to the
33570 20 76 61 6c 75 65 20 69 6e 20 50 33 2e 0a 2a 2a   value in P3..**
33580 20 44 6f 20 6e 6f 74 20 6c 65 74 20 74 68 65 20   Do not let the 
33590 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75  maximum page cou
335a0 6e 74 20 66 61 6c 6c 20 62 65 6c 6f 77 20 74 68  nt fall below th
335b0 65 20 63 75 72 72 65 6e 74 20 70 61 67 65 20 63  e current page c
335c0 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f 20 6e  ount and.** do n
335d0 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20 6d 61  ot change the ma
335e0 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74  ximum page count
335f0 20 76 61 6c 75 65 20 69 66 20 50 33 3d 3d 30 2e   value if P3==0.
33600 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  .**.** Store the
33610 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f   maximum page co
33620 75 6e 74 20 61 66 74 65 72 20 74 68 65 20 63 68  unt after the ch
33630 61 6e 67 65 20 69 6e 20 72 65 67 69 73 74 65 72  ange in register
33640 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
33650 4d 61 78 50 67 63 6e 74 3a 20 7b 20 20 20 20 20  MaxPgcnt: {     
33660 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
33670 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 75  rerelease */.  u
33680 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d  nsigned int newM
33690 61 78 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74  ax;.  Btree *pBt
336a0 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  ;..  pBt = db->a
336b0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
336c0 0a 20 20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20  .  newMax = 0;. 
336d0 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
336e0 20 20 20 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c      newMax = sql
336f0 69 74 65 33 42 74 72 65 65 4c 61 73 74 50 61 67  ite3BtreeLastPag
33700 65 28 70 42 74 29 3b 0a 20 20 20 20 69 66 28 20  e(pBt);.    if( 
33710 6e 65 77 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e  newMax < (unsign
33720 65 64 29 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77  ed)pOp->p3 ) new
33730 4d 61 78 20 3d 20 28 75 6e 73 69 67 6e 65 64 29  Max = (unsigned)
33740 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70  pOp->p3;.  }.  p
33750 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74  Out->u.i = sqlit
33760 65 33 42 74 72 65 65 4d 61 78 50 61 67 65 43 6f  e3BtreeMaxPageCo
33770 75 6e 74 28 70 42 74 2c 20 6e 65 77 4d 61 78 29  unt(pBt, newMax)
33780 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
33790 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  dif.../* Opcode:
337a0 20 49 6e 69 74 20 2a 20 50 32 20 2a 20 50 34 20   Init * P2 * P4 
337b0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
337c0 53 74 61 72 74 20 61 74 20 50 32 0a 2a 2a 0a 2a  Start at P2.**.*
337d0 2a 20 50 72 6f 67 72 61 6d 73 20 63 6f 6e 74 61  * Programs conta
337e0 69 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e 73 74  in a single inst
337f0 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 70 63  ance of this opc
33800 6f 64 65 20 61 73 20 74 68 65 20 76 65 72 79 20  ode as the very 
33810 66 69 72 73 74 0a 2a 2a 20 6f 70 63 6f 64 65 2e  first.** opcode.
33820 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e  .**.** If tracin
33830 67 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79  g is enabled (by
33840 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61   the sqlite3_tra
33850 63 65 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c  ce()) interface,
33860 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46   then.** the UTF
33870 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69  -8 string contai
33880 6e 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69  ned in P4 is emi
33890 74 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63  tted on the trac
338a0 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 20 4f  e callback..** O
338b0 72 20 69 66 20 50 34 20 69 73 20 62 6c 61 6e 6b  r if P4 is blank
338c0 2c 20 75 73 65 20 74 68 65 20 73 74 72 69 6e 67  , use the string
338d0 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
338e0 69 74 65 33 5f 73 71 6c 28 29 2e 0a 2a 2a 0a 2a  ite3_sql()..**.*
338f0 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 74 20 7a  * If P2 is not z
33900 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73  ero, jump to ins
33910 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a  truction P2..*/.
33920 63 61 73 65 20 4f 50 5f 49 6e 69 74 3a 20 7b 20  case OP_Init: { 
33930 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
33940 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 72 61   */.  char *zTra
33950 63 65 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a  ce;.  char *z;..
33960 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 7b    if( pOp->p2 ){
33970 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
33980 32 20 2d 20 31 3b 0a 20 20 7d 0a 23 69 66 6e 64  2 - 1;.  }.#ifnd
33990 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
339a0 52 41 43 45 0a 20 20 69 66 28 20 64 62 2d 3e 78  RACE.  if( db->x
339b0 54 72 61 63 65 0a 20 20 20 26 26 20 21 70 2d 3e  Trace.   && !p->
339c0 64 6f 69 6e 67 52 65 72 75 6e 0a 20 20 20 26 26  doingRerun.   &&
339d0 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d   (zTrace = (pOp-
339e0 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e  >p4.z ? pOp->p4.
339f0 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30  z : p->zSql))!=0
33a00 0a 20 20 29 7b 0a 20 20 20 20 7a 20 3d 20 73 71  .  ){.    z = sq
33a10 6c 69 74 65 33 56 64 62 65 45 78 70 61 6e 64 53  lite3VdbeExpandS
33a20 71 6c 28 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20  ql(p, zTrace);. 
33a30 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62     db->xTrace(db
33a40 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a 29 3b  ->pTraceArg, z);
33a50 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
33a60 65 65 28 64 62 2c 20 7a 29 3b 0a 20 20 7d 0a 23  ee(db, z);.  }.#
33a70 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
33a80 5f 46 43 4e 54 4c 5f 54 52 41 43 45 0a 20 20 7a  _FCNTL_TRACE.  z
33a90 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34  Trace = (pOp->p4
33aa0 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a  .z ? pOp->p4.z :
33ab0 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 69 66 28   p->zSql);.  if(
33ac0 20 7a 54 72 61 63 65 20 29 7b 0a 20 20 20 20 69   zTrace ){.    i
33ad0 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d  nt i;.    for(i=
33ae0 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b  0; i<db->nDb; i+
33af0 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 44 62  +){.      if( Db
33b00 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
33b10 65 4d 61 73 6b 2c 20 69 29 3d 3d 30 20 29 20 63  eMask, i)==0 ) c
33b20 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 73  ontinue;.      s
33b30 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74  qlite3_file_cont
33b40 72 6f 6c 28 64 62 2c 20 64 62 2d 3e 61 44 62 5b  rol(db, db->aDb[
33b50 69 5d 2e 7a 4e 61 6d 65 2c 20 53 51 4c 49 54 45  i].zName, SQLITE
33b60 5f 46 43 4e 54 4c 5f 54 52 41 43 45 2c 20 7a 54  _FCNTL_TRACE, zT
33b70 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  race);.    }.  }
33b80 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
33b90 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43  E_USE_FCNTL_TRAC
33ba0 45 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  E */.#ifdef SQLI
33bb0 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 28  TE_DEBUG.  if( (
33bc0 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
33bd0 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d 30 0a  TE_SqlTrace)!=0.
33be0 20 20 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20     && (zTrace = 
33bf0 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70  (pOp->p4.z ? pOp
33c00 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c  ->p4.z : p->zSql
33c10 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 73  ))!=0.  ){.    s
33c20 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74  qlite3DebugPrint
33c30 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20 25 73  f("SQL-trace: %s
33c40 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20  \n", zTrace);.  
33c50 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
33c60 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64  TE_DEBUG */.#end
33c70 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
33c80 54 5f 54 52 41 43 45 20 2a 2f 0a 20 20 62 72 65  T_TRACE */.  bre
33c90 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
33ca0 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20  e: Noop * * * * 
33cb0 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69  *.**.** Do nothi
33cc0 6e 67 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75  ng.  This instru
33cd0 63 74 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75  ction is often u
33ce0 73 65 66 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a  seful as a jump.
33cf0 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a  ** destination..
33d00 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67  */./*.** The mag
33d10 69 63 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64  ic Explain opcod
33d20 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72  e are only inser
33d30 74 65 64 20 77 68 65 6e 20 65 78 70 6c 61 69 6e  ted when explain
33d40 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a 20 69 73  ==2 (which.** is
33d50 20 74 6f 20 73 61 79 20 77 68 65 6e 20 74 68 65   to say when the
33d60 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
33d70 4c 41 4e 20 73 79 6e 74 61 78 20 69 73 20 75 73  LAN syntax is us
33d80 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ed.).** This opc
33d90 6f 64 65 20 72 65 63 6f 72 64 73 20 69 6e 66 6f  ode records info
33da0 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65  rmation from the
33db0 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20 49 74 20   optimizer.  It 
33dc0 69 73 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 61  is the.** the sa
33dd0 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20  me as a no-op.  
33de0 54 68 69 73 20 6f 70 63 6f 64 65 73 6e 65 76 65  This opcodesneve
33df0 72 20 61 70 70 65 61 72 73 20 69 6e 20 61 20 72  r appears in a r
33e00 65 61 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a  eal VM program..
33e10 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20 20  */.default: {   
33e20 20 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69         /* This i
33e30 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70  s really OP_Noop
33e40 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20   and OP_Explain 
33e50 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
33e60 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f  ->opcode==OP_Noo
33e70 70 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  p || pOp->opcode
33e80 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 3b 0a  ==OP_Explain );.
33e90 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a    break;.}../***
33ea0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33eb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33ec0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33ed0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33ee0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
33ef0 65 20 63 61 73 65 73 20 6f 66 20 74 68 65 20 73  e cases of the s
33f00 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
33f10 61 62 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 20  above this line 
33f20 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e  should all be in
33f30 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20 73  dented.** by 6 s
33f40 70 61 63 65 73 2e 20 20 42 75 74 20 74 68 65 20  paces.  But the 
33f50 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73 70 61 63  left-most 6 spac
33f60 65 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 6d  es have been rem
33f70 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f 76 65 20  oved to improve 
33f80 74 68 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69  the.** readabili
33f90 74 79 2e 20 20 46 72 6f 6d 20 74 68 69 73 20 70  ty.  From this p
33fa0 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68  oint on down, th
33fb0 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61  e normal indenta
33fc0 74 69 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a  tion rules are.*
33fd0 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a  * restored..****
33fe0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33ff0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34000 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34010 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34020 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d  *********/.    }
34030 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ..#ifdef VDBE_PR
34040 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20  OFILE.    {.    
34050 20 20 75 36 34 20 65 6e 64 54 69 6d 65 20 3d 20    u64 endTime = 
34060 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b  sqlite3Hwtime();
34070 0a 20 20 20 20 20 20 69 66 28 20 65 6e 64 54 69  .      if( endTi
34080 6d 65 3e 73 74 61 72 74 20 29 20 70 4f 70 2d 3e  me>start ) pOp->
34090 63 79 63 6c 65 73 20 2b 3d 20 65 6e 64 54 69 6d  cycles += endTim
340a0 65 20 2d 20 73 74 61 72 74 3b 0a 20 20 20 20 20  e - start;.     
340b0 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20 20   pOp->cnt++;.   
340c0 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f   }.#endif..    /
340d0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
340e0 63 6f 64 65 20 61 64 64 73 20 6e 6f 74 68 69 6e  code adds nothin
340f0 67 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20  g to the actual 
34100 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20  functionality.  
34110 20 20 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67    ** of the prog
34120 72 61 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79  ram.  It is only
34130 20 68 65 72 65 20 66 6f 72 20 74 65 73 74 69 6e   here for testin
34140 67 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e  g and debugging.
34150 0a 20 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f  .    ** On the o
34160 74 68 65 72 20 68 61 6e 64 2c 20 69 74 20 64 6f  ther hand, it do
34170 65 73 20 62 75 72 6e 20 43 50 55 20 63 79 63 6c  es burn CPU cycl
34180 65 73 20 65 76 65 72 79 20 74 69 6d 65 20 74 68  es every time th
34190 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74 68 65  rough.    ** the
341a0 20 65 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e   evaluator loop.
341b0 20 20 53 6f 20 77 65 20 63 61 6e 20 6c 65 61 76    So we can leav
341c0 65 20 69 74 20 6f 75 74 20 77 68 65 6e 20 4e 44  e it out when ND
341d0 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e  EBUG is defined.
341e0 0a 20 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20  .    */.#ifndef 
341f0 4e 44 45 42 55 47 0a 20 20 20 20 61 73 73 65 72  NDEBUG.    asser
34200 74 28 20 70 63 3e 3d 2d 31 20 26 26 20 70 63 3c  t( pc>=-1 && pc<
34210 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66 64 65  p->nOp );..#ifde
34220 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
34230 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73     if( db->flags
34240 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72   & SQLITE_VdbeTr
34250 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ace ){.      if(
34260 20 72 63 21 3d 30 20 29 20 70 72 69 6e 74 66 28   rc!=0 ) printf(
34270 22 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20  "rc=%d\n",rc);. 
34280 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70       if( pOp->op
34290 66 6c 61 67 73 20 26 20 28 4f 50 46 4c 47 5f 4f  flags & (OPFLG_O
342a0 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45 7c 4f  UT2_PRERELEASE|O
342b0 50 46 4c 47 5f 4f 55 54 32 29 20 29 7b 0a 20 20  PFLG_OUT2) ){.  
342c0 20 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72        registerTr
342d0 61 63 65 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d  ace(pOp->p2, &aM
342e0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20  em[pOp->p2]);.  
342f0 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
34300 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
34310 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20  PFLG_OUT3 ){.   
34320 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61       registerTra
34330 63 65 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65  ce(pOp->p3, &aMe
34340 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
34350 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69     }.    }.#endi
34360 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  f  /* SQLITE_DEB
34370 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a  UG */.#endif  /*
34380 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20   NDEBUG */.  }  
34390 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68  /* The end of th
343a0 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74  e for(;;) loop t
343b0 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68  he loops through
343c0 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f   opcodes */..  /
343d0 2a 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68  * If we reach th
343e0 69 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61  is point, it mea
343f0 6e 73 20 74 68 61 74 20 65 78 65 63 75 74 69 6f  ns that executio
34400 6e 20 69 73 20 66 69 6e 69 73 68 65 64 20 77 69  n is finished wi
34410 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72  th.  ** an error
34420 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20   of some kind.. 
34430 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68   */.vdbe_error_h
34440 61 6c 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72  alt:.  assert( r
34450 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72  c );.  p->rc = r
34460 63 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 73  c;.  testcase( s
34470 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
34480 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20  ig.xLog!=0 );.  
34490 73 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20  sqlite3_log(rc, 
344a0 22 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 72 74  "statement abort
344b0 73 20 61 74 20 25 64 3a 20 5b 25 73 5d 20 25 73  s at %d: [%s] %s
344c0 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  ", .            
344d0 20 20 20 20 20 20 20 70 63 2c 20 70 2d 3e 7a 53         pc, p->zS
344e0 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  ql, p->zErrMsg);
344f0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  .  sqlite3VdbeHa
34500 6c 74 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d  lt(p);.  if( rc=
34510 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f  =SQLITE_IOERR_NO
34520 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63  MEM ) db->malloc
34530 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63  Failed = 1;.  rc
34540 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
34550 0a 20 20 69 66 28 20 72 65 73 65 74 53 63 68 65  .  if( resetSche
34560 6d 61 4f 6e 46 61 75 6c 74 3e 30 20 29 7b 0a 20  maOnFault>0 ){. 
34570 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f     sqlite3ResetO
34580 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 72 65 73  neSchema(db, res
34590 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 2d  etSchemaOnFault-
345a0 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68  1);.  }..  /* Th
345b0 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77  is is the only w
345c0 61 79 20 6f 75 74 20 6f 66 20 74 68 69 73 20 70  ay out of this p
345d0 72 6f 63 65 64 75 72 65 2e 20 20 57 65 20 68 61  rocedure.  We ha
345e0 76 65 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61  ve to.  ** relea
345f0 73 65 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f  se the mutexes o
34600 6e 20 62 74 72 65 65 73 20 74 68 61 74 20 77 65  n btrees that we
34610 72 65 20 61 63 71 75 69 72 65 64 20 61 74 20 74  re acquired at t
34620 68 65 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a  he.  ** top. */.
34630 76 64 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20 64  vdbe_return:.  d
34640 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c  b->lastRowid = l
34650 61 73 74 52 6f 77 69 64 3b 0a 20 20 74 65 73 74  astRowid;.  test
34660 63 61 73 65 28 20 6e 56 6d 53 74 65 70 3e 30 20  case( nVmStep>0 
34670 29 3b 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72  );.  p->aCounter
34680 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
34690 55 53 5f 56 4d 5f 53 54 45 50 5d 20 2b 3d 20 28  US_VM_STEP] += (
346a0 69 6e 74 29 6e 56 6d 53 74 65 70 3b 0a 20 20 73  int)nVmStep;.  s
346b0 71 6c 69 74 65 33 56 64 62 65 4c 65 61 76 65 28  qlite3VdbeLeave(
346c0 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b  p);.  return rc;
346d0 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
346e0 65 72 65 20 69 66 20 61 20 73 74 72 69 6e 67 20  ere if a string 
346f0 6f 72 20 62 6c 6f 62 20 6c 61 72 67 65 72 20 74  or blob larger t
34700 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c  han SQLITE_MAX_L
34710 45 4e 47 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e  ENGTH.  ** is en
34720 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a  countered..  */.
34730 74 6f 6f 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74  too_big:.  sqlit
34740 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
34750 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 73 74  zErrMsg, db, "st
34760 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f  ring or blob too
34770 20 62 69 67 22 29 3b 0a 20 20 72 63 20 3d 20 53   big");.  rc = S
34780 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20  QLITE_TOOBIG;.  
34790 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
347a0 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
347b0 20 74 6f 20 68 65 72 65 20 69 66 20 61 20 6d 61   to here if a ma
347c0 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20 20  lloc() fails..  
347d0 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d  */.no_mem:.  db-
347e0 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
347f0 31 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53  1;.  sqlite3SetS
34800 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
34810 67 2c 20 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d  g, db, "out of m
34820 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d 20  emory");.  rc = 
34830 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
34840 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
34850 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
34860 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79   to here for any
34870 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66   other kind of f
34880 61 74 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65  atal error.  The
34890 20 22 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20   "rc" variable. 
348a0 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20   ** should hold 
348b0 74 68 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72  the error number
348c0 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65  ..  */.abort_due
348d0 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73  _to_error:.  ass
348e0 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d  ert( p->zErrMsg=
348f0 3d 30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e  =0 );.  if( db->
34900 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72  mallocFailed ) r
34910 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
34920 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
34930 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29  TE_IOERR_NOMEM )
34940 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
34950 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
34960 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
34970 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29  lite3ErrStr(rc))
34980 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62  ;.  }.  goto vdb
34990 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
349a0 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
349b0 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   if the sqlite3_
349c0 69 6e 74 65 72 72 75 70 74 28 29 20 41 50 49 20  interrupt() API 
349d0 73 65 74 73 20 74 68 65 20 69 6e 74 65 72 72 75  sets the interru
349e0 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20  pt.  ** flag..  
349f0 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  */.abort_due_to_
34a00 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61 73 73  interrupt:.  ass
34a10 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e  ert( db->u1.isIn
34a20 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20 20 72  terrupted );.  r
34a30 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  c = SQLITE_INTER
34a40 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20  RUPT;.  p->rc = 
34a50 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74  rc;.  sqlite3Set
34a60 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
34a70 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
34a80 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29  lite3ErrStr(rc))
34a90 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72  ;.  goto vdbe_er
34aa0 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a              ror_halt;.}.